Conversion d'un entier naturel dans une base B
Published:
Exercice 4 (6,5 points)
On se propose de réaliser la conversion d'un entier naturel strictement positif $N$ dans une base $B$ donnée (avec $2 \le B \le 16$). Pour cela on effectue des divisions euclidiennes par $B$, les restes successifs seront rangés dans un tableau Restes à $Rmax$ éléments (avec $Rmax = 15$) puis on inverse les éléments du tableau Restes et on les concatène tout en convertissant les valeurs supérieures ou égales à 10 en leurs équivalents dans la base $B$.
Travail demandé :
1) Ecrire un algorithme d'une procédure SAISIE(P, Binf, Bsup) qui permet de saisir un entier naturel $P$ tel que $Binf \le P \le Bsup$.
2) Ecrire un algorithme d'une procédure RANGER(N, B, RESTES, NbReR) qui permet de :
- Ranger dans un tableau RESTES les restes successifs de la suite des divisions euclidiennes par $B$ jusqu'à obtenir un quotient égal à 0.
- Calculer le nombre des restes NbReR.
3) Ecrire un algorithme d'une procédure RENVERSER(RESTES, NbReR) qui renverse les NbReR éléments rangés dans le tableau RESTES.
4) Ecrire un algorithme d'une fonction CONVERT(C) qui permet de retourner le caractère qui correspond à l'entier $C$ (avec $0 \le C \le 15$).
Exemples: CONVERT(10) retourne "A", CONVERT(15) retourne "F".
5) Ecrire un algorithme d'une procédure CONCATENATION(RESTES, NbReR) qui, en utilisant la fonction CONVERT et la procédure RENVERSER, affiche l'équivalent du nombre $N$ dans la base $B$.
6) En faisant appel uniquement aux modules déjà définis, écrire un algorithme d'un programme principal intitulé CONVERSION qui permet de saisir $N$ ($100 \le N \le 20000$) et $B$ ($2 \le B \le 16$) et d'afficher le résultat.
This question includes visual content: L'image contient un exemple illustratif de division successive. Pour $N=4008$ et $B=16$: on voit $4008$ divisé par $16$ donnant un quotient de $250$ et un reste de $8$. Ensuite $250$ divisé par $16$ donne un quotient de $15$ et un reste de $10$. Enfin $15$ divisé par $16$ donne un quotient de $0$ et un reste de $15$. Un tableau 'RESTES' montre d'abord $[8, 10, 15]$, puis après inversion $[15, 10, 8]$. Le résultat final affiché est 'FA8'.
Animated Video Solution
The first half plays free, the full solution is in the app.
Step by Step Written Solution
Bonjour ! Aujourd'hui, nous allons résoudre cet exercice d'algorithmique sur la conversion d'un entier naturel N d'une base décimale vers une base B comprise entre deux et seize.
Exercice 4 : Conversion de Base
D'abord, on nous demande une procédure de saisie contrôlée pour un entier P entre deux bornes, B-inf et B-sup. On utilise une boucle de répétition.
1) Procédure SAISIE
```pascal
PROCEDURE SAISIE (VAR P: entier, Binf, Bsup: entier)
DEBUT
REPETER
Ecrire("Donner un entier : ")
Lire(P)
JUSQU'A (P >= Binf) ET (P <= Bsup)
FIN
```
Ensuite, créons la procédure RANGER. Son rôle est de stocker les restes des divisions successives par B dans un tableau et de compter combien il y en a.
2) Procédure RANGER
```pascal
PROCEDURE RANGER (N, B: entier, VAR RESTES: TAB, VAR NbrR: entier)
VAR q: entier
DEBUT
NbrR <- 0
q <- N
REPETER
RESTES[NbrR] <- q MOD B
q <- q DIV B
NbrR <- NbrR + 1
JUSQU'A (q = 0)
FIN
```
La troisième étape consiste à renverser les éléments du tableau, car les restes sont obtenus dans l'ordre inverse de l'écriture finale.
3) Procédure RENVERSER
```pascal
PROCEDURE RENVERSER (VAR RESTES: TAB, NbrR: entier)
VAR i, aux: entier
DEBUT
POUR i DE 0 A (NbrR DIV 2) - 1 FAIRE
aux <- RESTES[i]
RESTES[i] <- RESTES[NbrR - 1 - i]
RESTES[NbrR - 1 - i] <- aux
FIN POUR
FIN
```
Pour les bases supérieures à dix, nous devons convertir les valeurs comme dix, onze, ou quinze en lettres, de A jusqu'à F. Voici la fonction CONVERT.
4) Fonction CONVERT
```pascal
FONCTION CONVERT (C: entier): CARACTERE
DEBUT
SI (C < 10) ALORS
CONVERT <- CHR(C + 48) {Convertit le chiffre en caractère '0'-'9'}
SINON
CONVERT <- CHR(C + 55) {Convertit 10 en 'A', 11 en 'B', etc.}
FIN SI
FIN
```
The rest of this solution is on Solvi
4 more steps are locked. Watch the full animated, narrated solution for free.
Snap a photo, solve any question like this.
Watch the Rest for FreeFree to download · First solutions are on us