Что не так с этой программой? Паскаль пишет "Ошибка медли исполненья:

Что не так с этой программкой? Паскаль пишет "Ошибка медли исполнения: Индекс находился вне границ массива." и "Параметр цикла 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] lt; M[min, min]
then min := M[a, 4+1-a]
else
if M[a, 4+1-a] gt; 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.

Задать свой вопрос
1 ответ

if M[a, 4+1-a] lt; 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] lt; 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."

Екатерина Маргиева
я теснее немножко изменила программку, то поправила, но новое выскочило:"writeln('Мин. эл-т побоч. диаг. матрицы:', M[a, b]= min); writeln('Макс. эл-т побоч. диаг. матрицы:', M[a, b] = max);"но пишет:"Мин. эл-т побоч. диаг. матрицы: FalseМакс. эл-т побоч. диаг. матрицы: False"что вновь не так? и у меня правильно написано "М [a, b]" либо надобно как-то по-другому?
Аделя Цим
Надобно writeln('Мин. эл-т побоч. диаг. матрицы:', min);, а оно у тебя выводит итог сопоставленья "M[a, b] = min"
Semjon Martychev
не, мне в задаче просто надобно указать еще и размещение эл-та, как именно это провернуть?
Семён Киров
writeln('Мин. эл-т побоч. диаг. матрицы:', min, ', индекс: ', imin); например
Борис Палюбин
не совсем поняла про индексы и как они употребляются в задаче, поясни, пожалуйста
, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт