Les autres méthodes⚓︎
De la base 10 à la base b⚓︎
MĂ©thode de division par les puissances successives
Avec cette méthode, on commence par chercher la plus grande puissance de \(b\) qui est inférieur au nombre \(\text{nb}\) à convertir.
On fait ensuite les divisions successives par les puissances décroissantes jusqu'à arriver à \(b^0\). Le nombre en base \(b\) est obtenu en écrivant de gauche à droite les quotients obtenus.
Voici un exemple :
Donc \(185_{10} = 2321_{4}\).
Exercice 3
Écrire le code de la fonction plus_grande_puissance_inferieure
qui prend en paramètres un entier nb
et un entier non nul b
, et qui renvoie la plus grande puissance de b
inférieure ou égale à nb
.
>>> plus_grande_puissance_inferieure(30, 2)
16
>>> plus_grande_puissance_inferieure(32, 2)
32
>>> plus_grande_puissance_inferieure(34, 2)
32
>>> plus_grande_puissance_inferieure(0, 2)
1
>>> plus_grande_puissance_inferieure(1, 2)
1
>>> plus_grande_puissance_inferieure(120, 6)
36
>>> plus_grande_puissance_inferieure(255, 16)
16
Il vaut mieux utiliser des multiplications plutôt que l'opérateur de puissance (**
).
# Tests
(insensible Ă la casse)(Ctrl+I)
Rappel : trouver le symbole Ă partir d'un chiffre
Lorsque vous avez la valeur du chiffre et que vous voulez le symbole, il faut chercher à l'indice donné :
>>> alphabet[5]
'5'
>>> alphabet[10]
'A'
>>> alphabet[15]
'F'
Exercice 4
Écrire le code de la fonction conversion2
qui prend en paramètres un entier nb
et un entier non nul b
, et qui renvoie un texte correspondant à la représentation de nb
en base b
. On utilisera la méthode par divisions par des puissances décroissantes de b
.
Indices
Indice 1 : pour trouver la puissance
Il faut utiliser plus_grande_puissance_inferieure
.
Indice 2 : pour la condition de la boucle
Il faut être sûr que la prochaine puissance ne dépassera pas nb
.
Indice 3 : exemple de déroulement
nb |
puiss |
nb // puiss |
nb % puiss |
res |
---|---|---|---|---|
185 | \(4^3=64\) | 2 | 57 | "2" |
nb |
puiss |
nb // puiss |
nb % puiss |
res |
---|---|---|---|---|
185 | \(4^3=64\) | 2 | 57 | "2" |
57 | \(4^2=16\) | 3 | 9 | "23" |
nb |
puiss |
nb // puiss |
nb % puiss |
res |
---|---|---|---|---|
185 | \(4^3=64\) | 2 | 57 | "2" |
57 | \(4^2=16\) | 3 | 9 | "23" |
9 | \(4^1=4\) | 2 | 1 | "232" |
nb |
puiss |
nb // puiss |
nb % puiss |
res |
---|---|---|---|---|
185 | \(4^3=64\) | 2 | 57 | "2" |
57 | \(4^2=16\) | 3 | 9 | "23" |
9 | \(4^1=4\) | 2 | 1 | "232" |
1 | \(4^0=1\) | 1 | 0 | "2321" |
>>> conversion2(1, 2)
'1'
>>> conversion2(10, 2)
'1010'
>>> conversion2(255, 2)
'11111111'
>>> conversion2(255, 4)
'3333'
>>> conversion2(255, 6)
'1103'
>>> conversion2(255, 16)
'FF'
Il vaut mieux utiliser des multiplications plutôt que l'opérateur de puissance (**
).
# Tests
(insensible Ă la casse)(Ctrl+I)
# Tests
(insensible Ă la casse)(Ctrl+I)
De la base b à la base 10⚓︎
MĂ©thode par multiplication par des puissances
Avec cette méthode, on lit le nombre de droite à gauche en multipliant par les puissances successives de \(b\) :
Parcourir un texte de droite Ă gauche
On ne peut pas faire un parcours par valeur pour parcourir un texte de droite Ă gauche. Il faut donc faire un parcours par indice. On rappelle que l'indice du symbole le plus Ă droite est len(texte)-1
.
On peut le faire en utilisant plusieurs paramètres pour range
:
for indice in range(len(texte)-1, -1, -1):
symbole = texte[indice]
print(symbole)
Ou alors, on peut compter de 0 Ă len(texte)-1
:
for i in range(len(texte)):
symbole = texte[len(texte)-1-i]
print(symbole)
Rappel : trouver le chiffre Ă partir du symbole
Pour retrouver la valeur d'un chiffre d'un nombre en base \(b\), il est possible d'utiliser l'expression suivante :
>>> alphabet.index("5")
5
>>> alphabet.index("A")
10
>>> alphabet.index("F")
15
Exercice 5
Écrire le code de la fonction deconversion2
qui prend en paramètres un texte nb
et un entier non nul b
et qui renvoie la valeur en base 10 correspondant au nombre nb
exprimé en base b
. On suppose que le nombre nb
est bien une Ă©criture valide d'un nombre en base b
. On utilisera la méthode des multiplications par des puissances successives de b
.
Indices
Indice 1
La variable chiffre
prend successivement les différents symboles de nb
. Il faut donc transformer la valeur de chiffre
en nombre.
Indice 2
Il faut utiliser alphabet
.
Indice 3
L'expression alphabet.index(symbole)
renvoie l'indice de symbole
dans alphabet
.
>>> deconversion2("1001", 2)
9
>>> deconversion2("1011", 2)
11
>>> deconversion2("1010", 2)
10
>>> deconversion2("10101010", 2)
170
>>> deconversion2("7F", 16)
127
>>> deconversion2("55", 6)
35
# Tests
(insensible Ă la casse)(Ctrl+I)
# Tests
(insensible Ă la casse)(Ctrl+I)
# Tests
(insensible Ă la casse)(Ctrl+I)