IPB

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> Дана матрица A размером 5*7. Сформировать одномерный массив B размером 5 по правилу
aly17_17
сообщение 3.1.2009, 14:13
Сообщение #1


Пользователь


Группа: Пользователи
Сообщений: 12
Регистрация: 3.1.2009
Пользователь №: 21 265



помогите пожалста решить задачку!!!!!!!!!!!!!!!!!!!!я решила,но не знаю правильно или нет......проверьте пожалуста!!!!исправьте ошибки!!!!заранее спасибо!!!!

Задача такая: Дана матрица A размером 5*7. Сформировать одномерный массив B размером 5 по следующему правилу: если первый элемент строки матрицы положительный, то в соответствующий элемент массива B поместить сумму элементов строки, расположенных после максимального элемента этой строки; в противном случае – 0.

Вот моё решение:

Dim a(5,7) , b(5)
for i=1 to 5
for j=1 to 7
input a(i,j) , b(i)
next j,i
for i-=1 to 5
amax= -1000
for j=1 to 7
if a(i,j)>amax then amax=a(i,j) : jmax=j
next j
for i=1 to 5
for j=jmax+1 to 7
s=s+a(i,j)
next j
for i=1 to 5
for j=1 to 7
if a(i,1)>0 then b(i)=s else b(i)=0
next i
for i=1 to 5
print b(i)
next i
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
PolPoll
сообщение 3.1.2009, 17:30
Сообщение #2


:)


Группа: Главные администраторы
Сообщений: 5 858
Регистрация: 24.11.2005
Из: Москва
Пользователь №: 5 327



Цитата(aly17_17 @ 3.1.2009, 17:13) *

Задача такая: Дана матрица A размером 5*7. Сформировать одномерный массив B размером 5 по следующему правилу: если первый элемент строки матрицы положительный, то в соответствующий элемент массива B поместить сумму элементов строки, расположенных после максимального элемента этой строки; в противном случае – 0.


Код
Dim a(5,7) , b(5)

for i = 1 to 5
for j = 1 to 7
input a(i,j)
next j
next i

for i = 1 to 5
if a(i,1)>0 then

amax = a(i,1)
jmax = 1
for j = 2 to 7
if a(i,j)>amax then amax=a(i,j) : jmax=j
next j

s = 0
for j = jmax+1 to 7
s = s + a(i,j)
next j

b(i) = s

else

b(i)=0

end if
next i

for i=1 to 5
print b(i)
next i
Примерно так


--------------------
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
aly17_17
сообщение 3.1.2009, 18:41
Сообщение #3


Пользователь


Группа: Пользователи
Сообщений: 12
Регистрация: 3.1.2009
Пользователь №: 21 265



спасибо!!!!!
а почему вот тут не задано i ?

s = 0
for j = jmax+1 to 7
s = s + a(i,j)
next j
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Denis
сообщение 3.1.2009, 18:53
Сообщение #4


Пользователь


Группа: Пользователи
Сообщений: 1 081
Регистрация: 24.1.2005
Пользователь №: 1 933



aly17_17, потому, что этот цикл по j идет внутри цикла по i (строчка next i "ниже").
PolPoll, учтено ли, что макс. может быть в "конце" строчки? (синтаксиса васьки не знаю rolleyes.gif )
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
PolPoll
сообщение 3.1.2009, 19:54
Сообщение #5


:)


Группа: Главные администраторы
Сообщений: 5 858
Регистрация: 24.11.2005
Из: Москва
Пользователь №: 5 327



Цитата(Denis @ 3.1.2009, 21:53) *

PolPoll, учтено ли, что макс. может быть в "конце" строчки? (синтаксиса васьки не знаю rolleyes.gif )
Учтено.
В цикле for условие проверяется в начале - и он может ни разу не выполнится


а вот ввод b - был лишний... biggrin.gif


--------------------
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Denis
сообщение 3.1.2009, 21:17
Сообщение #6


Пользователь


Группа: Пользователи
Сообщений: 1 081
Регистрация: 24.1.2005
Пользователь №: 1 933



