Циклический сдвиг элементов квадратной матрицы вправо (оформить в виде процедуры) - Pascal

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

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

Осуществить циклический сдвиг элементом квадратной матрицы размером M*N вправо на K элементом следующим образом: элементы первой строки сдвигаются в последний столбец сверху вниз,из него -в последнюю строку справа налево,из нее- в первый столбец снизу вверх, из него- в первую строку; для остальных элементов аналогично(оформить в виде процедуры)

Решение задачи: «Циклический сдвиг элементов квадратной матрицы вправо (оформить в виде процедуры)»

textual
Листинг программы
const nmax=20;
type matr=array[1..nmax,1..nmax] of integer;
procedure Sdvig(var a:matr;n,pr,k:integer);
var p,q,i,j,j1,s,x,y:integer;
begin
p:=n-2*(pr-1);
s:=4*p-4;
k:=k mod s;
y:=pr-1;
for i:=1 to k do
 begin
  x:=a[pr+1,pr];
  for j:=1 to s-1 do
  if j<p-1 then a[j+y+1,pr]:=a[j+y+2,pr]{первый столбец}
  else if j in [p-1..2*p-3] then a[p+y,j+y-p+2]:=a[p+y,j+y-p+3]{последняя строка}
  else if j in [2*p-2..3*p-4] then
  a[3*p-j+y-2,p+y]:=a[3*p-j+y-3,p+y]{последний столбец}
  else if j in [3*p-3..s-1] then a[pr,s-j+y+1]:=a[pr,s-j+y];{первая строка}
  a[pr,pr]:=x;
 end;
end;
var a:matr;
    n,m,i,j,r:integer;
begin
repeat
write('Размер матрицы от 2 до ',nmax,' n=');
readln(n);
until n in [2..nmax];
writeln('Матрица A:');
for i:=1 to n do
 begin
   for j:=1 to n do
    begin
     a[i,j]:=(i-1)*n+j;
     write(a[i,j]:4);
    end;
   writeln;
 end;
writeln;
write('На сколько позиций сдвинуть элнменты в слоях r=');
readln(r);
i:=1;
repeat
Sdvig(a,n,i,r);
i:=i+1;
until i>n div 2;
writeln('Сдвиг по часовой стрелке на ',r,' позиций:');
for i:=1 to n do
 begin
  for j:=1 to n do
  write(a[i,j]:4);
  writeln;
 end;
end.

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

  1. Переменная n представляет собой размер квадратной матрицы.
  2. Тип matr представляет собой массив целых чисел, где каждый элемент имеет размерность 1x1.
  3. Функция Sdvig выполняет циклический сдвиг элементов квадратной матрицы вправо.
  4. Переменные p, q, i, j, j1, s, x, y используются для организации цикла.
  5. Переменная pr представляет собой номер столбца, на который нужно сделать сдвиг.
  6. Переменная k представляет собой количество позиций, на которое нужно сделать сдвиг.
  7. В цикле for происходит проверка условия if j<p-1 для каждого элемента матрицы.
  8. Если условие истинно, то значение элемента в текущем столбце и следующем столбце устанавливается равным значению элемента в предыдущем столбце.
  9. Если условие ложно, то значение элемента в текущем столбце устанавливается равным значению элемента в следующем столбце.
  10. Если условие также ложно, то значение элемента в текущем столбце устанавливается равным значению элемента в последнем столбце.
  11. Значение переменной x используется для установки значения элемента в первой строке и последнем столбце.
  12. Значение переменной a представляет собой матрицу, в которую будут записаны результаты выполнения функции Sdvig.
  13. Цикл repeat используется для повторного запроса размера матрицы и количества позиций сдвига до тех пор, пока они находятся в допустимом диапазоне.
  14. В цикле repeat выполняется вывод размера матрицы и запрос количества позиций сдвига.
  15. Функция Sdvig вызывается для выполнения циклического сдвига элементов матрицы.
  16. Переменная i используется для увеличения значения счетчика до двух третей от размера матрицы.
  17. Выводится результат выполнения функции Sdvig.
  18. Выполняется вывод результата выполнения функции Sdvig.
  19. Завершается программа.

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


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

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

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