====== Системы счисления ======
//Система счисления// - это определенный способ записи чисел и соответствующие ему правила действия над числами.
Системы счисления бывают позиционными и непозиционными.
В позиционной системе счисления величина, которую обозначает цифра в записи числа, зависит от позиции цифры в этом числе. Совокупность различных цифр, используемых в позиционной системе счисления для записи чисел, называется алфавитом системы счисления. Для представления цифр больше 9 используют латинские буквы (А=10, В=11…). Основание системы счисления - это размер алфавита. Число в позиционной системе можно представить в виде суммы произведений составляющих его цифр на соответствующие степени основания системы.
Любая позиционная система вводится следующим образом. Выбирается основание //р// — целое число и алфавит из р цифр:\\ 0, 1, 2, ..., р-1.\\ Тогда любое число //Х// в этой системе представляется в виде суммы произведений:\\ //Х = аn*рn + an-1*pn-1 + … + a0*p0//\\ Здесь Х — это число в системе с основанием //p//, имеющее //n+1// цифру в целой части — это цифры из алфавита системы.
==== Перевод чисел из одной позиционной системы в другую ====
При переводе чисел из десятичной системы в р-ичную надо разложить десятичное число на слагаемые, содержащие степени числа //р//. Перевод целого десятичного числа производится путем последовательного деления числа на основание //р// с выделением остатков от деления до тех пор, пока частное не станет меньше делителя. Выписывая остатки от деления справа налево, получаем //р//-ричную запись десятичного числа.
=== Функция перевода числа из 10-чной системы в R-ричную: ===
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;
=== Функция перевода числа из R-ричной системы счисления в 10-чную: ===
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;