Поменять наибольший элемент среди стоящих на диагоналях с элементом, стоящим на пересечении диагоналей - Turbo Pascal
Формулировка задачи:
Дана действительная квадратная матрица A порядок N, где N - заданное натуральное нечетное число. Найти наибольший элемент среди стоящих на главной и побочной диагоналях и поменять его с элементом, стоящим на пересечении диагоналей.
Решение задачи: «Поменять наибольший элемент среди стоящих на диагоналях с элементом, стоящим на пересечении диагоналей»
textual
Листинг программы
var
a: Array[Byte, Byte] Of Real;
temp: Real;
i, j, n, iMax, jMax: Byte;
begin
repeat
Write('Input n (>0;odd): ');
ReadLn(n);
until ((n > 0) And Odd(n));
Randomize();
iMax := 0; jMax := 0;
for i := 0 to n - 1 do
begin
for j := 0 to n - 1 do
begin
a[i, j] := Random * 198 - 99;
if (((i = j) Or (n = i + j + 1)) And (a[i, j] > a[iMax, jMax]))
then
begin
iMax := i;
jMax := j;
end;
Write(a[i, j]:7:2);
end;
WriteLn;
end;
temp := a[iMax, jMax];
a[iMax, jMax] := a[n div 2, n div 2];
a[n div 2, n div 2] := temp;
WriteLn('----------------------------------------------');
for i := 0 to n - 1 do
begin
for j := 0 to n - 1 do
Write(a[i, j]:7:2);
WriteLn;
end;
end.
Объяснение кода листинга программы
- Создается переменная
a, которая представляет собой массив типаArray[Byte, Byte] Of Real. Это означает, что массив содержитByteэлементы, каждый из которых являетсяRealчислом. - Создаются две переменные
tempиiMax, которые будут использоваться для временного хранения значения максимального элемента и его индекса. - Создаются две переменные
jMax, которые будет использоваться для временного хранения индекса максимального элемента. - В цикле
repeatвыполняется следующая последовательность действий:- Пользователю предлагается ввести число
n(нечетное число больше 0). - Проверяется, что введенное число является нечетным и большим, чем 0.
- С помощью функции
Randomize()инициализируется генератор случайных чисел. - Инициализируются переменные
iMaxиjMaxзначением 0. - Запускается цикл
for, который выполняетсяnраз. - Внутри цикла
forзапускается вложенный циклfor, который выполняетсяn-1раз. - Внутри вложенного цикла
forвычисляется случайное числоa[i, j]и присваивается соответствующему элементу массиваa. - Если текущий элемент массива
a[i, j]больше текущего максимального элементаa[iMax, jMax], то обновляется значениеiMaxиjMax. - После окончания вложенного цикла
forвыводится значениеa[i, j]с помощью функцииWrite(). - Выводится символ новой строки с помощью функции
WriteLn().
- Пользователю предлагается ввести число
- После завершения внешнего цикла
forвычисляется значениеtempпутем копирования значенияa[n div 2, n div 2]в переменнуюtemp. - Значение
a[n div 2, n div 2]заменяется значениемtemp. - Выводится символ новой строки с помощью функции
WriteLn(). - Завершается основной цикл
repeat.