Найти наибольший чётный положительный элемент выше главной диагонали матрицы - Turbo Pascal (33544)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Нужна помощь по теме "двумерные массивы"! Задача. Дан двумерный массив. Найти наибольший чётный положительный элемент выше главной диагонали и наименьший отрицательный элемент ниже главной диагонали с указанием их индексов. Создать новый массив, в котором найденные элементы поменяются местами. Заранее спасибо за помощь! Требования преподавателя - числа задаются не рандомно , сделать так чтобы можно было вводить размерность массива( количество строк,столбцов)

Решение задачи: «Найти наибольший чётный положительный элемент выше главной диагонали матрицы»

textual
Листинг программы
program mass;
 
const m = 16;
 
var n, i, j, ia, ja, ib, jb, t: integer;
    a: array [1..m, 1..m] of integer;
    fa, fb: boolean;
 
begin
  //ввод размерности массива
  repeat
    write('n = ');
    readln(n);
    if (n < 2) or (n > m) then writeln('n out of range 2..', m, ', reenter.')
  until (n >= 2) and (n <= m);
  //ввод массива
  writeln('Enter array:');
  for j := 1 to n do
    for i := 1 to n do
      begin
        write('a[', i, ', ', j, '] = ');
        readln(a[i, j])
      end;
  //печать исходного массива, поиск нужных элементов
  fa := false;
  fb := false;
  writeln('Source array:');
  for j := 1 to n do
    begin
      for i := 1 to n do
        begin
          write(a[i, j]:6);
          if (i > j) and not(odd(a[i, j])) and (a[i, j] >= 0)
            then if fa
              then begin
                if (a[i, j] > a[ia, ja])
                  then begin
                    ia := i;
                    ja := j
                  end
              end
              else begin
                ia := i;
                ja := j;
                fa := true;
              end;
          if (i < j) and (a[i, j] < 0)
            then if fb
              then begin
                if (a[i, j] < a[ib, jb])
                  then begin
                    ib := i;
                    jb := j
                  end
              end
              else begin
                ib := i;
                jb := j;
                fb := true
              end
        end;
      writeln
    end;
  //вывод найденных элементов
  write('Max even positive element above principal diagonal: ');
  if fa then writeln('a[', ia, ', ', ja, '] = ', a[ia, ja])
        else writeln('not found.');
  write('Min negative element below principal diagonal: ');
  if fb then writeln('a[', ib, ', ', jb, '] = ', a[ib, jb])
        else writeln('not found.');
  //обмен элементов и печать массива, если это возможно
  if fa and fb
    then begin
      t := a[ia, ja];
      a[ia, ja] := a[ib, jb];
      a[ib, jb] := t;
      writeln('Result:');
      for j := 1 to n do
        begin
        for i := 1 to n do write(a[i, j]:6);
        writeln
      end
    end
    else writeln('No change.');
  readln //ждём нажатия <Enter> перед закрытием программы
end.

Объяснение кода листинга программы

  1. Переменная m инициализируется значением 16.
  2. В цикле repeat-until пользователю предлагается ввести размерность массива от 2 до 16. Если введенные данные не соответствуют указанному диапазону, программа выводит сообщение об ошибке и просит пользователя повторить ввод.
  3. В цикле for происходит ввод данных для каждого элемента массива.
  4. Переменные fa и fb инициализируются значением false. Они будут использоваться для отслеживания того, был ли найден наибольший или наименьший элемент соответственно.
  5. В блоке if проверяется, является ли текущий элемент массива четным и положительным. Если это так, то он сравнивается с предыдущим наибольшим четным положительным элементом. Если текущий элемент больше, то он становится новым наибольшим элементом, и его индексы сохраняются в переменных ia и ja.
  6. Если в массиве есть такой элемент, то в блоке if проверяется, является ли следующий элемент за ним меньшим отрицательным элементом. Если это так, то индексы этого элемента сохраняются в переменных ib и jb.
  7. В блоке else проверяется, не были найдены наибольший элемент или наименьший элемент. Если это так, то индексы текущего элемента сохраняются в переменных ia и jb.
  8. Если в массиве есть наибольший элемент, то в блоке if проверяется, можно ли обменять его с элементом ниже главной диагонали. Если это так, то происходит обмен элементов, и текущий элемент становится новым наибольшим элементом.
  9. В конце программы выводится сообщение с найденными наибольшим и наименьшим элементами.

Оцени полезность:

11   голосов , оценка 3.909 из 5
Похожие ответы