Отсортировать положительные элементы ниже побочной диагонали матрицы по возрастанию - Pascal

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

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

Помогите зделать задачку:Дана матрица N*m.Отсортировать положительные элементы ниже побочной диагонали по возрастанию,а отрицательные элементы выше побочной диагонали по возрастаниюНайти наибольший элемент выше побочной диагонали с указанием его индекса

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

textual
Листинг программы
  1. var
  2.     a: Array[Byte, Byte] Of ShortInt;
  3.     temp: Array[Byte] Of ShortInt;
  4.     i, j, k, n, iMax, jMax, nTemp: Byte;
  5.     swap: ShortInt;
  6. begin
  7.     {ввод размерности}
  8.     repeat
  9.         Write('Input n(>1): ');
  10.         ReadLn(n);
  11.     until (n > 1);
  12.     Randomize; WriteLn;
  13.     {заполнение и поиск максимума}
  14.     iMax := 0; jMax := 0;
  15.     for i := 0 to n - 1 do
  16.     begin
  17.         for j := 0 to n - 1 do
  18.         begin
  19.             a[i, j] := Random(199) - 99;
  20.             Write(a[i, j]:4);
  21.             if ((j + i + 1 < n) And (a[i, j] > a[iMax, jMax]))
  22.             then
  23.             begin
  24.                 iMax := i;
  25.                 jMax := j;
  26.             end;
  27.         end;
  28.         WriteLn;
  29.     end;
  30.     WriteLn('Max[', iMax + 1, '][', jMax + 1, ']=', a[iMax, jMax]);
  31.     {сортировка ниже побочной диагонали}
  32.     nTemp := 0;
  33.     for i := 1 to n - 1 do
  34.         for j := n - i to n - 1 do
  35.             if (a[i, j] > 0)
  36.             then
  37.             begin
  38.                 temp[nTemp] := a[i, j];
  39.                 Inc(nTemp);
  40.             end;
  41.     if (nTemp > 1)
  42.     then
  43.     begin
  44.         for i := 0 to nTemp - 2 do
  45.             for j := 0 to nTemp - i - 2 do
  46.                 if (temp[j] > temp[j + 1])
  47.                 then
  48.                 begin
  49.                     swap := temp[j];
  50.                     temp[j] := temp[j + 1];
  51.                     temp[j + 1] := swap;
  52.                 end;
  53.         k := 0; i := 1;
  54.         while ((i < n) And (k < nTemp)) do
  55.         begin
  56.             j := n - i;
  57.             while ((j < n) And (k < nTemp)) do
  58.             begin
  59.                 if (a[i, j] > 0)
  60.                 then
  61.                 begin
  62.                     a[i, j] := temp[k];
  63.                     Inc(k);
  64.                 end;
  65.                 Inc(j);
  66.             end;
  67.             Inc(i);
  68.         end;
  69.     end;
  70.     {сортировка выше побочной диагонали}
  71.     nTemp := 0;
  72.     for i := 0 to n - 2 do
  73.         for j := 0 to n - i - 2 do
  74.             if (a[i, j] < 0)
  75.             then
  76.             begin
  77.                 temp[nTemp] := a[i, j];
  78.                 Inc(nTemp);
  79.             end;
  80.     if (nTemp > 1)
  81.     then
  82.     begin
  83.         for i := 0 to nTemp - 2 do
  84.             for j := 0 to nTemp - i - 2 do
  85.                 if (temp[j] > temp[j + 1])
  86.                 then
  87.                 begin
  88.                     swap := temp[j];
  89.                     temp[j] := temp[j + 1];
  90.                     temp[j + 1] := swap;
  91.                 end;
  92.         k := 0; i := 0;
  93.         while ((i < n - 1) And (k < nTemp)) do
  94.         begin
  95.             j := 0;
  96.             while ((j < n - i - 1) And (k < nTemp)) do
  97.             begin
  98.                 if (a[i, j] < 0)
  99.                 then
  100.                 begin
  101.                     a[i, j] := temp[k];
  102.                     Inc(k);
  103.                 end;
  104.                 Inc(j);
  105.             end;
  106.             Inc(i);
  107.         end;
  108.     end;
  109.     {вывод итоговый}
  110.     for i := 0 to n - 1 do
  111.     begin
  112.         for j := 0 to n - 1 do
  113.             Write(a[i, j]:4);
  114.         WriteLn;
  115.     end;
  116. end.

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

  1. Объявление переменных:
    • a: двумерный массив размерности Byte, хранящий числа типа ShortInt
    • temp: одномерный массив размерности Byte, хранящий числа типа ShortInt
    • i, j, k, n, iMax, jMax, nTemp: переменные типа Byte
    • swap: переменная типа ShortInt
  2. Ввод размерности:
    • Пользователю предлагается ввести число n (количество строк и столбцов матрицы) до тех пор, пока введенное значение n больше 1.
  3. Заполнение матрицы и поиск максимума:
    • Генерируется случайное значение для каждого элемента матрицы и выводится на экран.
    • Выполняется поиск максимального значения в матрице и его индексов с учетом условия ниже побочной диагонали.
  4. Сортировка положительных элементов ниже побочной диагонали по возрастанию:
    • Положительные элементы ниже побочной диагонали копируются в массив temp и сортируются по возрастанию.
    • Отсортированные элементы из temp заменяют соответствующие элементы в матрице a.
  5. Сортировка отрицательных элементов выше побочной диагонали по убыванию:
    • Отрицательные элементы выше побочной диагонали копируются в массив temp и сортируются по убыванию.
    • Отсортированные элементы из temp заменяют соответствующие элементы в матрице a.
  6. Вывод итоговой матрицы:
    • Отсортированная матрица выводится на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

11   голосов , оценка 3.727 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы