Песни о Паскале - [103]

Шрифт
Интервал

Десятичная система

Десятичную систему знает всякий: здесь крайняя правая цифра числа означает единицы, а последующие – десятки, сотни и так далее. Например, число 2048 представляется так:

2048 = 2 • 1000 + 0 • 100 + 4 • 10 + 8 • 1

Или так:

2048 = 2 • 10>3 + 0 • 10>2 + 4 • 10>1 + 8 • 10>0

То есть, позиция цифры в числе равна показателю степени при десятке, если счет позиций вести справа налево, начиная с нуля.

Повторю нашу цель: мы хотим превратить нечто цельное – число – в цепочку символов. Как это сделать? Есть мысли? Я предлагаю «откалывать» от числа цифру за цифрой, превращая их в символы и складывая в строку. Из опыта известно, что легче всего «отгрызть» от числа младшую цифру, вычисляя остаток от деления на десять, вот так:


>      младшая_цифра := число MOD 10


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


>      старшая_часть := число DIV 10


Так прояснилась схема дробления числа, показанная на рис. 104.



Рис.104 – Выделение отдельных цифр десятичного числа

Число дробится, пока в старшей части не окажется ноль. Осталось лишь организовать цикл, условием выхода из которого будет равенство нулю старшей части. Эта несложная программа перед вами.


>var N : integer; S : string;

>begin       { Преобразование числа в строку десятичных цифр }

>Write('N= '); Readln(N);

>S:='';

>repeat

>S:= Char((N mod 10)+Ord('0')) + S; { выделение очередной цифры }

>N:= N div 10;       { отделение старшей части }

>until N=0;

>Writeln(S); Readln;

>end.


Теперь, когда мы смогли превратить число в строку, займемся обратным превращением – соберем число из символов строки. Откуда подступиться к этой сборке? Запишем разложение числа с помощью скобок следующим образом:

2048 = 2 • 1000 + 0 • 100 + 4 • 10 + 8 • 1 = (((0 •10+2) •10+0) •10+4) •10+8

Правила действий со скобками требуют начать вычисление с внутренних, самых глубоких скобок. Следовательно, сборку числа из отдельных цифр начнем со старших разрядов, последовательно умножая накопленную сумму на 10. Внутри самых глубоких скобок добавлено слагаемое 0•10. Не влияя на результат вычислений, оно придает общность алгоритму сборки, который показан на рис. 105.



Рис.105 – Сборка числа из строки десятичных цифр

Например, для числа 2048 сборка пойдет в таком порядке:


>      N = 0 – исходное значение

>      N = 0 • 10 + 2 = 2

>      N = 2 • 10 + 0 = 20

>      N = 20 • 10 + 4 = 204

>      N = 204 • 10 + 8 = 2048


А вот программа, работающая по этому алгоритму.


>var N : integer; i : integer; S : string;

>begin

>Write('S= '); Readln(S);

>N:=0;

>for i:=1 to Length(S) do N:= 10*N + Ord(S[i]) – Ord ('0');

>Writeln(N); Readln;

>end.


Разобравшись со сборкой-разборкой десятичных чисел, замахнемся теперь на процедуры, пригодные для любых систем счисления. Но прежде ознакомимся с устройством этих систем.

Двоичная система

«Отец» двоичной системы Лейбниц не помышлял о великом будущем своей придумки, и на долгие годы о ней забыли. Но изобретатели компьютеров вспомнили. Все компьютеры – от первых моделей до самых современных – строятся из простейших элементов памяти – триггеров. Триггер – это электронная схема с двумя устойчивыми состояниями. Подобие триггера – комнатный выключатель, что может (если исправен) находиться в двух устойчивых состояниях: «включен» и «отключен». То есть, выключатель «помнит» состояние, в которое его привели в последний раз, и является элементом памяти.

Итак, элементы памяти с двумя состояниями – триггеры – составляют основу компьютеров (и почему их не назвали «дваггерами»?). Одно из состояний инженеры обозначили числом 0, а другое – 1. Стало быть, триггер способен «помнить» одно из этих чисел. Маловато для серьезного счета, не так ли? Тогда и вспомнили о двоичной системе Лейбница. Инженеры соединили несколько триггеров в цепочку и назвали эту «гирлянду» регистром. Каждый триггер в регистре, подобно цифрам в десятичном числе, обладает своим весом. В зависимости от позиции в регистре, вес триггера может составлять 1, 2, 4, 8 и так далее, – это степени числа 2. Например, число 12 изображается в двоичной системе так (рис. 106).



