1111 F
Другие системы счисления

Итак, мы познакомились с тремя позиционными системами счислений: десятичной, двоичной и шестнадцатеричной. Существуют ли другие системы? Конечно! Во всех позиционных системах вес цифры определяется её положением в числе, сравните.

2048 = 2 • 103 + 0 • 102 + 4 • 101 + 8 • 100 - десятичная;

12 = 11002 = 1 • 23 + 1 • 22 + 0 • 21 + 0 • 10 - двоичная;

4000 = $FA0 = F • 162 + A • 161 + 0 • 160 - шестнадцатеричная.

Число, на котором построена система, называют её основанием. Можно выдумать столько систем счисления, сколько существует чисел, то есть, бесконечно много. Пока нам достаточно тех, что придуманы. А если с других планет прилетят существа с семью пальцами на руках? Для них, вероятно, «родной» будет семеричная система, и мы должны быть готовы к этому!

Так мы подошли к задаче по настоящему серьезной: изобразить число в некоторой системе счисления (основания систем ограничим числами от 2 до 16).

Изображение числа в заданной системе счисления

Преобразуя числа в десятичную систему, мы «отгрызали» цифры, начиная с младших разрядов, операциями деления и получения остатка. Точно так же преобразуют числа и в другие системы, только откалывают куски иного размера. Поскольку в двоичной системе есть только две цифры, то для неё младшая цифра отсекается операцией MOD 2, а старшая часть – операцией DIV 2. Для шестнадцатеричной системы – соответственно операциями MOD 16 и DIV 16. Отсюда следует правило: для преобразования числа в N–ричную систему счисления младшую цифру отделяют операцией MOD N, а старшую часть числа – операцией DIV N.

В программе «P_47_1» функция ConvertFromNumber – «преобразовать из числа» – делает именно то, о чем сказано выше. Обратите внимание на строковую константу.

const CDigits : string = '0123456789ABCDEF';

Она служит для изящного преобразования чисел 0–15 в шестнадцатеричные цифры «0»–«F». Константы, для которых явно указан тип, называют типизированными, – это пример такой константы.

{ P_47_1 – Преобразование в произвольную систему счисления }

{ Функция преобразования десятичного числа в другие системы счисления }

function ConvertFromNumber(aBase, aNumber : integer): string;

const CDigits : string = '0123456789ABCDEF';

var n : integer; c : char; S : string;

begin

S:=''; { Накопитель цифр }

repeat

      n:= aNumber mod aBase;       { остаток от деления на основание }

      aNumber:= aNumber div aBase; { частное от деления на основание }

      c:= CDigits[1+n];       { выбираем цифру из строки }

      S:= c + S;             { вставляем цифру в результат }

until aNumber=0;

ConvertFromNumber:= S; { готово! }

end;

var B, N : integer; { B – основание системы, N – число }

begin {=== Главная программа ===}

Вы читаете Песни о Паскале
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату