Число представленное в шестнадцатеричной системе счисления перевести в десятичную систему счисления.
Алгоритм аналогичен переводу двоичного числа, за исключением того, что цифры обозначенные буквами от A до F следует заменить цифрами от 10 до 15.
var hexa: string; {шестнадцатеричное число} n: byte; {его длина} ch: char; {цифра очередного разряда как символ} digit: byte; {цифра очередного разряда} m: byte; {степень 16} decimal: integer; {десятичное число} i: byte; function pow16(m: byte):integer; var i: byte; begin pow16 := 1; for i := 1 to m do pow16 := pow16 * 16; end; begin write('Hexadecimal: '); readln(hexa); n := length(hexa); decimal := 0; m := n; for i:=1 to n do begin ch := hexa[i]; if ch in ['A'..'F'] then case ch of 'A': digit := 10; 'B': digit := 11; 'C': digit := 12; 'D': digit := 13; 'E': digit := 14; 'F': digit := 15 end else digit := ord(ch) - ord('0'); m := m - 1; decimal := decimal + digit * pow16(m); end; writeln('Decimal: ',decimal); readln end.
Существенная часть кода основной ветки программы может быть также оформлена в виде функции.
Комментарии
Помилка
Чомусь у рядку pow16 := pow16 * 16; помилка при множенні ...