В квадратной целочисленной матрице найти максимумы образованных диагоналями областей, упорядочить их - Pascal
Формулировка задачи:
Помогите пожалуйста. Сам в программировании нуб, но надо написать программу в Pascal.
Дана квадратная матрица А из целых чисел.
1. Она разбита по диагоналям на четыре области: север, юг, восток, запад. Считается, что элементы по диагонали не принадлежат этим областям. Найдите максимальный элемент каждой области.
2. Найденные элементы вывести в порядке убывания.
Для отладки программы исходную матрицу сформировать с помощью генератора случайных чисел.
Спасайте ребятки...
Решение задачи: «В квадратной целочисленной матрице найти максимумы образованных диагоналями областей, упорядочить их»
textual
Листинг программы
program SWEN_Matrix;
//работает для матриц с размером более чем 2: MxN, M > 2 и N > 2.
var
Ar : array [1..5, 1..5] of Integer;
MaxSWEN : array [1..4] of Integer;
tmpValue : Integer;
tmpIndex : Word;
i, g : Word;
begin
//формируем и выводим матрицу
randomize;
for i := 1 to 5 do
begin
for g := 1 to 5 do
begin
Ar[i][g] := floor(random()*100);
write (Ar[i][g]:3, ' ');
end;
writeln;
end;
writeln;
//инициализируем максимумы
MaxSWEN[1] := Ar[1][2]; //S
MaxSWEN[2] := Ar[2][1]; //W
MaxSWEN[3] := Ar[2][5]; //E
MaxSWEN[4] := Ar[5][2]; //N
for i := 1 to 5 do
for g := 1 to 5 do
begin
//первым делом исключаем из обработки элементы диагоналей
if (i = g) or ( i = 5 - g +1)
then continue;
//распознаём область
{* S *
W * E
* N *}
//S
if (i < g) and (i < 5 - g +1)
then if (Ar[i][g] > MaxSWEN[1])
then MaxSWEN[1] := Ar[i][g];
//W
if (i > g) and (i < 5 - g +1)
then if (Ar[i][g] > MaxSWEN[2])
then MaxSWEN[2] := Ar[i][g];
//E
if (i < g) and (i > 5 - g +1)
then if (Ar[i][g] > MaxSWEN[3])
then MaxSWEN[3] := Ar[i][g];
//N
if (i > g) and (i > 5 - g +1)
then if (Ar[i][g] > MaxSWEN[4])
then MaxSWEN[4] := Ar[i][g];
end;
//контрольная строка: показываем,что правильно нашли элементы в этих секторах
for i := 1 to 4 do
write (MaxSWEN[i], ' ');
writeln;
//сортировка
for i := 1 to 3 do
begin
tmpIndex := i;
for g := i + 1 to 4 do
if MaxSWEN[g] > MaxSWEN[tmpIndex]
then tmpIndex := g;
tmpValue := MaxSWEN[i];
MaxSWEN[i] := MaxSWEN[tmpIndex];
MaxSWEN[tmpIndex] := tmpValue;
end;
//вывод отсортированных максимумов
for i := 1 to 4 do
write (MaxSWEN[i], ' ');
readln;
end.
Объяснение кода листинга программы
- Ar - двумерный массив целых чисел размером 5x5, представляющий квадратную матрицу.
- Значение: создается матрица со случайными целыми числами в диапазоне от 0 до 99.
- MaxSWEN - массив из 4 целых чисел.
- Значение: инициализируется начальными значениями, соответствующими четырем областям матрицы S, W, E и N.
- tmpValue - целое число.
- Значение: используется для обмена значениями при сортировке.
- tmpIndex - целое число.
- Значение: используется для хранения индекса при сортировке.
- i - целое число.
- Значение: используется в циклах для перебора строк матрицы.
- g - целое число.
- Значение: используется в циклах для перебора столбцов матрицы.
- Создается квадратная матрица размером 5x5, заполняется случайными целыми числами и выводится.
- Максимумы для областей S, W, E и N инициализируются начальными значениями из матрицы.
- Происходит перебор всех элементов матрицы и определение максимумов для каждой из четырех областей.
- Выводятся максимумы для каждой из четырех областей в контрольной строке.
- Происходит сортировка максимумов в порядке убывания.
- Отсортированные максимумы выводятся.