1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
дан двумерный массив, вывести ту строку, сумма модулей элементов в которой максимальна. использовать процедуры.
я не соображу, как собственно вывести строку
и еще... при компиляции появляется ошибка 36 ( отсутствие begin), не знаю, где его пропустила
uses crt; const n=2; m=5; type vect=array[1..n] of real; matr=array[1..m] of vect; procedure input(var a:matr); var i,j:byte; begin writeln ('vvedite elementi dvymernogo massiva'); for i:=1 to n do for j:=1 to n do read (a[i,j]); end; procedure stroka(a:matr; var:s,s1); i,j:byte; max:real; begin for i:=1 to n do for j:=1 to m do begin s:=0; s:=s+abs(a[1,j]; max:=s; s1:=s1+abs(a[2,j]); if max<s1 then writeln ('nyshai stroka:2'); else writeln ('nysnai stroka :1'); writeln ('s=',s:4:1); writeln ('s1=',s1:4:1); end; end; var a:matr; begin input(a); storka(a,s,s1); readkey; end.
Первое замечание: соблюдай отступы! после каждого begin текст идет на 2 позиции правее, после end - левее. Посмотри на мой код внизу - сразу видно, где задаются переменные, где тело процедуры, а где тело цикла, правда?
В процедуре Модыл (modyl) понаворочено.. 1. В тройном цикле самый внешний (по k) - лишний. 2. Соответственно, сам параметр k - лишний. Все k заменить на i. 3. Тело цикла упростить так: s[i]:=s[i]+abs(a[i,j]) 4. Тогда переменная t больше не нужна - убрать (она все равно неправильно использовалась) 5. Для краткости, убери цикл с занулением s[i] и сделай зануление во внешнем цикле двойного перед внутренним.
Должно получиться что-то вроде этого:
procedure modyl(var a:matr; var s:vect); var i:1..n; j:1..m; begin for i:=1 to n do begin s[k]:=0; for j:=1 to m do t:=t+abs(a[i,j]) end end;
В процедуре Поиск что-то совсем странное.. Ты печатаешь ВСЕ строчки, у которых s[k] больше чем s[1]. При этом первую строчка не напечатается, даже если s[1] больше всех остальных значений. Кроме того, ты перепутала n и m, поэтому выводятся не 3, а 2 элемента.. Как нужно делать: 1. Запоминаешь s[1] в max (это у тебя есть). 2. Заводишь еще один параметр (скажем, L) для номера искомой строки. 3. Кладешь в L единицу (номер первой строки). 4. Устраиваешь цикл по строчкам со 2-й (потому что первый элемент сравнивать с самим собой бессмысленно) до m. 5. В этом цикле, если s[k] больше чем max, то запоминаешь параметр цикла в L. 6. Выходишь из цикла и печатаешь строку с номером L.
Последнее замечание: почему ты в процедуре Модыл параметры цикла определяла диапазоном, а в процедуре Поиск аналогичные параметры у тебя integer? Типа при поиске проверка диапазона тебе не важна? Вот потому-то у тебя и получаются ошибки от путаницы m и n. Уж если делаешь диапазоном, делай везде. Когда перестанешь делать очевидные ошибки (или хотя бы научишься их искать) - тогда делай intrger..
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
Первое замечание: соблюдай отступы! после каждого begin текст идет на 2 позиции правее, после end - левее. Посмотри на мой код внизу - сразу видно, где задаются переменные, где тело процедуры, а где тело цикла, правда?
В процедуре Модыл (modyl) понаворочено.. 1. В тройном цикле самый внешний (по k) - лишний. 2. Соответственно, сам параметр k - лишний. Все k заменить на i. 3. Тело цикла упростить так: s[i]:=s[i]+abs(a[i,j]) 4. Тогда переменная t больше не нужна - убрать (она все равно неправильно использовалась) 5. Для краткости, убери цикл с занулением s[i] и сделай зануление во внешнем цикле двойного перед внутренним.
Должно получиться что-то вроде этого:
procedure modyl(var a:matr; var s:vect); var i:1..n; j:1..m; begin for i:=1 to n do begin s[k]:=0; for j:=1 to m do t:=t+abs(a[i,j]) end end;
В процедуре Поиск что-то совсем странное.. Ты печатаешь ВСЕ строчки, у которых s[k] больше чем s[1]. При этом первую строчка не напечатается, даже если s[1] больше всех остальных значений. Кроме того, ты перепутала n и m, поэтому выводятся не 3, а 2 элемента.. Как нужно делать: 1. Запоминаешь s[1] в max (это у тебя есть). 2. Заводишь еще один параметр (скажем, L) для номера искомой строки. 3. Кладешь в L единицу (номер первой строки). 4. Устраиваешь цикл по строчкам со 2-й (потому что первый элемент сравнивать с самим собой бессмысленно) до m. 5. В этом цикле, если s[k] больше чем max, то запоминаешь параметр цикла в L. 6. Выходишь из цикла и печатаешь строку с номером L.
Последнее замечание: почему ты в процедуре Модыл параметры цикла определяла диапазоном, а в процедуре Поиск аналогичные параметры у тебя integer? Типа при поиске проверка диапазона тебе не важна? Вот потому-то у тебя и получаются ошибки от путаницы m и n. Уж если делаешь диапазоном, делай везде. Когда перестанешь делать очевидные ошибки (или хотя бы научишься их искать) - тогда делай intrger..
кажется, я в очередной раз запуталась в процедурах modyl и poisk , программа мне выводит три строчки по 2 элемента, я наверное снова путаю m и n? вот кусок для этих процедур:
procedure modyl(var a:matr; var s:vect); var i:1..n; j:1..m; begin for i:=1 to n do begin s[i]:=0; for j:=1 to m do begin s[i]:=s[i]+abs(a[i,j]); end; end; end; procedure poisk (var s:vect;a:matr); var j:1..m;l,i:1..n; max:integer; begin max:=s[1]; l:=1; for i:=2 to n do begin if max<s[i] then l:=i; end; for j:=1 to m do writeln (s[l]); end;
кажется, я в очередной раз запуталась в процедурах modyl и poisk , программа мне выводит три строчки по 2 элемента, я наверное снова путаю m и n? вот кусок для этих процедур:
procedure modyl(var a:matr; var s:vect); var i:1..n; j:1..m; begin for i:=1 to n do begin s[i]:=0; for j:=1 to m do begin s[i]:=s[i]+abs(a[i,j]); end; end; end; procedure poisk (var s:vect;a:matr); var j:1..m;l,i:1..n; max:integer; begin max:=s[1]; l:=1; for i:=2 to n do begin if max<s[i] then l:=i; end; for j:=1 to m do writeln (s[l]); end;
Уррррааа! Ты делаешь громадные успехи, кроме шуток. Продолжай в том же духе!
PS При ответе, пожалуйста, оставляй из цитаты сообщения, на которое отвечаешь, только то, что нужно, а остальное удаляй - вот как я сейчас сделал, видишь?
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой