Changement de base.
L'ordinateur calculant en base 10, la première tâche est de ramener N
dans la base 10. Pour ce faire, nous allons exploiter le fait que nous
travaillons avec une numération de position, à savoir qu'en base 10
chaîne: Chiffres, N entier: Base, NBaseFonction Verifie(St,Base) Vérifie si le nombre est valable paramètre: St: chaîne Base : entier à valeur: booléen
booléen: 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 Résultat (Verif)
Fonction Majuscules(St) Met le nombre en majuscules (intéressant pour les bases supérieures à 10) paramètre: St: chaîne à valeur: chaîne
entier: i
pour i de 1 à |St| faire si (Sti > "a") et (Sti < "z") alors Sti <-- UpCase(Sti)UpCase est une fonction Pascal fsi fpour Résultat (St)
Fonction Base10(St, Base) Transforme le nombre en base 10 paramètre: St: chaîne Base: entier à valeur: entier
entier: i, B10
B10 <-- 0 pour i de 1 à |St| faire B10 <-- B10 * Base + Pos(Sti,Chiffres) - 1 fpour Résultat(B10)
Fonction NewBase(N, Base) Transforme le nombre de base 10 en NewBase paramètre: N, Base: entier à valeur: chaîne
entier i chaîne: B
B <-- "" tant que NOT (N = 0) faire i <-- N mod Base B <-- Chiffresi+1 + B N <-- N \ Base ftant Résultat(B)
Chiffres <-- "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" écrire "Introduisez le nombre (0 pour arrêter):" lire N Le nombre est lu sous forme de chaîne (pour les bases > 10, on utilise les chiffres A, B, ...) tant que NOT (N="0") faire N <-- Majuscules(N) écrire "Dans quelle base est-il exprimé: " lire Base si NOT Verifie(N,Base) alors écrire "Le nombre n'est pas correct!" sinon écrire "Dans quelle base faut-il l'exprimer: " lire NBase écrire N," en base ",Base, " = ", NewBase(Base10(N,Base),NBase), " en base ",NBase fsi écrire "Introduisez le nombre (0 pour arrêter): " lire N ftant
PROGRAM Chgt_Base; VAR Chiffres, N : STRING; Base, NBase : BYTE; 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 arrêter):'); 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 arrêter):'); READLN(N); END; END.