Conversion d'un entier naturel dans une base B

Computer ScienceAlgorithms and Base ConversionMedium

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

1
Step 1

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

2
Step 2

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

```

3
Step 3

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

```

4
Step 4

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

```

5
Step 5

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.

Download on the App Store Get it on Google Play

Free to download · First solutions are on us

100K+Questions solved daily
50K+Students learning
4.8 ★App Store rating

About This Question

Subject
Computer Science
Topic
Algorithms and Base Conversion
Difficulty
Medium
Question Type
Open Ended

Solve any question in seconds

Snap a photo and AI explains it step by step with voice and animation.

Download on the App Store Get it on Google Play
Solvi
The full solution is in the appFree to download · First solutions are on us
Get