repeat
Write('Основание системы= '); Readln(B);
if B in [2..16] then begin
Write('Преобразуемое число= '); Readln(N);
Writeln(ConvertFromNumber(B, N));
end
until not (B in [2..16]);
end.
Эта простая программа подарит вам счастье наблюдать знакомые десятичные числа в экзотических системах счисления, например, в троичной или пятеричной.
Теперь займемся обратной задачей: пусть дана строка символов, изображающая некое число в известной системе счисления; требуется преобразовать эту строку в число и напечатать в десятичной системе.
Сборка числа из десятичных цифр нами освоена. Она выполнялась умножением накопленной суммы на десять с прибавлением очередной цифры, начиная со старшей. Надо ли объяснять, что сборка в других системах выполняется точно так же? Только умножать будем не на десять, а на основание системы счисления. В следующей ниже программе сборка выполняется функцией ConvertToNumber – «преобразовать в число».
{ P_47_2 – Преобразование из других систем счисления }
function ConvertToNumber(aBase: integer; aNumber: string): integer;
var i,n, Sum : integer;
c : char;
begin
Sum:=0; { Накопитель результата }
for i:=1 to Length(aNumber) do begin
c:=
if c in ['0'..'9']
then n:=
else n:=
Sum:= aBase*Sum + n; { Накопление суммы }
end;
ConvertToNumber:= Sum; { готово! }
end;
var B : integer; { Основание системы }
N : string; { Изображение числа в виде строки }
begin {=== Главная программа ===}
repeat
Write('Основание системы= '); Readln(B);
if B in [2..16] then begin
Write('Преобразуемое число= '); Readln(N);
Writeln(ConvertToNumber(B, N));
end
until not (B in [2..16]);
end.
Как обычно, здесь выделены операторы, стоящие внимания. Функция UpCase преобразует строчные латинские буквы в заглавные. Ведь шестнадцатеричные цифры от «A» до «F» могут быть введены пользователем в любом регистре, а последующие операторы преобразования цифры в число предполагают заглавные буквы – вот потому и понадобилась функция UpCase.