Изучение проблемы перевода из одной системы исчисления в другую и разработка программы для этой операции

Допустим нам нужно перевести число 24A3 °F 0 В десятеричную систему. Берем старший (4-ый) разряд и возводим 16 в степень 4−1=3, получаем 163=4096. Полученный результат умножаем на значение четвертого разряда, т. е. 4.

Получается 4096*4=16 384. Этот результат мы заносим в сумму. Переходим к следующему разряду: 162=256.256 нужно умножить на значение третьего разряда т. е. A. Как известно в шестнадцатеричной системе исчисления буквы от A до F символизируют числа от 10 до 15 (A=10, B=11, C=12, D=13, E=14, F=15). Умножив 256 на 10, получим 2560 и этот результат добавляем к сумме, в которой у нас пока было 16 384. В сумму у нас получилось 18 944. Переходим ко второму разряду: 3*161=48, добавив это в сумму, получим 18 992. И последний разряд: 15*160=15. Конечная сумма равна 219 007 0. Мы получили результат в десятеричной системе исчисления.

IV. МЕТОДОЛОГИЧЕСКИЙ ПОДХОД

Рассматривая перевод из десятеричной системы исчисления в двоичную и шестнадцатеричную, можно найти много общего. В обоих случаях мы ищем максимальную степень, затем в обоих случаях сравниваем остаток с числом возведенным в степень разряда. Единственная разница заключается в том, что при переводе в двоичную систему основанием степени служит двойка, а при переводе в шестнадцатеричную систему основанием служит число шестнадцать. Возникает вопрос: а нельзя ли объединить оба этих перевода в одну процедуру, в которую в качестве параметров передавать основание степени? При более подробном рассмотрении перевода в двоичную систему можно заметить, что, сравнивая остаток со степенью двойки мы отмечаем только как бы два состояния: да или нет, т. е. 1 или 0, а при переводе в шестнадцатеричную систему мы рассматриваем не просто степень числа шестнадцати, а произведение этой степени на величину будущего разряда.

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

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

В результате такого подхода к решению задачи алгоритм значительно упрощается, т.к. в нем нет ветвлений.

VII. ПОДРОБНЫЕ РАЗЪЯСНЕНИЯ ПО ПРОГРАММЕ

Программа начинается стандартной строкой: Program Perevod; Далее следует описательная часть программы. Она состоит из нескольких разделов:

— Uses: указывает какие внешние TPU файлы будет использовать программа (это специфика Turbo Pascal).

 — Const: описывает используемые в программе константы. S — массив констант строк символов состоящих из пятидесяти символов. Им присваиваются значения, которые будут использоваться для составления меню.

 — Var: описывает переменные.

Longint — целочисленный тип, значение которого может изменяться от -2 147 483 648 до 2 147 483 647 и занимает в памяти 32 бита.

Integer — целочисленный тип, может принимать значение от -32 768 до 32 767 и занимает объем памяти в 16 бит.

Char — символьный тип, может принимать значение любого символа.

Byte — целочисленный тип, может принимать значения от 0 до 255 и занимает объем памяти в 8 бит.

Set of '0'. 'F' - тип множество, элементы которого могут быть любые символы находящиеся в промежутке от '0' до 'F'.