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