![]() |
|
#1
|
|||
|
|||
![]() Суть задачи: Дана прямоугольная матрица. Найти строку с наибольшей и наименьшей суммой элементов. Вывести на печать найденные строки и суммы их элементов.
Я написал программу, все работает, но возникает одна ошибка. После заполнения массива, когда мы возвращаемся в основное тело программы, у меня почему то само по себе меняется 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; Последний раз редактировалось cash, 29.10.2011 в 17:33. |