Бумер Опубликовано 8 ноября, 2006 Жалоба Поделиться Опубликовано 8 ноября, 2006 program lab_6;const n=5;var i,j:integer; a:array [1..n,1..n] of integer; s:array[1..n] of integer;procedure input (var i,j:integer; a[1..n,1..n]:array of integer; const n);beginwriteln ('wwedite massiv');for i:=1 to n do for j:=1 to n do read (a[i,j]);writeln;writeln ('ishonii massiv:');for i:=1 to n do for j:=1 to n do begin write (' ',a[i,j]); if j=n then writeln;end;end;procedure summi_strok (var i,j:integer; a:array [1..n,1..n] of integer; s:array[1..n] of integer; const n=5);beginfor i:=1 to n do for j:=1 to n do s[i]:=s[i]+a[i,j];end;procedure sort_strok (var s:array[1..n] of integer; a:array[1..n,1..n] of integer; t,s,k,i,j:integer; const n=5);beginconst n=5;var a:array[1..n,1..n] of integer;s:array[1..n] of integer; i,j,c,k,t:integer;beginfor k:= 1 to n dofor c:=(k+1) to n doif s[k]<s[c] then BEGIN t:=s[k];s[k]:=s[c];s[c]:=t; for j:=1 to n do begin t:=a[k,j];a[k,j]:=a[c,j];a[c,j]:=t; end; END;end;procedure output (a:array [1..n,1..n] of integer; i,j:integer; const n=5);begin writeln ('konechnii massiv:');for i:=1 to n do for j:=1 to n do begin write (' ',a[i,j]); if j=n then writeln;end; readln;end;begininput(i,j,a,n);summi_strok;sort_strok;output;end. Вот собст-но прога. если убрать процедуры все пашет как надо. На процедуры паскаль ругается (конкретно в первой процедуре на переменную i цикла for! Не врубаюсь в чем дело. Может растолкуете, а за одно и ошибки в проге найдете. Да, чуть не забыл: прога упорядочивает строки кв. матрицы порядка 5 по возрастанию (сверху самая большая (по сумме элементов) строка.) Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 8 ноября, 2006 Жалоба Поделиться Опубликовано 8 ноября, 2006 Бумер: Я застрял уже на заголовке первой твоей процедуры. Видимо, и компилятор Паскаля тоже. На i компилятору Паскаля ругаться нечего, правда, она в заголовке процедуры вообще по недоразумению, ей как параметру цикла следует быть объявленной в разделе объявлений процедуры, но компилятор это переварит, хотя и с жутко неоптимальным кодом. Ругаться компилятор должен на массив a, который конструируется прямо в заголовке процедуры, чего не допускается. Да если бы и допускалось, толка с него не было бы, поскольку он погиб бы вместе со всеми своими элементами в момент выхода из процедуры. А тип n вообще не указан. Такое впечатление, что ты о процедурах ничего не читал. Заголовки процедур и объявления переменных - разные вещи, частично похожие, правда, но только частично. Зачем в такой программе процедуры - тоже не знаю, скорее всего для тренировки, но тогда это должно быть написано в задании. Так или иначе, привожу программу. При вводе числа каждой строки массива разделяются между собой пробелами, переход к вводу новой строки - по Enter. const n=5;type P=array[1..n] of Integer;var a:array[1..n] of P; s,t:P; i,j,k:Integer;beginfor i:=1 to n do for j:=1 to n do Read(a[i,j]);for i:=1 to n do begin s[i]:=0; for j:=1 to n do s [i]:=s[i]+a[i,j] end;for i:=1 to n do for j:=1 to n-i do if s[j]>s[j+1] thenbegin t:=a[j];a[j]:=a[j+1];a[j+1]:=t; k:=s[j];s[j]:=s[j+1];s[j+1]:=k end;writeln;for i:=1 to n do begin for j:=1 to n do Write(a[i,j],' '); WriteLn end;end. При желании любой оператор программы можно оформить как процедуру ;) Ссылка на комментарий Поделиться на другие сайты Поделиться
Бумер Опубликовано 9 ноября, 2006 Автор Жалоба Поделиться Опубликовано 9 ноября, 2006 Нет, нет нужно обязательно использовать процедуры. после того как написал это сообщение, прочитал лекцию о процедурах и понял что я - долбо**. Думал что я крутой и все понял. Теперь когда будет время перепишу... если конечно можете, то напишите свой код оформления одной из процедур(для проверки). Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 9 ноября, 2006 Жалоба Поделиться Опубликовано 9 ноября, 2006 Бумер: Лекции нужны в основном для того, чтобы понять, что проходили и что об этом думает преподаватель. Учить надо по книгам. Книги надо подбирать самому - что нравится одному, то не нравится другому, но лучше справочного характера и не "для чайников". Вот для примера я набил пример процедурами: для ввода и вывода данных, для подсчета суммы элементов строки матрицы и для сортировки const n=5;type P=array[1..n] of Integer;var a:array[1..n] of P; s:P; i:Integer;procedure Input;var i,j:Integer; begin for i:=1 to n do for j:=1 to n do Read(a[i,j]) end;procedure Output;var i,j:Integer; begin WriteLn; for i:=1 to n do begin for j:=1 to n do Write(a[i,j],' '); WriteLn end end;procedure SumStr(var m:Integer; l:P); var j:Integer; begin m:=0; for j:=1 to n do m:=m+l[j] end;Procedure Sort; var i,j,k:Integer; t:P; begin for i:=1 to n do for j:=1 to n-i do if s[j]>s[j+1] thenbegin t:=a[j];a[j]:=a[j+1];a[j+1]:=t; k:=s[j];s[j]:=s[j+1];s[j+1]:=k end end;beginInput;for i:=1 to n do SumStr(s[i], a[i]);Sort;Output;end. Разбивать на процедуры и решать, что им передавать в списке параметров, а что оставить внешними переменными, можно, конечно, по-разному, так что твой вариант может сильно отличаться от моего. Ссылка на комментарий Поделиться на другие сайты Поделиться
Бумер Опубликовано 12 ноября, 2006 Автор Жалоба Поделиться Опубликовано 12 ноября, 2006 Тролль, я вот не врублюсь Procedure Sort; procedure Input procedure Output; - как эти процедуры будут передавать результат своей работы в основную программу? Они же должны использовать параметры-переменнные, верно? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 12 ноября, 2006 Жалоба Поделиться Опубликовано 12 ноября, 2006 Бумер: Они же должны использовать параметры-переменнные, верно?Нет. Процедура может без каких-либо проблем использовать константы, переменные и типы данных, определенные вне процедуры. В том числе и менять значения внешних переменных. Важно только, чтобы они были описаны до определения процедуры, потому что компилятор просматривает текст программы последовательно. А вот внутренние (объявленные внутри процедуры) переменные процедуры вне ее не видны. В примере у меня процедуры Input и т.п. не использовали за ненадобностью аппарат формальных-фактических параметров, потому что работали всегда с одними и теми же внешними переменными (тем более что "всегда" в данном случае означает один раз :( ), а вот в процедуре SumStr был смысл его использовать, потому что она вызывается пять раз для работы с разными строками и элементами массива сумм строк. Но и там константа n и тип P - внешние. Ссылка на комментарий Поделиться на другие сайты Поделиться
Delphi Опубликовано 14 ноября, 2006 Жалоба Поделиться Опубликовано 14 ноября, 2006 Может я конешно что-то с ответов не понял но всетаки у меня возник вопрос к автору вы пишете const n var i,j:integer; a:array [1..n,1..n] of integer; s:array[1..n] of integer; procedure input (var i,j:integer; a[1..n,1..n]:array of integer; const n); не легче написать const n var i,j:integer; a:array [1..n,1..n] of integer; s:array[1..n] of integer; procedure input ; begin действия end; как я понимаю у тебя всеравно a это глобальный масив зачем его заново в каждой процедуре обявлять Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения