Académique Documents
Professionnel Documents
Culture Documents
L'algorithme dcrit ci-dessous demande l'utilisateur un nombre N exprim dans la base Base et l'exprime dans la base
NewBase.
En clair, un nombre tel que 123, exprim en base 10 peut tre transform en son quivalent hexadcimal, binaire ou autre.
L'ordinateur calculant en base 10, la premire tche est de ramener N dans la base 10. Pour ce faire, nous allons exploiter le fait
que nous travaillons avec une numration de position, savoir qu'en base 10
Chaque chiffre est donc multipli par la base leve la puissance adquate. Dans notre algorithme, c'est la fonction Base10 qui
se chargera de la transformation de N en base 10.
Le passage la base NewBase se fait de manire inverse en procdant des divisions successives du nombre exprim en base
10.
Mais un exemple rendra les choses plus claires.
Prenons 756 exprim en base 9 et que nous dsirons crire en base 8.
(1) Vrifions d'abord que le nombre 756 est un nombre "valide" dans la base 9. Pour ce faire, regardons si chaque chiffre est
"acceptable" pour cette base. En base 9, il y a 9 chiffres: 0, 1, 2, 3, 4, 5, 6, 7 et 8. Dans l'algorithme dcrit ci-dessous, c'est la
fonction Verifie qui se charge de cette vrification.
(2) Exprimons 756 en base 10:
7569 = 7 * 92 + 5 * 91 + 6 * 90 = (7 * 9 + 5) * 9 + 6 = 61810
et le passage la base 10 se fera par des multiplications/additions successives plutt qu'avec des exponentiations moins rapides
et moins prcises.
(3) La transformation en base 8 se fera par des divisions successives:
61810 = 2 + 8 * (5 + 8 * (1 + 8 * 1)) = 1 * 83 + 1 * 82 + 5 * 81 + 2 * 80 = 11528
chane: Chiffres, N
entier: Base, NBase
boolen: Verif
entier: i, Cpt
Cpt <-- 0
pour i de 1 |St| faire
si Pos(Sti, Chiffres) > Base alors Cpt <-- Cpt+1 Cpt compte le nombre de chiffres non valables
fsi
fpour
si Cpt>0 alors Verif <-- faux
sinon Verif <-- vrai
fsi
Rsultat (Verif)
Fonction Majuscules(St) Met le nombre en majuscules (intressant pour les bases suprieures 10)
paramtre: St: chane
valeur: chane
entier: i
entier: i, B10
B10 <-- 0
pour i de 1 |St| faire
B10 <-- B10 * Base + Pos(Sti,Chiffres) - 1
fpour
Rsultat(B10)
entier i
chane: B
B <-- ""
tant que NOT (N = 0) faire
i <-- N mod Base
B <-- Chiffresi+1 + B
N <-- N \ Base
ftant
Rsultat(B)
PROGRAM Chgt_Base;
FUNCTION Verifie(St:STRING;Base:BYTE):BOOLEAN;
VAR i, Cpt : BYTE;
BEGIN
Cpt:=0;
FOR i:=1 TO LENGTH(St) DO
IF POS(St[i],Chiffres)>Base THEN INC(Cpt);
IF Cpt>0 THEN Verifie:=FALSE
ELSE Verifie:=TRUE
END;
FUNCTION Majuscules(St:STRING):STRING;
VAR i : BYTE;
BEGIN
FOR i:=1 TO LENGTH(St) DO
IF (St[i]>='a') AND (St[i]<='z') THEN St[i]:=UPCASE(St[i]);
Majuscules:=St
END;
FUNCTION Base10(St:STRING;Base:BYTE):LONGINT;
VAR i : BYTE;
B10 : LONGINT;
BEGIN
B10:=0;
FOR i:=1 TO LENGTH(St) DO
B10:=B10*Base+POS(St[i],Chiffres)-1;
Base10:=B10
END;
FUNCTION NewBase(N:LONGINT;Base:BYTE):STRING;
VAR i : BYTE;
B : STRING;
BEGIN
B:='';
WHILE NOT (N=0) DO
BEGIN
i:=N MOD Base;
B:=Chiffres[i+1]+B;
N:=N DIV Base
END;
NewBase:=B;
END;
BEGIN
Chiffres:='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
WRITE('Introduisez le nombre (0 pour arrter):');
READLN(N);
WHILE NOT (N='0') DO
BEGIN
N:=Majuscules(N);
WRITE('Dans quelle base est-il exprim ');
READLN(Base);
IF NOT Verifie(N,Base) THEN WRITELN('Le nombre n''est pas correct!')
ELSE BEGIN
WRITE('Dans quelle base faut-il l''exprimer: ');
READLN(NBase);
WRITELN(N,' en base ',Base, ' = ', NewBase(Base10(N,Base),NBase), ' en base ',NBase);
END;
WRITE('Introduisez le nombre (0 pour arrter):');
READLN(N);
END;
END.
Page prcdente.
Page d'accueil.