Сравните две прграммы вывода суммы модулей элементов столбца матрицы:
var
a:array[1..5,1..5] of integer;
i,j,s:integer;
begin
writeln('matriza:');
for i:=1 to 5 do
begin
for j:=1 to 5 do
begin
a[i,j]:=random(20)-10;
write(a[i,j]:4);
end;
writeln;
end;
for j:=1 to 5 do
begin
s:=0;
for i:=1 to 5 do
begin
if a[i,j]<0 then a[i,j]:=abs(a[i,j]);
s:=s+a[i,j];
end;
writeln('symma stolbca ',j,' = ',s);
end;
end.
varРазница в том, что в первой мы изменяем сами элементы массива, а во второй присваиваем некой переменной k значение этого элемента массива. Почесу же втроая программа выдает неправильный резельтат (ответ выводится неверный)?
a:array[1..5,1..5] of integer;
i,j,s,k:integer;
begin
writeln('matriza:');
for i:=1 to 5 do
begin
for j:=1 to 5 do
begin
a[i,j]:=random(20)-10;
write(a[i,j]:4);
end;
writeln;
end;
for j:=1 to 5 do
begin
s:=0;
for i:=1 to 5 do
begin
if a[i,j]<0 then k:=abs(a[i,j]);
s:=s+k;
end;
writeln('symma stolbca ',j,' = ',s);
end;
end.
Потому что у тебя переменная K не инициализируется элементом матрицы, если он положительный. Надо было делать так:
if a[i,j]<0 then k:=abs(a[i,j]) else k := a[i, j];
s:=s+k;
for i:=1 to 5 do, и не надо ничего запоминать...
begin
s:=s+abs(a[i, j]);
end;
Ох, как все просто. Спасибо, volvo.