program Project1;
(*Рекурсивный перевод шестнадцатеричной записи в число.*)
function Hex2Num(const aSHex : String; const aWeight, aI : Integer) : Integer;
var
Num : Integer;
begin
Num := 0;
case aSHex[aI] of
'0' : Num := 0 * aWeight;
'1' : Num := 1 * aWeight;
'2' : Num := 2 * aWeight;
'3' : Num := 3 * aWeight;
'4' : Num := 4 * aWeight;
'5' : Num := 5 * aWeight;
'6' : Num := 6 * aWeight;
'8' : Num := 8 * aWeight;
'9' : Num := 9 * aWeight;
'A', 'a' : Num := 10 * aWeight;
'B', 'b' : Num := 11 * aWeight;
'C', 'c' : Num := 12 * aWeight;
'D', 'd' : Num := 13 * aWeight;
'E', 'e' : Num := 14 * aWeight;
'F', 'f' : Num := 15 * aWeight;
end;
if aI > 1 then begin
Num := Num + Hex2Num(aSHex, aWeight * 16, aI - 1);
end;
Hex2Num := Num;
end;
(*Рекурсивный перевод числа в десятичную запись.*)
function Num2Dec(const aNum : Integer) : String;
var
StrDec : String;
Num : Integer;
begin
case aNum mod 10 of
0 : StrDec := '0';
1 : StrDec := '1';
2 : StrDec := '2';
3 : StrDec := '3';
4 : StrDec := '4';
5 : StrDec := '5';
6 : StrDec := '6';
7 : StrDec := '7';
8 : StrDec := '8';
9 : StrDec := '9';
end;
Num := aNum div 10;
if Num > 0 then StrDec := Num2Dec(Num) + StrDec;
Num2Dec := StrDec;
end;
var
SHex, SDec, S : String;
Num : Integer;
begin
repeat
Writeln('Задайте целое неотрицательное число в шестнадцатеричной системе счисления:');
Readln(SHex);
(*Переводим шестнадцатеричную запись в число.*)
Num := Hex2Num(SHex, 1, Length(SHex));
(*Переводим число в десятичную запись.*)
SDec := Num2Dec(Num);
Writeln('Это же число в десятичной системе счисления:');
Writeln(SDec);
Writeln('Повторить - Enter. Выход - любой символ + Enter.');
Readln(S);
until S <> '';
end.
Следующий вариант
program Project1;
(*Рекурсивный перевод шестнадцатеричной записи в число.*)
function Hex2Num(const aSHex : String; const aWeight, aI : Integer) : Integer;
var
Num : Integer;
begin
Num := 0;
case aSHex[aI] of
'0' : Num := 0 * aWeight;
'1' : Num := 1 * aWeight;
'2' : Num := 2 * aWeight;
'3' : Num := 3 * aWeight;
'4' : Num := 4 * aWeight;
'5' : Num := 5 * aWeight;
'6' : Num := 6 * aWeight;
'8' : Num := 8 * aWeight;
'9' : Num := 9 * aWeight;
'A', 'a' : Num := 10 * aWeight;
'B', 'b' : Num := 11 * aWeight;
'C', 'c' : Num := 12 * aWeight;
'D', 'd' : Num := 13 * aWeight;
'E', 'e' : Num := 14 * aWeight;
'F', 'f' : Num := 15 * aWeight;
end;
if aI > 1 then begin
Num := Num + Hex2Num(aSHex, aWeight * 16, aI - 1);
end;
Hex2Num := Num;
end;
var
SHex, S : String;
Num : Integer;
begin
repeat
Writeln('Задайте целое неотрицательное число в шестнадцатеричной системе счисления:');
Readln(SHex);
(*Переводим восьмеричную запись в число.*)
Num := Hex2Num(SHex, 1, Length(SHex));
Writeln('Это же число в десятичной системе счисления:');
Writeln(Num);
Writeln('Повторить - Enter. Выход - любой символ + Enter.');
Readln(S);
until S <> '';
end.
Например, имеем шестнадцатеричную запись числа: «DA5». Эта запись обозначает следующее число:
D * 16^2 + A * 16^1 + 5 * 16^0
= D * 256 + A * 16 + 5 * 1
= 13 * 256 + 10 * 16 + 5
= 3328 + 160 + 5
= 3493
В представленном коде происходит преобразование:
‘D’ -> 13
‘A’ -> 10
‘5’ -> 5
А через aWeight учитывается вес разряда:
D * 256 + A * 16 + 5 * 1
Здесь для старшего разряда имеем вес: aWeight = 256, для второго разряда вес равен: aWeight = 16 и младший разряд имеет вес равный: aWeight = 1.