Как преобразовать числа из одной системы в другую
Двоичные числа важны, потому что компьютер работает c двоичными числами - номера состоят из двух цифр 1 и 0. Шестнадцатеричные числа удобны, потому что они позволяют легко обрабатывать двоичные числа.
Delphi предоставляет множество полезных функций для преобразования целых чисел (в десятичной системе) строковые значения (строка это способ представления шестнадцатеричных и двоичных чисел), и наоборот.
Давайте посмотрим, какие функции можно использовать для преобразования чисел из одной системы в другую, каких функций не хватает и как легко реализовать их в Object Pascal. IntToHex, ObjectPascal.HexToInt.
В модуле SysUtils есть функция IntToHex, которая возвращает шестнадцатиричное представление числа.
function IntToHex (Value: Integer; Digits: Integer): String;
Хорошо, у нас есть возможность преобразовать целое число в шестнадцатеричное, а где функция HexToInt? Функция HexToInt не существует в Delphi?.
Тем не менее, Delphi позволяет использовать шестнадцатиричные выражения (используя префикс $). Вот простая функция HexToInt:
function HexToInt(HexNum: string): LongInt; begin Result:=StrToInt('$' + HexNum) ; end;
Функции IntToBin, BinToInt
Если Вы не знакомы с двоичными числами, то можете почитать Введение в двоичную арифметику.
Таким образом, как организовать функции IntToBin и BinToInt в Delphi. Вот один из примеров:
function IntToBin ( Value: LongInt; Digits: integer ): string; begin result := StringOfChar ( '0', Digits ) ; while Value > 0 do begin if ( Value and 1 ) = 1 then result [ Digits ] := '1'; dec ( Digits ) ; Value := Value shr 1; end; end; function BinToInt(Value: String): LongInt; var i: Integer; begin Result:=0; // Удаляем ведущие нули while Copy(Value, 1, 1) = '0' do Value:=Copy(Value, 2, Length(Value) - 1) ; // преобразовываем for i:= Length(Value) downto 1 do if Copy(Value, i, 1) = '1' then Result:=Result + (1 shl (Length(Value) - i)) ; end;
Римские
В большинстве случаев сегодня используется арабская система исчисления. Десять однозначных цифр от 0 до 9, составляют символы нашей системы исчисления. Примером другой системе счисления является система римских цифр, которые могут представлять все числа от 1 до 1000000, используя только семь символов: I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000. Пример: 1999 (арабская) является MCMXCIX (римская).
А вот функция для перевода целых арабских чисел в римские:
function IntToRoman(Value: LongInt): String; const Arabics: Array[1..13] of Integer = 1,4, 5,9,10,40,50,90,100,400,500,900,1000) ; Romans: Array[1..13] of String = ('I','IV', 'V','IX','X','XL','L','XC','C','CD','D','CM','M') ; var j: Integer; begin for j := 13 downto 1 do while (Value >= Arabics[j]) do begin Value := Value - Arabics[j]; Result := Result + Romans[j]; end; end;
Комментарии