Найти тему
Pascal для "чайников"

Перевод числа из одной системы счисления в другую на Pascal

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

Например, двоичная система счисления представлена всего двумя знаками: 0 и 1. Соответственно, все десятичные числа представляются только с помощью цифр 0 и 1. Т.е. 0 - 0, 1 - 1, 2 - 10, 3 - 11 и т.д.

Десятичная система счисления представлена соответственно десятью знаками - 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9.

Шестнадцатеричная система счисления имеет дополнительные буквенные символы - A, B, C, D, E и F. Т.е. для обозначения десятичного 11 используется символ A, 12 - B и т.д.

Для перевода числа из десятичной системы счисления в любую другую необходимо число делить на основание (если переводите в двоичную систему, то делим на 2, если в восьмеричную - на 8 и т.д.) до тех пор, пока частное от деления не станет меньше основания.

-2

Для примера напишем программу перевода двоичного числа в одну из систем счисления: 8, 10 или 16. Для этого сначала переведем двоичное число в десятеричную систему счисления, а полученное число уже переведем в нужную систему счисления.

Для реализации данного алгоритма нам понадобится константа, которая содержит символы для перевода числа в шестнадцатеричную систему счисления:

const simvol : string[16] = '0123456789ABCDEF';

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

Объявим переменные:

var

cs2 : integer; // система счисления, в которую будем производить перевод (8,10 или 16)

chislo : string; // исходное число в двоичной системе счисления

Теперь напишем две подпрограммы (функции), которые будут переводить число из любой системы счисления в десятеричную и из десятеричной в любую другую

// перевод десятичного числа в любую СС

function From_10(n, r: longint): string;

var ss: String;

begin

ss := '';

repeat

ss := simvol[(n mod r) + 1] + ss;

n := n div r;

until n = 0;

From_10 := ss;

end;

-3

// перевод числа из любой СС в десятичное

function To_10(n: string; r: longint): longint;

var m, i: longint;

begin

m := 0;

while n[1] = '0' do delete(n, 1, 1); //убираем нули спереди

for i := 1 to length(n) do

m := m * r + pos(n[i], simvol) - 1;

To_10 := m;

end;

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

begin

write('Введите число в двоичной системе счисления: ');

read(chislo);

write('Выберите в какую СС перевести число: (8,10,16)-');

readln(cs2);

writeln(chislo, '(2) =', From_10(To_10(chislo, 2), cs2),'(',cs2:2,')');

end.

Для проверки работы программы возьмем готовую таблицу перевода чисел и сравним результаты:

-4

Возьмем исходным числом в двоичной системе число 10000 (строка 16 таблицы). Переводим по очереди в другие системы счисления, получаем результаты:

-5
-6
-7

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

-8
-9
-10