Циклически сдвинуть двоичные разряды числа на одну позицию вправо.
Вот код программы, я только кое-что исправил в нем.
Код
uses crt;
function pow2(A:byte):Integer;
var result: Integer;
i: Integer;
begin
result := 1;
for i:=1 to A do
result := result * 2;
pow2 := result;
end;
procedure Print_binary (d: word);
var
mask: word;
i: 1..16;
begin
mask:=$8000;
for i:=1 to 16 do begin
if d and mask=0 then
write (0)
else
write (1);
mask:=mask shr 1;
end;
writeln;
writeln;
end;
function cyclicShiftRight(number: word; cyclicBitsRight: byte):word;
var
mask :Integer;
x,y :word;
begin
cyclicBitsRight := cyclicBitsRight mod 16;
mask := pow2(16) - pow2(16 - cyclicBitsRight);
y := number and mask;
y := x shl (16 - cyclicBitsRight);
x := number shr cyclicBitsRight;
cyclicShiftRight := y or x;
end;
Var
a,c: word;
begin
clrscr;
a:=55555;
write ('a = ');
Print_binary (a);
c:= cyclicShiftRight(a, 1);
write ('a = ');
Print_binary (c);
readln;
end.
function pow2(A:byte):Integer;
var result: Integer;
i: Integer;
begin
result := 1;
for i:=1 to A do
result := result * 2;
pow2 := result;
end;
procedure Print_binary (d: word);
var
mask: word;
i: 1..16;
begin
mask:=$8000;
for i:=1 to 16 do begin
if d and mask=0 then
write (0)
else
write (1);
mask:=mask shr 1;
end;
writeln;
writeln;
end;
function cyclicShiftRight(number: word; cyclicBitsRight: byte):word;
var
mask :Integer;
x,y :word;
begin
cyclicBitsRight := cyclicBitsRight mod 16;
mask := pow2(16) - pow2(16 - cyclicBitsRight);
y := number and mask;
y := x shl (16 - cyclicBitsRight);
x := number shr cyclicBitsRight;
cyclicShiftRight := y or x;
end;
Var
a,c: word;
begin
clrscr;
a:=55555;
write ('a = ');
Print_binary (a);
c:= cyclicShiftRight(a, 1);
write ('a = ');
Print_binary (c);
readln;
end.
Вроде бы правильно решено.
Просят объяснить назначение процедуры и функций.