Поворот внешнего кольца матрицы - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Есть прямоугольная матрица 4х3 и нужно повернуть ее внешнее кольцо на r элементов, то есть была
1 2 3 4
5 6 7 8
9 10 11 12
вводим r:=4 должна стать
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.

Объяснение кода листинга программы

  1. Объявлены матрица a размером m x n (4 x 3), а также переменные i, j, d, x типа integer.
  2. Выводится исходная матрица a.
  3. Пользователю предлагается ввести количество шагов сдвига r.
  4. Вычисляется длина периметра матрицы d.
  5. Если r больше d, то r сокращается до mod d.
  6. Производится сдвиг элементов матрицы a в соответствии с указанным количеством шагов r.
  7. Выводится полученная матрица a.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.267 из 5
Похожие ответы