Рис.106 – Изображение числа 12 в двоичной системе

Сравните эту кодировку с десятичной системой, – принцип тот же, только веса разрядов другие. Если в десятичной системе вес очередного разряда вдесятеро больше предыдущего, то в двоичной системе – вдвое. Числа, хранящиеся в триггерах (0 или 1) служат множителями этих весов. Таким образом, при достаточной длине регистра в двоичной системе можно изобразить сколь угодно большое число.

Договоримся о форме записи двоичных чисел, иначе путаницы не избежать. У программистов приняты две формы: к символам двоичного изображения добавляют либо суффикс «B» (от Binary – «двоичный»), либо маленькую двоечку. Например, число 12 в двоичной системе записывается так:

1100B или 1100b или 1100>2

А иначе эту запись можно понять как «тысяча сто» в десятичной системе.

Шестнадцатеричная система

Компьютеры никогда не жаловались на двоичную систему, она их вполне устраивает. Сетовать стали программисты, – уж очень громоздкой получалась запись сравнительно небольших чисел, например:


Рекомендуем почитать
Выбор наследницы

Вторая часть трилогии "Мир Артефакта". Хранительница Артефакта, сама выбирает за кого ей выходить замуж, после, чего они привыкают к своим мужам, а некоторые из них влюбляются в них.


Горькое молоко. Золотой брегет. Тюремный шлейф

Книга «Горькое молоко» состоит из двух частей. Первая часть — «Золотой брегет» — повествует о сложной судьбе футболиста Ивана Беды, крёстном сыне известного вора в законе, который на свадьбу подарил Ивану золотой брегет. Вторая часть романа «Тюремный шлейф» рассказывает о племяннике Ивана Беды Сергее, которому тоже придётся повторить серьёзные жизненные моменты своего дяди, связанные с лишением свободы.


Учиться бывает опасно

Решив учиться в магической Академии, я пошла против воли отца. Ему не хотелось, чтобы я выходила за пределы нашей территории. В его глазах моя судьба — сидеть дома в четырех стенах, со временем выйдя замуж за того, на кого он укажет, за того, кому он сможет доверить нашу семейную тайну, размер и важность которой очень велики. Но меня такое решение не устроило и я, забрав с собой верного друга, сбежала, впервые в жизни поведя себя таким образом. Что ждет меня на этом пути? Что за таинственные личности появляются на моем пути? И что за судьба уготовлена мне пророчеством?


Разбитый Адам

Бог умер на кресте и сгнил, согласно научной картине мира, оставив своих детей. Либеральная Цивилизация решает покончить с "колыбелью человечества" и запускает в Солнце шаттлы с ядерными боеголовками. Теперь над Землей довлеет Багровый глаз. И он растет каждый час. Сможет ли Цивилизация сделать новый эволюционный шаг в виртуальный мир и вырезать из своих мозгов Архетип? Или Рай и жизнь для удовольствия – лишь дегенеративная сказка? Выдержит ли Прогресс экспансию Евразии или он обречен быть утопленным в животной религиозности? Знакомьтесь! Дьявол, заточенный в теле инвалида-гомосексуалиста, хлыстовка, ставшая Великой блудницей, самозванец, занявший опустевший трон Бога, а также отважные психонавты и другие неординарные личности сойдутся в напряженной схватке, чтобы решить, сохранит ли человек Образ Божий или станет чем-то другим? Роман-антиутопия "Разбитый Адам" повествует о развитии и столкновении апокалиптических проектов Евразии и западной цивилизации в середине 27-го столетия.


Круг Камней: Кровь эльфов

Давняя вражда между эльфами и людьми вспыхнула с новой силой. Эльфы завоевывают все новые территории и мечтают уничтожить Империю людей. Армия чудовищ, запечатанная в древнем эльфийском городе, оказалась на свободе. Неведомым образом все это связано с магией Круга Камней, о которой люди ничего не знают. Дознаватель Кристиан Уорден, несостоявшийся боевой маг, мечтавший о спокойной жизни советника лорда-правителя, оказался в эпицентре войны. Теперь ему придется совершить невозможное, чтобы выяснить правду о таинственном Круге и остановить врагов.


Новая религия

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.