Система счисления - это определенный способ записи чисел и соответствующие ему правила действия над числами. Системы счисления бывают позиционными и непозиционными.
В позиционной системе счисления величина, которую обозначает цифра в записи числа, зависит от позиции цифры в этом числе. Совокупность различных цифр, используемых в позиционной системе счисления для записи чисел, называется алфавитом системы счисления. Для представления цифр больше 9 используют латинские буквы (А=10, В=11…). Основание системы счисления - это размер алфавита. Число в позиционной системе можно представить в виде суммы произведений составляющих его цифр на соответствующие степени основания системы.
Любая позиционная система вводится следующим образом. Выбирается основание р — целое число и алфавит из р цифр:
0, 1, 2, …, р-1.
Тогда любое число Х в этой системе представляется в виде суммы произведений:
Х = аn*рn + an-1*pn-1 + … + a0*p0
Здесь Х — это число в системе с основанием p, имеющее n+1 цифру в целой части — это цифры из алфавита системы.
При переводе чисел из десятичной системы в р-ичную надо разложить десятичное число на слагаемые, содержащие степени числа р. Перевод целого десятичного числа производится путем последовательного деления числа на основание р с выделением остатков от деления до тех пор, пока частное не станет меньше делителя. Выписывая остатки от деления справа налево, получаем р-ричную запись десятичного числа.
function DecToR (x: longint; R: word): string; var result: string; remainder: word; c: char; begin result := ''; while x <> 0 do begin remainder := x mod R; x := x div R; if remainder < 10 then c := chr (remainder + ord ('0')) else c := chr (remainder + ord ('A') - 10); result := c + result; end; DecToR := result end;
function RtoDec (s: string; R: word): longint; var res, i, n, z: integer; begin res := 0; z := 1; for i := length (s) downto 1 do begin s[i] := UpCase (s[i])); if s[i] in ['0'..'9'] then n := ord (s[i]) - ord ('0'); if s[i] in ['A'..'Z'] then n := 10 + ord (s[i] - ord ('A'); inc (res, n*z); { m := m + n * z^R} z := z * R; end; RtoDec := res; end;