Задача № 5. Посчитать количество единичных битов числа - Программирование на языке Pascal - Программирование компьютерных систем - Каталог файлов - Добро пожаловать
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 , скачали: 2

Сиды: 279
Пиры: 119
Общий размер: 0.3Kb
Общие сведения: 07.08.2016,21:25,Просмотров:39,Категория-Программирование на языке Pascal
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Популярные игры
Скачать игру Земля мертвых
Скачать игру Земля мертвых Загрузок: 30 Просмотров: 249 Добавил: sesin Дата: 17.08.2016
Скачать всё для юкоза бесплатно
Скачать игру TimeShift через торрент для пк
Скачать игру TimeShift через торрент для пк Загрузок: 28 Просмотров: 192 Добавил: sesin Дата: 17.08.2016
Скачать всё для юкоза бесплатно
Gladiator 2016 через торрент
Gladiator 2016 через торрент Загрузок: 13 Просмотров: 273 Добавил: sesin Дата: 02.06.2016
Скачать всё для юкоза бесплатно
Скачать Devil May Cry 3 через торрент
Скачать Devil May Cry 3 через торрент Загрузок: 25 Просмотров: 192 Добавил: sesin Дата: 02.06.2016
Скачать всё для юкоза бесплатно
Скачать Batman: Arkham Knight (2015) скачать торрент
Скачать Batman: Arkham Knight (2015) скачать торрент Загрузок: 10 Просмотров: 182 Добавил: sesin Дата: 02.06.2016
Скачать всё для юкоза бесплатно
Мини-чат

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

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

0

Савич1999

Олег Савич

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

0

lipin2103

stib lipin2103

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

0

VitaAseeva

Виктория Асеева

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

0

xmen

артем гоша

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

0

alaska

Денис Ли

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

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

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

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

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

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

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

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

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

Скачать фильм Похитители прошлого 1999 год Загрузок: 4 Просмотров: 46 Добавил: sesin Дата: 07.10.2016

Скачать Детсадовский полицейский 2 через торрент Загрузок: 3 Просмотров: 61 Добавил: sesin Дата: 03.09.2016
Вход на сайт
,