Что не так с этой программой? Паскаль пишет "Ошибка времени выполнения: Индекс находился вне границ массива." и "Параметр цикла 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.

13 Сен 2019 в 00:43
570 +1
0
Ответы
1

Ошибка в программе заключается в неправильном использовании переменных 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.

20 Апр в 01:22
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 493 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир