Одномерные массивы. Циклические сдвиги, сжатие

Слайд 2

Алгоритм циклического сдвига на k позиций

I способ
определить сколько раз необходимо произвести одноэлементный

Алгоритм циклического сдвига на k позиций I способ определить сколько раз необходимо
сдвиг
k := k mod n;
k раз применить одноэлементный сдвиг
Алгоритм одноэлементного сдвига.

Запомнить в дополнительной ячейке первый (или последний) элемент массива
Сдвинуть все элементы влево (вправо)
На последнее (первое) место записать тот, который запоминали.

Слайд 3

Сдвиг вправо и влево

Program test;
Uses crt;
Сonst n=10;
Var a:array[1..n] of integer;
i,j,t,k:integer;
Begin

Сдвиг вправо и влево Program test; Uses crt; Сonst n=10; Var a:array[1..n]
clrscr;
{ввод массива}
K:=k mod n;
For j:=1 to k do
Begin
t:=a[n];
for i:=n downto 2 do
a[i]:=a[i-1];
A[1]:=t;
End;
{Вывод массива}
End.

Program test;
Uses crt;
Сonst n=10;
Var a:array[1..n] of integer;
i,j,t,k:integer;
Begin
clrscr;
{ввод массива}
K:=k mod n;
For j:=1 to k do
Begin
t:=a[1];
for i:=1 to n-1 do
a[i]:=a[i+1];
A[n]:=t;
End;
{Вывод массива}
End.

Слайд 4

II способ
Скопировать первые k элементов массива во временный массив
Сдвинуть оставшиеся n-k

II способ Скопировать первые k элементов массива во временный массив Сдвинуть оставшиеся
элементов влево на k позиций
Скопировать данные из временного массива обратно в основной массив на последние k позиций

Слайд 5

III способ

отобразить элементы массива(1, k)
отобразить элементы массива (k+1, n)
отобразить элементы массива (1,

III способ отобразить элементы массива(1, k) отобразить элементы массива (k+1, n) отобразить элементы массива (1, n)
n)

Слайд 6

j-сколько раз произвести обмен, left - левая граница отображения, right - правая

j-сколько раз произвести обмен, left - левая граница отображения, right - правая
граница отображения,
Dlina - длина отображаемой части массива
j:=1; left:=1; right:=k; dlina:=right-left+1;
(***) while j<=dlina div 2 do begin
temp:=a[left];
a[left]:=a[right];
a[right]:=temp;
inc(left);dec(right);inc(j);
end;
j:=1; left:=k+1; right:=n; dlina:=right-left+1;
(***) {повторить цикл}
j:=1; left:=1; right:=n; dlina:=right-left+1;
(***) {повторить цикл}
Имя файла: Одномерные-массивы.-Циклические-сдвиги,-сжатие.pptx
Количество просмотров: 172
Количество скачиваний: 0