Задача с массивом
Суть задачи: Дана прямоугольная матрица. Найти строку с наибольшей и наименьшей суммой элементов. Вывести на печать найденные строки и суммы их элементов.
Я написал программу, все работает, но возникает одна ошибка.
После заполнения массива, когда мы возвращаемся в основное тело программы, у меня почему то само по себе меняется b и естественно потом он все считает с ошибкой ((( Помогите разобраться
Код:
program massivi81;
{$APPTYPE CONSOLE}
uses
SysUtils;
type matr=array[2..22,2..22] of integer;
procedure razmernost(out a:integer);
begin
a:=random(20)+2;
end;
procedure zapolnenie_matr (a,b:integer; var m:matr);
var i,i2:byte;
begin
writeln (a,'&&&',b);
for I:=1 to a do //цикл для перебора всех строк
for I2:=1 to b do //цикл для перебора всех элементов строки по столбцам
begin
m[i,i2]:=random(10);
end;
writeln (a,'***',b);
end;
procedure vyvod_matr (a,b:integer; var m:matr);
var i,i2:byte;
begin
writeln (a,'!!!',b);
for I := 1 to a do//цикл для перебора всех строк
begin
for I2:=1 to b do//цикл для перебора всех элементов строки по столбцам -
write (m[i,i2]:3);
writeln;
end;
end;
procedure max_min (a,b:integer; var m:matr);
var i,i2:byte; s, stroka1,stroka2, max, min: integer; p:boolean;
begin
max:=0;
for I:=1 to a do //цикл для перебора всех строк
begin
s:=0;
for I2:=1 to b do //цикл для перебора всех элементов строки по столбцам
begin
s:=s+m[i,i2];
end;
if s>max then begin max:=s; stroka1:=i; end;
if p then begin min:=s; stroka2:=i; p:=false end;
if s<min then begin min:=s; stroka2:=i; end;
end;
writeln;
writeln ('max symma ',max, ', stroka ',stroka1);
writeln ('min symma ',min,', stroka ',stroka2);
end;
var a,b:integer; m:matr;
begin
randomize;
razmernost(a);
razmernost(b);
writeln ('Razmernost matrizi [',a,',',b,']');
zapolnenie_matr(a,b,m);
writeln (a,'^^^',b);
vyvod_matr(a,b,m);
max_min(a,b,m);
readln;
end.
Причем если убрать процедуру razmernost
И заменить
Код:
var a,b:integer; m:matr;
begin
randomize;
razmernost(a);
razmernost(b);
на
Код:
var a,b:integer; m:matr;
begin
randomize;
a:=random(20)+2;
b:=random(20)+2;
то все работает нормально!
|