Отсортировать положительные элементы ниже побочной диагонали матрицы по возрастанию - 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
.
- Отрицательные элементы выше побочной диагонали копируются в массив
- Вывод итоговой матрицы:
- Отсортированная матрица выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д