Алгоритмы перевода
Вашему вниманию предлагаются алгоритмы перевода из одной систем счисления в другую (с основанием < 37)
Вы можете познакомиться с текстами программ на языке программирования Pascal и C++, а также осуществить перевод чисел с использованием программ, запустив их.
-
FUNCTION POT(AP,BP:INTEGER):LONGINT;
-
VAR RESU:LONGINT; X:INTEGER;
-
BEGIN
-
IF BP=0
-
THEN POT:=1
-
ELSE BEGIN
-
RESU:=AP;
-
FOR X:=2 TO BP DO
-
RESU:=RESU*AP;
-
POT:=RESU;
-
END;
-
END;
-
-
FUNCTION DEC2BASE(BASE:INTEGER; DE:LONGINT):STRING;{Перевод десятичного числа в число с основанием base}
-
-
CONST
-
NUMSTR:STRING='0123456789ABCDEFGHAIJKLMNOPQRSTUVWXYZ';
-
-
VAR
-
NUM:STRING; I,J:INTEGER;
-
-
BEGIN
-
IF (DE=0) OR (BASE <2) OR (BASE >36)
-
THEN NUM:='0'
-
ELSE BEGIN
-
NUM:='';
-
I:=0;
-
WHILE POT(BASE,I+1) <=DE DO INC(I);
-
FOR J := 0 TO I DO
-
BEGIN
-
NUM:=NUM+NUMSTR[(DE DIV POT(BASE,I-J))+1];
-
DE:=DE MOD POT(BASE,I-J);
-
END;
-
END;
-
DEC2BASE:=NUM;
-
END;
-
-
FUNCTION BASE2DEC(BASE: INTEGER; NUM: STRING): LONGINT; {Перевод числа с основанием base в десятичное число}
-
-
FUNCTION Digt(Ch: CHAR): BYTE;
-
-
CONST
-
NUMSTR:STRING='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
-
-
VAR
-
I,N:BYTE;
-
-
BEGIN
-
N:=0;
-
FOR I:=1 TO Length(NUMSTR) DO
-
IF Ch = NUMSTR[i]
-
THEN N := I - 1;
-
Digt := N;
-
END;
-
-
CONST
-
NUMSet:SET OF CHAR = ['0'..'9', 'A'..'Z'];
-
-
VAR
-
J:INTEGER; DE:LONGINT;
-
-
BEGIN
-
DE:=0;
-
FOR J:=1 TO Length(NUM) DO
-
BEGIN
-
DE := DE + Digt(UpCase(NUM[J])) * POT(BASE, Length(NUM) - J);
-
END;
-
BASE2DEC:=DE;
-
END;
-
-
-
-
var
-
-
s:string;
-
n,p:integer;
-
-
BEGIN
-
write('Chislo: ');
-
readln(s);
-
write('n: ');
-
readln(n);
-
write('p: ');
-
readln(p);
-
writeln(DEC2BASE(p, BASE2DEC(n,s)));
-
END.
-
#include <iostream.h>
-
#include <cstring>
-
#define DIG "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ"
-
using namespace std;
-
-
int Atoi(char *s, int p){ /* Функция для перевода из СС с основанием p в десятичную СС*/
-
int i, a, digit[256] = {0};
-
for(i = 0; DIG[i]; i++)
-
digit[DIG[i]] = i;
-
for(i = a = 0; s[i]; i++)
-
a = a * p + digit[s[i]];
-
return a;
-
}
-
-
void Itoa(int a, int p, char *s) { /* Функция для перевода из десятичной СС в СС с основанием p*/
-
static int i = 0, n;
-
if (a) {
-
++i;
-
Itoa(a / p, p, s);
-
s[n - i--] = DIG[a % p];
-
}
-
else
-
s[n = i] = '\0';
-
}
-
-
int main(){
-
char s[1024];
-
int n, p;
-
cout << "Chislo: ";
-
cin >> s;
-
cout << "n: ";
-
cin >> n;
-
cout << "p: ";
-
cin >> p;
-
Itoa(Atoi(s, n), p, s);
-
cout << s << endl;
-
system("pause");
-
return 0;
-
}
-
Программа для перевода чисел из одной СС в другую