Отсортировать положительные элементы ниже побочной диагонали матрицы по возрастанию - Pascal
Формулировка задачи:
Помогите зделать задачку:Дана матрица N*m.Отсортировать положительные элементы ниже побочной диагонали по возрастанию,а отрицательные элементы выше побочной диагонали по возрастаниюНайти наибольший элемент выше побочной диагонали с указанием его индекса
Решение задачи: «Отсортировать положительные элементы ниже побочной диагонали матрицы по возрастанию»
textual
Листинг программы
var a: Array[Byte, Byte] Of ShortInt; temp: Array[Byte] Of ShortInt; i, j, k, n, iMax, jMax, nTemp: Byte; swap: ShortInt; begin {ввод размерности} repeat Write('Input n(>1): '); ReadLn(n); until (n > 1); Randomize; WriteLn; {заполнение и поиск максимума} iMax := 0; jMax := 0; for i := 0 to n - 1 do begin for j := 0 to n - 1 do begin a[i, j] := Random(199) - 99; Write(a[i, j]:4); if ((j + i + 1 < n) And (a[i, j] > a[iMax, jMax])) then begin iMax := i; jMax := j; end; end; WriteLn; end; WriteLn('Max[', iMax + 1, '][', jMax + 1, ']=', a[iMax, jMax]); {сортировка ниже побочной диагонали} nTemp := 0; for i := 1 to n - 1 do for j := n - i to n - 1 do if (a[i, j] > 0) then begin temp[nTemp] := a[i, j]; Inc(nTemp); end; if (nTemp > 1) then begin for i := 0 to nTemp - 2 do for j := 0 to nTemp - i - 2 do if (temp[j] > temp[j + 1]) then begin swap := temp[j]; temp[j] := temp[j + 1]; temp[j + 1] := swap; end; k := 0; i := 1; while ((i < n) And (k < nTemp)) do begin j := n - i; while ((j < n) And (k < nTemp)) do begin if (a[i, j] > 0) then begin a[i, j] := temp[k]; Inc(k); end; Inc(j); end; Inc(i); end; end; {сортировка выше побочной диагонали} nTemp := 0; for i := 0 to n - 2 do for j := 0 to n - i - 2 do if (a[i, j] < 0) then begin temp[nTemp] := a[i, j]; Inc(nTemp); end; if (nTemp > 1) then begin for i := 0 to nTemp - 2 do for j := 0 to nTemp - i - 2 do if (temp[j] > temp[j + 1]) then begin swap := temp[j]; temp[j] := temp[j + 1]; temp[j + 1] := swap; end; k := 0; i := 0; while ((i < n - 1) And (k < nTemp)) do begin j := 0; while ((j < n - i - 1) And (k < nTemp)) do begin if (a[i, j] < 0) then begin a[i, j] := temp[k]; Inc(k); end; Inc(j); end; Inc(i); end; end; {вывод итоговый} for i := 0 to n - 1 do begin for j := 0 to n - 1 do Write(a[i, j]:4); WriteLn; end; end.
Объяснение кода листинга программы
- Объявление переменных:
a
: двумерный массив размерности Byte, хранящий числа типа ShortInttemp
: одномерный массив размерности Byte, хранящий числа типа ShortInti, j, k, n, iMax, jMax, nTemp
: переменные типа Byteswap
: переменная типа ShortInt
- Ввод размерности:
- Пользователю предлагается ввести число
n
(количество строк и столбцов матрицы) до тех пор, пока введенное значениеn
больше 1.
- Пользователю предлагается ввести число
- Заполнение матрицы и поиск максимума:
- Генерируется случайное значение для каждого элемента матрицы и выводится на экран.
- Выполняется поиск максимального значения в матрице и его индексов с учетом условия ниже побочной диагонали.
- Сортировка положительных элементов ниже побочной диагонали по возрастанию:
- Положительные элементы ниже побочной диагонали копируются в массив
temp
и сортируются по возрастанию. - Отсортированные элементы из
temp
заменяют соответствующие элементы в матрицеa
.
- Положительные элементы ниже побочной диагонали копируются в массив
- Сортировка отрицательных элементов выше побочной диагонали по убыванию:
- Отрицательные элементы выше побочной диагонали копируются в массив
temp
и сортируются по убыванию. - Отсортированные элементы из
temp
заменяют соответствующие элементы в матрицеa
.
- Отрицательные элементы выше побочной диагонали копируются в массив
- Вывод итоговой матрицы:
- Отсортированная матрица выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д