Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ матрица

Автор: лоен 20.12.2007 23:37

по идеи этот код должен находить минимальную сумму столбцов.
помогите исправить.

Const
max=20;
type
mat:array[1..max,1..max] of integer;
var
i,j,x,y,s:integer;
min:longint;
procedure vvod_m;
Begin
Writeln('Введите мерность матрици');
Write('i='); readln(i);
Write('j='); readln(j);
Writeln('Введите массив:');
for x:=1 to i do
for y:=1 to j do
Begin
write('a[',x,',',y,']=');
readln(a[x,y]);
End;
End;
begin
vvod_m;
Min:=0;
for y:=1 to j do
begin
s:=0
for x:=1 to i do
begin
s:=s+A[x,y];
if s<min then min:=s;
end;
end;
writeln(‘Минимальная сумма=’, min);
readln;
end.



Добавлено через 15 мин.
не знаю еще как сумму задать. написал ноль. но это по умолчанию неверно.

Автор: Client 21.12.2007 0:12

А ты где описываешь САМ массив (не как тип)?
Основная твоя ошибка здесь:

Min:=0; //А если все элементы положительные?
for y:=1 to j do
begin
s:=0
for x:=1 to i do
begin
s:=s+A[x,y];
if s<min then min:=s; //эту строчку надо вынести в верхний цикл
end;
Вот что получилось:
uses crt;
Const
max=20;
type
mat=array[1..max,1..max] of integer;
var
i,j,x,y,s:integer;
min:longint;
a:mat;
procedure vvod_m;
Begin
Writeln('size');
Write('i='); readln(i);
Write('j='); readln(j);
Writeln('matrix:');
for x:=1 to i do
for y:=1 to j do
Begin
write('a[',x,',',y,']=');
readln(a[x,y]);
End;
End;
begin
clrscr;
vvod_m;
for x:=1 to i do begin
for y:=1 to j do
WRITE(a[x,y]:5);
writeln
end;
Min:=0;
for x:=1 to j do
min:=min+a[x,1];

for y:=1 to j do
begin
s:=0;
for x:=1 to i do
s:=s+A[x,y];
if s<min then min:=s;
end;
writeln(' MIN= ', min);
readln;
end.


Автор: лоен 21.12.2007 0:15

спасибо.

Автор: лоен 21.12.2007 3:49

проверил. почему-то не работает.
задаю матрицу вида:
1 2
3 4
5 6
говорит, что минимум 4 blink.gif
вроде ж ужо все красиво.

Автор: volvo 21.12.2007 4:35

Индексы надо в порядок привести:

 Min:=0;
for x:=1 to i do { <--- Число строк - это I, а не J }
min:=min+a[x,1];
Хотя я бы вместо этого просто присвоил в Min какое-нибудь очень большое значение. Желательно - самое большое: MaxInt