logo search

Циклический сдвиг

При Циклическом Сдвиге Влево каждый элемент в массиве становится на место своего соседа слева. Первый же элемент, которому двигаться некуда, займет место в хвосте массива, то есть из массива.

0

-6

13

3

8

-5

-1

7

получится массив

-6

13

3

8

-5

-1

7

0

Для реализации этого алгоритма нужно в первую очередь спасти первый элемент массива, записав его во вспомогательную ячейку через r:=a[1], потом переставить элементы

For i:=1 to N-1 Do a[i]:=a[i+1]

ИЛИ

For i:=2 to N Do a[i-1]:=a[i]

и, наконец, спасенное значение записать на место последнего элемента a[N]:= r. Тогда текст процедуры:

Имя файла: Sdvig_Lt.pas

Procedure Sdvig_Lt (Var aa:Massive);

Var ii: byte; rr: real;

Begin

rr:=aa[1];

For ii:=1 to n-1 do a[ii]:=aa[ii+1];

aa[n]:=rr;

End;

Если нужно несколько раз циклически сдвинуть массив, то эту процедуру ставят в цикл. Так, после выполнения оператора

For i:=1 to 3 do Sdvig_Lt (a);

из исходного массива будет получен массив

3

8

-5

-1

7

0

-6

13

При Циклическом Сдвиге Вправо массив

7

0

-6

13

3

8

-5

-1

получается из исходного чуть иным путем. Убедитесь самостоятельно, что алгоритм

r:=a[N];

For i:=2 to N do a[i]:=a[i-1];

a[N]:=r;

Не приводит к цели, а текст процедур должен иметь вид:

Имя файла: Sdvig_Rt.pas

Procedure Sdvig_Rt (Var aa:Massive);

Var ii: byte; rr: real;

Begin

rr:=aa[n];

For ii:=n downto 2 do a[ii]:=aa[ii-1];

aa[1]:=rr;

End;