Pascal:системы исчисления
Материал из Synset
Содержание |
Системы исчисления с произвольным основанием.
На данной странице представлены элементарные алгоритмы работы с системами исчисления. Приводится описание и пример программного кода для перевода из десятичной системы исчисления и обратной задачи.
Перевод числа из десятичной системы исчисления в систему исчисления с основанием m:
Описание алгоритма
Описание алгоритма представим в виде псевдокода:
Пока число
{
s = s + остаток (число
m)
число = число
m
}
Результатом будет строка s записанная в обратном порядке
Пример
Переведем число 42 в двоичную систему исчисления
42 mod 2 = 0
21 mod 2 = 1
10 mod 2 = 0
5 mod 2 = 1
2 mod 2 = 0
1 mod 2 = 1
Результат 101010
Программный код
Пример программного кода алгоритма, описанного выше
program Сonversion;
uses
SysUtils;
const
nmax=1000000000;
var
i,v,x,m,j:integer;
a:array[1..nmax] of byte;
begin
i:=0;
ReadLn(x,m); {Вводим число x которое необходимо перевести в систему исчисления с основанием m}
v:=x;
While v>0 do
begin
inc(i);
a[i]:=v mod m;
v:=v div m
end;
Write(x,' in the calculus of reason ',m,' = ');
for j:=i downto 1 do
Write(a[j]);
ReadLn;
end.
Перевод числа из системы исчисления с основанием m в десятичную систему:
Описание алгоритма
- Пронумеруем число представленное в системе исчисления с основанием m по цифрам справа налево начиная с нуля.
- Полученные индексы являются степенями числа с основанием m.
- Последним шагом находим сумму произведений очередной цифры на соответствующую степень числа m.
Пример
Переводим число 101010 из двоичной системы исчисления в десятичную:
| Индексы (степени) | 5 4 3 2 1 0 |
| Данное число | 1 0 1 0 1 0 |
| Результат : | 1 * 25 + 0 * 24 + 1 * 23 + 0 * 22 + 1 * 21 + 0 * 20 = 32 + 8 + 2 = 42 |
Программный код
Пример программного кода алгоритма, описанного выше
program OppositeToConversion;
Function Power(x,n:integer):integer; {функция для возведения в степень n числа x}
var
p,i:integer;
begin
if n=0 then Power:=1
else begin
p:=x;
for i:=2 to n do
p:=p*x;
Power:=p;
end;
end;
var
st:string;
i,v,sum,m:integer;
a:array[1..1000000] of byte;
begin
ReadLn(st);
ReadLn(m);
v:=length(st);
for i:=1 to v do
a[v-i+1]:=StrToInt(st[v-i+1]);
sum:=0;
for i:=1 to v do
sum:=sum+Power(m,i-1)*a[v-i+1];
WriteLn(sum);
ReadLn;
end.
Заключение
Чтобы перевести число из системы исчисления с основанием m в систему с основанием p, достаточно воспользоваться двумя алгоритмами одновременно. Следует учесть, что представленные программные коды позволяют работать с системами исчисления от 2 до 10.
