Побитовые операции (PascalABC)
Добавлено: 18 июн 2014, 22:12
Задание: Вставить 0 в двоичное представление числа после третьей 1, считая с конца. Оно успешно выполняется. Проблема в том,что нельзя хранить в строке вводимые и выводимые числа. Нужно заменить использование строку на аналог из побитовых (shl, shr, and, or или xor) или алгебраических операций + и -. Еще оформить в виде подпрограмм.
Код: Выделить всё
uses crt;
var k, c, n, n2:longint;
i:integer;
s:string;
begin
write('Число: '); read(n);
{s:= '';
n2:=n;}
repeat
if (n2 and 1)=1 then s:='1'+s else s:= '0'+s;
n2:=n2 shr 1;
until n2=0;
writeln('Число 10-->2: ',s);
repeat
k:=k+(n and 1);
n2:=(n2 shl 1)+(n and 1);
c:=c+1;
n:=n shr 1;
until (k=3) or (n=0);
if k<3 then writeln('Число не имеет 3-х единиц.')
else begin n:=n shl 1;
while c>0 do begin
n:=(n shl 1)+(n2 and 1);
n2:=n2 shr 1;
c:=c-1;
end;
end;
writeln('Новое число после вставки нуля: ', n);
{s:= '';
n2:=n;}
repeat
if (n2 and 1)=1 then s:='1'+s else s:= '0'+s;
n2:=n2 shr 1;
until n2=0;
write('Новое число после вставки нуля 10-->2: ',s);
end.