Завдання № 5. Порахувати кількість одиничних бітів числа » Pascal - основи програмування

Основи програмування на мові Pascal

 

Спонсори

Завдання № 5. Порахувати кількість одиничних бітів числа

Завдання № 5. Порахувати кількість одиничних бітів числа
Формулювання. Дано натуральне число менше 16. Порахувати кількість його одиничних бітів. Наприклад, якщо дано число 9, запис якого в двійковій системі числення дорівнює 10012 (підрядкові цифра 2 праворуч від числа означає, що воно записано в двійковій системі числення), то кількість його одиничних бітів дорівнює 2.
Рішення. Нам необхідна змінна для введення з клавіатури. Позначимо її як n. Так як ми повинні накопичувати кількість знайдених бітів, то виникає потреба у ще одній пе-пасової. Позначимо її як count («count» в перекладі з англ. Означає «рахувати», «підрахунок» і т. Д.). Змінні візьмемо типу byte (вони можуть приймати значення від 0 до 255), і нехай в даному випадку такий обсяг надлишковий, але це не принципово важливо.
    Як же порахувати кількість бітів у введеному числі? Адже число ж вводиться в десятич-ної системі числення, і його потрібно переводити в двійкову?
Насправді все набагато простіше. Тут нам допоможе одне цікаве правило:
Залишок від ділення будь-якого десяткового числа x на число p дає нам розряд одиниць числа x (його крайній розряд праворуч) у системі числення з основою p.
    Тобто, ділячи деякий десяткове число, наприклад, на 10, в залишку ми отримуємо розряд одиниць цього числа в системі числення з основою 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 буде зберігатися кількість одиничних розрядів в двійковій запису вихідного числа. Залишилося лише вивести її на екран.

Код:


  1. program BinaryUnits;
  2. var
  3. n, count: byte;
  4. begin
  5. readln(n);
  6. count := 0;
  7. count := count + n mod 2;
  8. n := n div 2;
  9. count := count + n mod 2;
  10. n := n div 2;
  11. count := count + n mod 2;
  12. n := n div 2;
  13. count := count + n;
  14. writeln(count)
  15. end.

Zavdannya-5.rar [460 b] (cкачувань: 13)

скачать dle 10.4фильмы бесплатно Попередня сторінка » Завдання № 3. Вивести на екран квадрат ...