fon
Главная » Файлы » Программирование компьютерных систем » Программирование на языке Pascal

Задача № 5. Посчитать количество единичных битов числа

Категория:
Программирование на языке Pascal
Комментариев:
0
Загрузок:
0
Автор:
sesin
Задача № 5. Посчитать количество единичных битов числа

МЗадача № 5. Посчитать количество единичных битов числа

Полное решение задачи 

Нам необходима переменная для ввода с клавиатуры. Обозначим ее как n. Так как мы должны накапливать количество найденных битов, то возникает потребность в еще одной переменной. Обозначим ее как count («count» в переводе с англ. означает «считать», «подсчет» и т. д.). Переменные возьмем типа byte (они могут принимать значения от 0 до 255), и пусть в данном случае такой объем избыточен, но это не принципиально важно.

Как же сосчитать количество битов во введенном числе? Ведь число же вводится в десятичной системе счисления, и его нужно переводить в двоичную?

На самом деле все гораздо проще. Здесь нам поможет одно интересное правило:

Остаток от деления любого числа x в системе счисления с основанием p на само число p дает нам разряд единиц числа x (его крайний разряд справа).

То есть, в десятичной системе счисления мы получаем разряд единиц некоторого числа, взяв остаток от деления этого числа на 10. Возьмем, например, число 3468. Если остаток от деления на 10 равен 8, то есть разряду единиц этого числа.

Такие же правила господствуют и в арифметике в других системах счисления, и в том числе в двоичной системе. Предлагаю поэкспериментировать: запишите на бумаге десятичное число, затем, используя любой калькулятор с функцией перевода из одной системы счисления в другую, переведите это число в двоичную систему счисления и также запишите результат. Затем разделите исходное число на 2 и снова переведите в двоичную систему. Как оно изменилось в результате? Вполне очевидно, что у него пропал крайний разряд справа, или, как мы уже говорили ранее, разряд единиц.

Но как это использовать для решения задачи? Воспользуемся тем, что в двоичной записи числа нет цифр, кроме 0 и 1. Легко убедиться в том, что сложив все разряды двоичного числа, мы получаем как раз таки количество его единичных битов. Это значит, что вместо проверки значений разрядов двоичного представления числа мы можем прибавлять к счетчику сами эти разряды – если в разряде был 0, значение счетчика не изменится, а если 1, то повысится на единицу.

Теперь, резюмируя вышеприведенный итог, можно поэтапно сформировать сам алгоритм:

1) Вводим число n;

2)Обнуляем счетчик разрядов count. Это делается потому, что значения всех переменных при запуске программы считаются неопределенными, и хотя в большинстве компиляторов Pascal они обнуляются при запуске, все же считается признаком «хорошего тона» в программировании обнулить значение переменной, которая будет изменяться в процессе работы без предварительного присваивания ей какого-либо значения.
3)Прибавляем к count разряд единиц в двоичной записи числа n, то есть остаток от деления n на 2:
count := count + n mod 2;
Строго говоря, мы могли бы не прибавлять предыдущее значение переменной count к остатку от деления, так как оно все равно было нулевым. Но мы поступили так для того, чтобы сделать код более однородным, далее это будет видно. Учтя разряд единиц в двоичной записи n, мы должны отбросить его, чтобы исследовать число далее. Для этого разделим n на 2. На языке Pascal это будет выглядеть так:
n := n div 2;
4)      Теперь нам нужно еще два раза повторить п. 3 , после чего останется единственный двоичный разряд числа n, который можно просто прибавить к счетчику без каких-либо дополнений:
count := count + n;
5)      В результате в переменной count будет храниться количество единичных разрядов в двоичной записи исходного числа. Осталось лишь вывести ее на экран.

program BinaryUnits;
var
 n, count: byte;
begin
 readln(n);
 count := 0;
 count := count + n mod 2;
 n := n div 2;
count := count + n mod 2;
n := n div 2;
count := count + n mod 2;
n := n div 2;
count := count + n;
writeln(count)
end.
 

 

Добавил: sesin , скачали: 120

Сиды: 146
Пиры: 106
Общий размер: 0.3 Kb
Общие сведения: 07.08.2016,21:25,Просмотров:682,Категория-Программирование на языке Pascal
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Популярные игры
Скачать игру Земля мертвых
Скачать игру Земля мертвых Загрузок: 380 Просмотров: 3195 Добавил: sesin Дата: 17.08.2016
Скачать всё для юкоза бесплатно
Скачать игру TimeShift через торрент для пк
Скачать игру TimeShift через торрент для пк Загрузок: 411 Просмотров: 3115 Добавил: sesin Дата: 17.08.2016
Скачать всё для юкоза бесплатно
Gladiator 2016 через торрент
Gladiator 2016 через торрент Загрузок: 212 Просмотров: 2607 Добавил: sesin Дата: 02.06.2016
Скачать всё для юкоза бесплатно
Скачать Devil May Cry 3 через торрент
Скачать Devil May Cry 3 через торрент Загрузок: 268 Просмотров: 2478 Добавил: sesin Дата: 02.06.2016
Скачать всё для юкоза бесплатно
Скачать Batman: Arkham Knight (2015) скачать торрент
Скачать Batman: Arkham Knight (2015) скачать торрент Загрузок: 221 Просмотров: 2344 Добавил: sesin Дата: 02.06.2016
Скачать всё для юкоза бесплатно
Мини-чат

500
text
Друзья сайта

Пользователи

0

aarbuzov241

артём pley

Пользователи

0

gonater117

76 56

Пользователи

0

Пользователи

0

Пользователи

0

Для того что стать друзьями сайта необходимо авторизоваться  на сайте .

Вы получаете преимущества  .

1)Бесплатные отправки подарков пользователям .

2)Отправка личных смс пользователям .

3)Отключение рекламы на сайте .

Популярные фильмы

Три богатыря и Морской царь Загрузок: 158 Просмотров: 2317 Добавил: sesin Дата: 29.03.2017

Монстр-траки Загрузок: 155 Просмотров: 1217 Добавил: sesin Дата: 29.03.2017

Грязь 2014 скачать через торрент Загрузок: 169 Просмотров: 1709 Добавил: sesin Дата: 28.11.2016

2 спальни, 1 ванная (2014) смотреть онлайн Загрузок: 136 Просмотров: 1067 Добавил: sesin Дата: 28.11.2016

Скачать фильм Абатуар. Лабиринт страха (2016) смотреть онлайн Загрузок: 191 Просмотров: 1994 Добавил: sesin Дата: 28.11.2016
Вход на сайт
,