Код
В цикле for условие проверяется в начале - и он может ни разу не выполнится

вот это и интересовало wink.gif
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
aly17_17
сообщение 4.1.2009, 15:42
Сообщение #7


Пользователь


Группа: Пользователи
Сообщений: 12
Регистрация: 3.1.2009
Пользователь №: 21 265



а почему ввод b был лишний??
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Denis
сообщение 4.1.2009, 16:44
Сообщение #8


Пользователь


Группа: Пользователи
Сообщений: 1 081
Регистрация: 24.1.2005
Пользователь №: 1 933



aly17_17 , потому, что заполнять b надо по определенному условию, которое дано, а он заполнялся в цикле по i (или j) по правилу: b[i]:=i; {b[j]:=j} smile.gif вообщем не парься, программу рабочую тебе дали
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
aly17_17
сообщение 6.1.2009, 15:18
Сообщение #9


Пользователь


Группа: Пользователи
Сообщений: 12
Регистрация: 3.1.2009
Пользователь №: 21 265



помогите пожалуста ещё с одной задачкой.......чёт я не пойму как делать.....

Дана матрица A размером 10*5. Преобразовать матрицу следующим образом: заменить первый элемент столбца суммой элементов столбца, расположенных после максимального элемента, если максимальный элемент находится в первой половине столбца. В противном случае оставить столбец без изменения.

вот как узнать находится элемент в 1-ой половине столбца или нет????вообще не понимаю эту задачу...((((((((((( sad.gif
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
aly17_17
сообщение 6.1.2009, 17:37
Сообщение #10


Пользователь


Группа: Пользователи
Сообщений: 12
Регистрация: 3.1.2009
Пользователь №: 21 265



я вот написала........проверьте пожалуста!!!!

Dim a(10,5)
for i=1 to 10
for j=1 to 5
input a(i,j)
next j,i
for i=1 to 10
amax=-1000
for j=1 to 5
if a(i,j)>amax then amax=a(i,j):imax=i
next i
for i=1 to 10
for j=1 to 5
if imax<=5 then
for i=imax+1 to 10
s=0
for j=1 to 5
s=s+a(i,j)
next i
a(1,j)=s
next j
else exit for
end if
for i=1 to 10
for j=1 to 5
print a(i,j);
next j
print
next i

Сообщение отредактировал aly17_17 - 6.1.2009, 18:36
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Denis
сообщение 6.1.2009, 18:42
Сообщение #11


Пользователь


Группа: Пользователи
Сообщений: 1 081
Регистрация: 24.1.2005
Пользователь №: 1 933



мда... давай гадать, какое у тебя условие. говорю сразу, начальное условие дано неполностью/некорректно. пусть дана матрица А:
Код

1 2 3 4 5
7 1 1 7 1
1 1 1 7 1
1 1 1 1 1
1 1 1 1 1
- - - - -
1 1 1 1 1
1 1 1 1 1
1 7 1 1 1
1 1 1 1 1
1 1 7 1 1

тогда, что должно получиться?
A' - первая строка "модифицированной" матрицы
Код

8 2 3 (14 или 7) 9
7 1 1      7     1
1 1 1      7     1
1 1 1      1     1
1 1 1      1     1
- - - - - - - - -
1 1 1      1     1
1 1 1      1     1
1 7 1      1     1
1 1 1      1     1
1 1 7      1     1

PS все ИМХО
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
aly17_17
сообщение 6.1.2009, 21:28
Сообщение #12


Пользователь


Группа: Пользователи
Сообщений: 12
Регистрация: 3.1.2009
Пользователь №: 21 265



как некорректное?))))задали такую задачку.......не я условие придумала)))))))
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Denis
сообщение 7.1.2009, 9:31
Сообщение #13


Пользователь


Группа: Пользователи
Сообщений: 1 081
Регистрация: 24.1.2005
Пользователь №: 1 933



Код

Исход. матр.              Результат
1 2 3 4 1                 8 2 3 (14 или 7) (9 или 1)
7 1 1 7 1                 7 1 1      7          1
1 1 1 7 1                 1 1 1      7          1
1 1 1 1 1                 1 1 1      1          1
1 1 1 1 5                 1 1 1      1          1
- - - - -                 - - - - - - - - - - - - -
1 1 1 1 5                 1 1 1      1          1
1 1 1 1 1                 1 1 1      1          1
1 7 1 1 1                 1 7 1      1          1
1 1 1 1 1                 1 1 1      1          1
1 1 7 1 1                 1 1 7      1          5

посмотри на пример. в четвертом столбце два элемента имеют максимальное значение (7). так после какого нужно считать сумму элементов: после (2;4) - получится 14 или после (3;4) - получится 7. а если будет так, что один из элементов, хранящих максимальное значение, будет в "верхней" части, а второй в "нижней" (смотри пятый столбец - элементы (5;5) и (6;5)). тогда как быть?

Сообщение отредактировал Denis - 7.1.2009, 9:33
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
aly17_17
сообщение 7.1.2009, 10:10
Сообщение #14


Пользователь


Группа: Пользователи
Сообщений: 12
Регистрация: 3.1.2009
Пользователь №: 21 265



максимальный индекс должен быть <=5 и тогда будет в первой половине столбца
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Denis
сообщение 7.1.2009, 11:18
Сообщение #15


Пользователь


Группа: Пользователи
Сообщений: 1 081
Регистрация: 24.1.2005
Пользователь №: 1 933



aly17_17 , ты видимо мои посты ваще не читаешь. ну что же, я пытался помочь wink.gif
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
aly17_17
сообщение 7.1.2009, 13:36
Сообщение #16


Пользователь


Группа: Пользователи
Сообщений: 12
Регистрация: 3.1.2009
Пользователь №: 21 265



я просто не понимаю в чём проблема в условии...дали задачу,я пытаюсь решить,просто надо проверить прально или нет)))))
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
aly17_17
сообщение 7.1.2009, 18:29
Сообщение #17


Пользователь


Группа: Пользователи
Сообщений: 12
Регистрация: 3.1.2009
Пользователь №: 21 265



откуда я знаю как быть!!)))))))я ж в этом практически не разбираюсь!думаешь почему я спрашиваю)))))))
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
PolPoll
сообщение 8.1.2009, 10:55
Сообщение #18


:)


Группа: Главные администраторы
Сообщений: 5 858
Регистрация: 24.11.2005
Из: Москва
Пользователь №: 5 327



Цитата
Дана матрица A размером 10*5. Преобразовать матрицу следующим образом: заменить первый элемент столбца суммой элементов столбца, расположенных после максимального элемента, если максимальный элемент находится в первой половине столбца. В противном случае оставить столбец без изменения.

Код
ввод A

for j=1 to 5

amax=a(1,j)
imax = 1
for i=2 to 10
if a(i,j)>amax then amax=a(i,j):imax=i
next i

if imax<=5 then

s=0
for i=imax+1 to 10
s=s+a(i,j)
next i
a(1,j)=s

end if

next j

вывод A


--------------------
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
aly17_17
сообщение 8.1.2009, 12:22
Сообщение #19


Пользователь


Группа: Пользователи
Сообщений: 12
Регистрация: 3.1.2009
Пользователь №: 21 265



спасибо!!!!а после a(1,j)=s не надо писать else exit for ?там же написано что если max не находится в первой половине столбца,то оставить столбец без изменений
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
PolPoll
сообщение 8.1.2009, 13:54
Сообщение #20


:)


Группа: Главные администраторы
Сообщений: 5 858
Регистрация: 24.11.2005
Из: Москва
Пользователь №: 5 327



Цитата(aly17_17 @ 8.1.2009, 15:22) *

спасибо!!!!а после a(1,j)=s не надо писать else exit for ?
Разве остальные столбцы дальше в цикле разбирать не надо?

Цитата(aly17_17 @ 8.1.2009, 15:22) *

там же написано что если max не находится в первой половине столбца,то оставить столбец без изменений
Вот по этому по ветке else ничего и не делается - даже самой ветки нет - зачем она пустая?



--------------------
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

2 страниц V  1 2 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 23.5.2012, 3:51