1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Массивы, передача параметров в процедуры и функции
var a: array [1..100] of tStroka; N, M, i, j :integer; s:real; e: tStroka;
begin write('N, M -> '); readln(N, M); write('Input matrix -> '); for i:=1 to N do for j:=1 to M do begin write('A[',i,',',j,'] -> '); readln(a[i, j]); end; for i:=1 to n do for j:=i-1 downto 1 do begin if a[j,1]<a[j+1,1] then begin e:=a[j]; a[j]:=a[j+1]; a[j+1]:=e; end;
writeln (a[i,j]); end; for i:= 1 to n do begin s:=0; for j:= 1 to m do s:=s+a[i,1]; end; s:=s/N; write (s); end.
Как сделать сортировку в виде процедуры, а вычисление в виде функции? Препод говорил что-то о разных способах задания переменых в процедурах и функциях, и я запутался, когда, какой способ использовать. Помогите, пожалуйста,.
Как сделать сортировку в виде процедуры, а вычисление в виде функции? Препод говорил что-то о разных способах задания переменых в процедурах и функциях, и я запутался, когда, какой способ использовать.
Думаю, твой препод имел в виду параметры-значения и параметры-переменные. Сортировку нужно применять непосредственно к самой матрице, и результат должен отразиться на ней - следовательно, надо применять var-параметр. Вычисление чего-то там (я так и не понял, чего именно; если среднее по столбцам - то оно делается неправильно) дает некий отдельный результат, никак не отражающийся на самой матрице. Следовательно, жеательно применить параметр-значение (хотя var-параметр тоже будет работать, и даже быстрее, нужно только следить за тем, чтоб случайно не испортить матрицу). А все вспомогательные переменнные (параметры цикла, промежуточные суммы..) надо делать локальными, то есть определять их внутри процедуры/функции. Короче, примерно вот так:
const Max= 100;
type tStroka= array [1..Max] of integer; tMnogoStrok= array [1..100] of tStroka;
var a: tMnogoStrok; N, M, i, j:integer; e: tStroka;
procedure Sort(var a: tMnogoStrok); var i,j: integer; begin for i:=1 to n do for j:=i-1 downto 1 do begin if a[j,1]<a[j+1,1] then begin e:=a[j]; a[j]:=a[j+1]; a[j+1]:=e; end; writeln (a[i,j]); end end;
function Calculation(a: tMnogoStrok): double; var i,j: integer; s: double; begin for i:= 1 to n do begin s:=0; for j:= 1 to m do s:=s+a[i,1]; end; Calculation:= s/N end;
begin write('N, M -> '); readln(N, M); write('Input matrix -> '); for i:=1 to N do for j:=1 to M do begin write('A[',i,',',j,'] -> '); {readln(a[i, j]);} a[i,j]:= Random(n*m); end; Sort(a); writeln (Calculation(a)); end.
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
function Calculation(a: tMnogoStrok): double; var i,j: integer; s: double; begin for i:= 1 to n do begin s:=0; for j:= 1 to m do s:=s+a[i,1]; end; Calculation:= s/N end;
Стек - это область памяти, где размещаются переменные вызываемых процедур. Динамически аллоцируемая память размещается в "куче" (heap). Она в TP может достигать аж ~600 килобайт!! Дикое количество, особенно если учесть, что размер памяти сейчас измеряется даже не мегабайтами, а гигабайтами.. Иначе говоря, ТР тебе позволяет использовать одну-две сотых доли процента установленной памяти.. Зачем пользоваться краденным старьем, если есть бесплатный новый компилятор со всеми современными возможностями?
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой