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

Ответы 6

  • я уже немного изменила программу, то исправила, но новое выскочило:"writeln('Мин. эл-т побоч. диаг. матрицы:', M[a, b]= min); writeln('Макс. эл-т побоч. диаг. матрицы:', M[a, b] = max);"но пишет:"Мин. эл-т побоч. диаг. матрицы: FalseМакс. эл-т побоч. диаг. матрицы: False"что опять не так? и у меня правильно написано "М [a, b]" или надо как-то по-другому?
  • Надо writeln('Мин. эл-т побоч. диаг. матрицы:', min);, а оно у тебя выводит результат сравнения "M[a, b] = min"
    • Автор:

      pugh
    • 5 лет назад
    • 0
  • не, мне в задаче просто надо указать еще и расположение эл-та, как именно это провернуть?
  • writeln('Мин. эл-т побоч. диаг. матрицы:', min, ', индекс: ', imin); например
    • Автор:

      maddie33
    • 5 лет назад
    • 0
  • не совсем поняла про индексы и как они используются в задаче, поясни, пожалуйста
    • Автор:

      arielesxf
    • 5 лет назад
    • 0
  • 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."

  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years