Поворот внешнего кольца матрицы - Pascal ABC
Формулировка задачи:
Есть прямоугольная матрица 4х3 и нужно повернуть ее внешнее кольцо на r элементов, то есть
была
вводим r:=4
должна стать
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
11 | 10 | 9 | 5 |
12 | 6 | 7 | 1 |
8 | 4 | 3 | 2 |
Решение задачи: «Поворот внешнего кольца матрицы»
textual
Листинг программы
const m=4; //матрица по условию 4х3 n=3; var a:array[1..m,1..n] of integer; r,i,j,d,x:integer; begin writeln('Исходная матрица'); for i:=1 to m do begin for j:=1 to n do begin a[i,j]:=(i-1)*n+j; write(a[i,j]:3); end; writeln; end; write('Введите количество шагов сдвига r='); readln(r); d:=2*(m+n)-4;//длина периметра матрицы r:=r mod d;//если r>d сократим for i:=1 to r do begin x:=a[2,1]; for j:=1 to d-1 do if j<m-1 then a[j+1,1]:=a[j+2,1]//1 столбец else if j in [m-1..m+n-3] then a[m,j-m+2]:=a[m,j-m+3]//последняя строка else if j in [m+n-2..2*m+n-4] then a[2*m+n-j-2,n]:=a[2*m+n-j-3,n] //последний столбец else if j in [2*m+n-3..d-1] then a[1,d-j+1]:=a[1,d-j];//первая строка a[1,1]:=x; end; writeln('Сдвиг периметра по часовой стрелке на ',r,' позиций:'); for i:=1 to m do begin for j:=1 to n do write(a[i,j]:4); writeln; end; end.
Объяснение кода листинга программы
- Объявлены матрица a размером m x n (4 x 3), а также переменные i, j, d, x типа integer.
- Выводится исходная матрица a.
- Пользователю предлагается ввести количество шагов сдвига r.
- Вычисляется длина периметра матрицы d.
- Если r больше d, то r сокращается до mod d.
- Производится сдвиг элементов матрицы a в соответствии с указанным количеством шагов r.
- Выводится полученная матрица a.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д