Перевод чисел из десятичной в любую другую систему счисления
01.01.2007
{ Фунция представляет число Value в Base-ричной системе счисления, Base должно находиться в пределах [1..36] и представляется 10-ю цифрами [0..9] и 26-ю буквами английского алфавита ['A'..'Z'] } function Dec2X(const Value, Base: Cardinal): string; // Функция возвращает символ, соответствующий числу в N-ричной системе function GetChar(const N: Cardinal): Char; begin if N < 10 then // для систем счисления от 1 до 10 Result := Char(N + Ord('0')) else // для систем счисления выше 10, но не больше 36 ([0..9] + ['A'..'Z']) Result := Char(N - 10 + Ord('A')); end; var V, R: Cardinal; begin Result := ''; if Base <= 1 then begin // числа можно и в системе, состоящей из одного символа, представлять ;) if Base = 1 then begin // реализуем это SetLength(Result, Value); FillChar(Result[1], Value, Ord('0')); Exit; end else // а вот других систем счисления быть не может raise EConvertError.Create('Основание системы счисления должно быть больше 0'); end else // ограничиваем представление систем счисления 10-ю цифрами и 26-ю буквами // английского алфавита if Base > 10 + (Ord('Z') + 1) - Ord('A') then raise EConvertError.Create('Основание системы счисления должно лежать в пределах от 1 до 36'); // Выполняем преобразование в нужную систему виртуальным делением в столбик V := Value; repeat R := V mod Base; V := V div Base; Result := GetChar(R) + Result; until V < 2; // 2 - минимальная база, // то есть в любом случае когда-то "V div Base" будет равно 1 if V <> 0 then Result := IntToStr(V) + Result; end;©Drkb::04060