Циклический сдвиг элементов квадратной матрицы вправо (оформить в виде процедуры) - 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.
Объяснение кода листинга программы
- Переменная
n
представляет собой размер квадратной матрицы. - Тип
matr
представляет собой массив целых чисел, где каждый элемент имеет размерность 1x1. - Функция
Sdvig
выполняет циклический сдвиг элементов квадратной матрицы вправо. - Переменные
p
,q
,i
,j
,j1
,s
,x
,y
используются для организации цикла. - Переменная
pr
представляет собой номер столбца, на который нужно сделать сдвиг. - Переменная
k
представляет собой количество позиций, на которое нужно сделать сдвиг. - В цикле
for
происходит проверка условияif j<p-1
для каждого элемента матрицы. - Если условие истинно, то значение элемента в текущем столбце и следующем столбце устанавливается равным значению элемента в предыдущем столбце.
- Если условие ложно, то значение элемента в текущем столбце устанавливается равным значению элемента в следующем столбце.
- Если условие также ложно, то значение элемента в текущем столбце устанавливается равным значению элемента в последнем столбце.
- Значение переменной
x
используется для установки значения элемента в первой строке и последнем столбце. - Значение переменной
a
представляет собой матрицу, в которую будут записаны результаты выполнения функцииSdvig
. - Цикл
repeat
используется для повторного запроса размера матрицы и количества позиций сдвига до тех пор, пока они находятся в допустимом диапазоне. - В цикле
repeat
выполняется вывод размера матрицы и запрос количества позиций сдвига. - Функция
Sdvig
вызывается для выполнения циклического сдвига элементов матрицы. - Переменная
i
используется для увеличения значения счетчика до двух третей от размера матрицы. - Выводится результат выполнения функции
Sdvig
. - Выполняется вывод результата выполнения функции
Sdvig
. - Завершается программа.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д