Pascal:системы исчисления — различия между версиями

Материал из synset
Перейти к: навигация, поиск
(Новая страница: «== Перевод числа из десятичной системы исчисления в систему исчисления с основанием m: == <pre…»)
 
 
(не показаны 3 промежуточные версии этого же участника)
Строка 1: Строка 1:
 +
== Системы исчисления с произвольным основанием. ==
 +
 +
На данной странице представлены элементарные алгоритмы работы с системами исчисления. Приводится описание и пример программного кода для перевода из десятичной системы исчисления и обратной задачи.
 +
 
== Перевод числа из десятичной системы исчисления в систему исчисления с основанием m: ==
 
== Перевод числа из десятичной системы исчисления в систему исчисления с основанием m: ==
 +
 +
=== Описание алгоритма ===
 +
Описание алгоритма представим в виде псевдокода:
 +
 +
Пока число<math>\neq 0</math>
 +
 +
{
 +
 +
s = s + остаток (число<math>\div</math>m)
 +
 +
число = число <math>\div</math> 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
 +
 +
=== Программный код ===
 +
Пример программного кода алгоритма, описанного выше
  
 
<pre class="brush:pascal; gutter: false;">
 
<pre class="brush:pascal; gutter: false;">
Строка 31: Строка 70:
 
== Перевод числа из системы исчисления с основанием m в десятичную систему: ==
 
== Перевод числа из системы исчисления с основанием m в десятичную систему: ==
  
 +
=== Описание алгоритма ===
 +
* Пронумеруем число представленное в системе исчисления с основанием m по цифрам справа налево начиная с нуля.
 +
* Полученные индексы являются степенями числа с основанием m.
 +
* Последним шагом находим сумму произведений очередной цифры на соответствующую степень числа m.
 +
 +
=== Пример ===
 +
 +
Переводим число 101010 из двоичной системы исчисления в десятичную:
  
 +
{|
 +
|Индексы (степени)
 +
|5 4 3 2 1 0
 +
|-
 +
|Данное число
 +
|1 0 1 0 1 0
 +
|-
 +
|Результат :
 +
|<math>1*2^5+0*2^4+1*2^3+0*2^2+1*2^1+0*2^0=32+8+2=42</math>
 +
|}
 +
 +
=== Программный код ===
 +
Пример программного кода алгоритма, описанного выше
 
<pre class="brush:pascal; gutter: false;">
 
<pre class="brush:pascal; gutter: false;">
 
program OppositeToConversion;
 
program OppositeToConversion;
  
uses
 
  SysUtils;
 
 
Function Power(x,n:integer):integer;  {функция для возведения в степень n числа x}
 
Function Power(x,n:integer):integer;  {функция для возведения в степень n числа x}
 
var
 
var
Строка 55: Строка 113:
 
   a:array[1..1000000] of byte;
 
   a:array[1..1000000] of byte;
 
begin
 
begin
   ReadLn(st);
+
   ReadLn(st);
 
   ReadLn(m);
 
   ReadLn(m);
 
   v:=length(st);
 
   v:=length(st);
   for i:=1 to v do
+
   for i:=1 to v do  
 
       a[v-i+1]:=StrToInt(st[v-i+1]);  
 
       a[v-i+1]:=StrToInt(st[v-i+1]);  
 
   sum:=0;
 
   sum:=0;
Строка 67: Строка 125:
 
end.
 
end.
 
</pre>
 
</pre>
 +
 +
== Заключение ==
 +
Чтобы перевести число из системы исчисления с основанием m в систему с основанием p, достаточно воспользоваться двумя алгоритмами одновременно. Следует учесть, что представленные программные коды позволяют работать с системами исчисления от 2 до 10.

Текущая версия на 20:50, 4 февраля 2011

Системы исчисления с произвольным основанием.

На данной странице представлены элементарные алгоритмы работы с системами исчисления. Приводится описание и пример программного кода для перевода из десятичной системы исчисления и обратной задачи.

Перевод числа из десятичной системы исчисления в систему исчисления с основанием 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
Результат :

Программный код

Пример программного кода алгоритма, описанного выше

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.