Завдання № 35. Вивести на екран x, записане в системі числення з основою n » Pascal - основи програмування

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

 

Спонсори

Завдання № 35. Вивести на екран x, записане в системі числення з основою n

Завдання № 35. Вивести на екран x, записане в системі числення з основою n
Формулювання. Дано натуральні числа x і n (n <= 10). Вивести на екран число x, запи-санне в системі числення з основою n.
Рішення. Згадаймо правило з завдання 5:
Залишок від ділення будь-якого десяткового числа x на число p дає нам розряд одиниць числа x (його крайній розряд праворуч) у системі числення з основою p.
Раніше ми приймали це правило без докази, однак зараз ми торкнемося його, так як воно досить короткий.
    Скористаємося формулою записи десяткового числа x в системі числення з основою p, що складається з r знаків:
x = ar-1 * pr-1 + ar-2 * pr-2 + ... + a2 * p2 + a1 * p1 + a0 * p0,
де pr-1, pr-2 ..., p2, p1, p0 - основа системи числення, зведене у відповідні міри, ar-1, ar-2 ..., a2, a1, a0 - цифри в записі цього числа в системі числення з основою p.
    Наприклад, число 378 у десятковій системі числення виглядає так: 378 = 3 * 102 + 7 * 101 + 8 * 100. Якщо ми поспіль випишемо цифри a2 (= 3), a1 (= 7), a0 (= 8), то вихідне число відновить-ся.
   Запишемо подання числа в 22 двійковій системі числення (переведемо його за допомогою калькулятора, воно дорівнює 101102) по цій же формулі: 22 = 1 * 24 + 0 * 23 + 1 * 22 + 1 * 21 + 0 * 20. Зрозуміло, що якщо ми обчислимо вираз в правій частині рівності, то отримаємо саме 22.
   Тепер покажемо те, що якщо ми візьмемо залишок від ділення числа 22 на 2, потім розділимо його на 2, відкинувши залишок, і будемо повторювати ці дії до обнулення числа, то в підсумку підлозі-чим всі його розряди в порядку справа наліво. Візьмемо його запис 1 * 24 + 0 * 23 + 1 * 22 + 1 * 21 + 0 * 20 і розділимо її на 2. З алгебри відомо, що якщо ми ділимо суму чисел на деяке число, то на нього діляться всі складові цієї суми . 1 * 24, 0 * 23, 1 * 22 і 1 * 21 діляться на 2, так як в них присутня множник 2. 0 * 20 = 0 * 1 = 0 не ділиться на 2, відповідно, це число буде залишком від ділення на 2, і при цьому за формулою воно є крайнім справа розрядом. Потім ми ділимо всю цю запис на 2 і відкидаємо залишок, отримуємо: 1 * 23 + 0 * 22 + 1 * 21 + 1 * 20. Очевидно, що при наступному взятті залишку ми отримаємо цифру з крайнього праворуч доданка. Повторюючи цей ланцюжок, ми поступово отримаємо всі цифри числа 22 в системі числення з осно-ристанням 2.
    Узагальнюючи вищесказане, приходимо до висновку, що для формування запису числа нам необхідно отримати всі залишки від ділення x на підставу n, при цьому ділячи x на n після каждо-го взяття залишку.
    Яким чином ми запишемо залишки справа наліво? Дуже просто: множимо черговий залишок на деякий множник z, який додає необхідну кількість нулів, щоб цифра виявилася в необхідній позиції, і додаємо до результату r. Спочатку z буде дорівнює 1, оскільки ми додаємо цифру до розряду одиниць, потім z в кожній ітерації буде множитися на 10.
    У підсумку ми додаємо до результату r перший залишок, помножений на 1, другий залишок, помножений на 10, третій залишок, помножений на 100 і так далі, поки не буде сформовано шукане число:

r: = 0;
z: = 1;
while x <> 0 do begin
  r: = r + z * (x mod n);
  x: = x div n;
  z: = z * 10
end;

Код:


  1. program ConvertNotation;
  2. var
  3. c, z, r: integer;
  4. x, z: word;
  5. begin
  6. readln(x, n);
  7. r := 0;
  8. z := 1;
  9. while x <> 0 do begin
  10.    r := r + z * (x mod n);
  11.    x := x div n;
  12.    z := z * 10
  13. end;
  14. writeln(r)
  15. end.

0036.-MinDivisor.rar [712 b] (cкачувань: 3)

скачать dle 10.4фильмы бесплатно Наступна сторінка » Завдання № 36. Знайти найменший нетрил... Попередня сторінка » Завдання № 34. Сформувати число з двох ...