Что не так с этой программой? Паскаль пишет "Ошибка времени выполнения: Индекс находился вне границ массива." и "Параметр цикла for в PascalABC.NET должен описываться в заголовке цикла" PROGRAM Massiv; VAR M: array [1..4, 1..4] of integer; a, b, min, max: integer; begin writeln('Исходная матрица:'); for a := 1 to 4 do begin for b := 1 to 4 do begin M[a, b] := random(10); write(M[a, b]:4) end; writeln end; min := 10; max := 0; for a := 1 to 4 do if M[a, 4+1-a] < M[min, min] then min := M[a, 4+1-a] else if M[a, 4+1-a] > M[max, max] then max := M[a, 4+1-a]; writeln('Мин. эл-т побоч. диаг. матрицы: M[', min:2, ', ', min:2, '] = ', M[min, min]:3); writeln('Макс. эл-т побоч. диаг. матрицы: M[', max:2, ', ', max:2, '] = ', M[max, max]:3); a := M[min, min]; M[min, min] := M[max, max]; M[max, max] := a; writeln('Результат:'); for a := 1 to 4 do begin for b := 1 to 4 do write(M[a, b]:4); writeln end; readln end.
Ошибка в программе заключается в неправильном использовании переменных min и max. В строке: if M[a, 4+1-a] < M[min, min] и if M[a, 4+1-a] > M[max, max] переменные min и max должны описываться в заголовке цикла for. Например: for a := 1 to 4 do var min, max: integer; begin ... end;
Кроме того, в строке: writeln('Мин. эл-т побоч. диаг. матрицы: M[', min:2, ', ', min:2, '] = ', M[min, min]:3); следует заменить M[min, min] на M[a, 4+1-a], так как min и max не являются координатами элементов в массиве.
Правильный фрагмент кода может выглядеть примерно так:
for a := 1 to 4 do var min, max: integer; begin min := 1; max := 1; for a := 1 to 4 do begin if M[a, 4+1-a] < M[min, min] then min := a; if M[a, 4+1-a] > M[max, max] then max := a; end;
Ошибка в программе заключается в неправильном использовании переменных min и max. В строке:
if M[a, 4+1-a] < M[min, min]
и
if M[a, 4+1-a] > M[max, max]
переменные min и max должны описываться в заголовке цикла for. Например:
for a := 1 to 4 do
var
min, max: integer;
begin
...
end;
Кроме того, в строке:
writeln('Мин. эл-т побоч. диаг. матрицы: M[', min:2, ', ', min:2, '] = ', M[min, min]:3);
следует заменить M[min, min] на M[a, 4+1-a], так как min и max не являются координатами элементов в массиве.
Правильный фрагмент кода может выглядеть примерно так:
for a := 1 to 4 do
var
min, max: integer;
begin
min := 1;
max := 1;
for a := 1 to 4 do
begin
if M[a, 4+1-a] < M[min, min] then
min := a;
if M[a, 4+1-a] > M[max, max] then
max := a;
end;
writeln('Мин. эл-т побоч. диаг. матрицы: M[', min, ', ', 4+1-min, '] = ', M[min, 4+1-min]);
writeln('Макс. эл-т побоч. диаг. матрицы: M[', max, ', ', 4+1-max, '] = ', M[max, 4+1-max]);
a := M[min, 4+1-min];
M[min, 4+1-min] := M[max, 4+1-max];
M[max, 4+1-max] := a;
writeln('Результат:');
for a := 1 to 4 do
begin
for b := 1 to 4 do
write(M[a, b]:4);
writeln;
end;
readln;
end.