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

Ответы на вопрос

if M[a, 4+1-a] < M[min, min]
then min := M[a, 4+1-a]
- у тебя в матрице рандомные числа максимум до 10, ты назначаешь их в min и max, а потом эти min и max пытаешься использовать как индексы.
Заведи отдельные переменные для сохранения индексов, например imin и imax и пользуйся ими, например как-то так:
for a := 1 to 4 do
if M[a, 4+1-a] < M[imin, imin]
then begin
min := M[a, 4+1-a];
imin := a;
end
По поводу параметра цикла не уверен, возможно в Pascal.ABC есть какие-то особенности по сравнению с обычным паскалем. Нашел вот такое:
"Описание параметра цикла for в заголовке цикла соблюдает принцип локальности: переменная описывается в том месте, где она впервые понадобилась
begin
for i: integer := 1 to 9 do
write(i,' ');
// Здесь переменная i не доступна!
for var i := 9 downto 1 do // описание с автоопределением типа
write(i,' ');
end."



В этой программе есть несколько проблем:
Ошибка времени выполнения: Индекс находился вне границ массива. Эта ошибка возникает из-за того, что вы обращаетесь к элементу массива за его границами. В Pascal массивы индексируются с 1, поэтому вам нужно изменить объявление массива
M
следующим образом:M: array [1..4, 1..4] of integer;
. В остальных частях программы также следует использовать индексы от 1 до 4.Ошибка: Параметр цикла for в PascalABC.NET должен описываться в заголовке цикла. Эта ошибка возникает из-за того, что внешний цикл
for a
не был объявлен в заголовке циклаfor b
. Чтобы исправить это, вы должны добавить объявление циклаfor a
в заголовок циклаfor b
, как показано ниже:
pascalfor a := 1 to 4 do for b := 1 to 4 do begin M[a, b] := random(10); write(M[a, b]:4) end;
После внесения этих изменений программа должна работать правильно.


Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili