Подсчет количества единиц сдвигом и позицию первой из них - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Есть двоичная запись числа (где единицы идут только подряд). Хочу выяснить позицию первой единицы и их количество, идущих подряд.
Пример 11110000 Позиция первой 4 (начиная с нуля), общее количество также 4
//ch2chislo - двоичная запись числа
while ch2chislo<>0 do
    begin
    if (ch2chislo and 1)=1 then count:=count+1;
    ch2chislo:=ch2chislo shr 1;
    end;
В этом коде выдает намного большее значение. И как выделить отсюда позицию первой единицы.

Решение задачи: «Подсчет количества единиц сдвигом и позицию первой из них»

textual
Листинг программы
uses crt;
var
chislo:integer;
s,r:string;
i,k,pos:integer;
begin
clrscr;
writeln('Введите число в десятичной системе исчесления');
readln(chislo);
while chislo <> 0 do
begin
  str(chislo mod 2, r);
  s := r + s;
  chislo := chislo div 2;
end;
writeln('Число в двоичной системе исчесления: ',s);
k:=0;
pos:=-1;
for i:=1 to length(s)do
begin
  if s[i]='1' then k:=k+1;
  if pos=-1 then pos:=i;
end;  
 writeln('count= ',k);
 if pos>-1 then writeln('pos= ',pos);
end.

Объяснение кода листинга программы

  1. Ввод числа в десятичной системе счисления.
  2. Перевод числа в двоичную систему счисления.
  3. Подсчет количества единиц в числе.
  4. Поиск позиции первой единицы в числе.
  5. Вывод результата подсчета количества единиц.
  6. Вывод позиции первой единицы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы