Как повернуть прямоугольную матрицу на 180 градусов вправо? - Free Pascal
Формулировка задачи:
как повернуть прямоугольную матрицу на 180 градусов вправо?
Решение задачи: «Как повернуть прямоугольную матрицу на 180 градусов вправо?»
textual
Листинг программы
uses crt;
var a:array[1..20,1..20] of integer;
m,n,i,j,x:integer;
begin
clrscr;
write('n=');
readln(n);
write('m=');
readln(m);
writeln('Исходная матрица:');
for i:=1 to n do
begin
for j:=1 to m do
begin
a[i,j]:=10*i+j;
write(a[i,j]:4);
end;
writeln;
end;
for i:=1 to n div 2 do
for j:=1 to m do
begin
x:=a[i,j];
a[i,j]:=a[n-i+1,m-j+1];
a[n-i+1,m-j+1]:=x;
end;
{если кол. строк нечетное, переставим элементы средней строки}
if odd(n) then
for i:=1 to m div 2 do
begin
x:=a[n div 2+1,i];
a[n div 2+1,i]:=a[n div 2+1,m-i+1];
a[n div 2+1,m-i+1]:=x;
end;
writeln('Поворот на 180 градусов:');
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end;
readln
end.
Объяснение кода листинга программы
- Объявлены переменные:
- a: массив 20x20 целых чисел,
- m, n: числа для размера матрицы,
- i, j, x: вспомогательные переменные для циклов.
- Задаются размеры матрицы (числа m и n) с помощью функций readln и clrscr из библиотеки CRT.
- Выводится исходная матрица. Для этого используется два вложенных цикла: внешний цикл для строк от 1 до n и внутренний цикл для столбцов от 1 до m. В каждой ячейке матрицы (a[i,j]) вычисляется значение (10*i+j) и выводится на экран с помощью функции write. После каждой строки матрицы выводится символ новой строки (\n) для перехода на следующую строку.
- Производится поворот матрицы на 180 градусов вправо. Для этого используется два вложенных цикла: внешний цикл для строк от 1 до n/2 и внутренний цикл для столбцов от 1 до m. Для каждой ячейки в середине матрицы (a[n/2,j]) значения меняются местами с соответствующими ячейками в правой части матрицы (a[n-i+1,m-j+1]). Затем значения в ячейке a[n/2,j] меняются местами с ячейкой a[n/2,m-j+1]. Если количество строк нечетное, то значения в ячейке a[n/2+1,i] меняются местами с ячейкой a[n/2+1,m-i+1].
- Выводится повернутая на 180 градусов матрица. Для этого используется два вложенных цикла: внешний цикл для строк от 1 до n и внутренний цикл для столбцов от 1 до m. В каждой ячейке матрицы (a[i,j]) выводится значение с помощью функции write. После каждой строки матрицы выводится символ новой строки (\n) для перехода на следующую строку.
- Программа ожидает ввода данных с помощью функции readln.