Дана задача:
Элементы заданого вектора циклически сдвинуть на К позиций влево.
Я программу-то написал, но так и не понял, что значит: сдвинуть циклически.
Можете обьяснить?
function rol(x: word; const k: byte): word;
var
i: byte;
begin
for i := 1 to k do begin
x := (x shl 1) or
byte(((x and $8000) = $8000));
end;
rol := x
end;
const
n = 10;
k = 2;
a: array[1 .. n] of word =
(32000, 2, 3, 4, 5, 6, 7, 8, 9, 10);
var
i, T: integer;
begin
for i := 1 to n do begin
a[i] := rol(a[i], k);
write(a[i]:4);
end;
writeln;
end.
const
n = 10;
k = 2;
a: array[1 .. n] of word =
(32000, 2, 3, 4, 5, 6, 7, 8, 9, 10);
var
i, j: integer;
begin
for i := 1 to n do begin
for j := 1 to k do begin
a[i] := (a[i] shl 1) or
byte(((a[i] and $8000) = $8000));
end;
write(a[i]:4);
end;
writeln;
end.
for i := 1 to K do begin { <--- Проделываем K раз }
T := A[1]; { <--- Запоминаем первый элемент }
for j := 1 to size - 1 do A[j] := A[j+1]; { <--- Сдвигаем все элементы кроме первого на один влево }
A[size] := T; { <--- Устанавливаем бывший первый на последнюю позицию }
end;
for i := 1 to K do begin { <--- Проделываем K раз }
T := A[1]; { <--- Запоминаем первый элемент }
for j := 1 to size - 1 do A[j] := A[j+1]; { <--- Сдвигаем все элементы кроме первого на один влево }
A[size] := T; { <--- Устанавливаем бывший первый на последнюю позицию }
end;
T := a[size];
for j := size downto 2 do A[j] := A[j - 1];
a[1] := T;