Побитовые операции (PascalABC)

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
NoviceYola
Сообщения: 1
Зарегистрирован: 18 июн 2014, 22:00

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.
Ответить