Approche mathématique
Si les maths vous donnent des crises d'angoisse, vous pouvez directement passer à l'application pratique.
Pour cette méthode, nous allons utiliser la division euclidienne.
Citation : Division euclidienne de a par bSoit a ≥ 0 et b > 0. Alors
il existe un
unique quotient q ≥ 0 et un
unique reste r ≥ 0 avec
r < b tels que

.
Trois choses importantes cette fois : l'existence, l'unicité et le fait que r soit strictement inférieur à b.
Prenons un nombre n.
Nous savons qu'il s'écrit

avec

pour tout i et

.
Nous voulons déterminer les

.
En factorisant par b, on obtient

.
Posons

et

.
En remplaçant, on a

avec r < b !
Ainsi par unicité de la division euclidienne de n par b
- le reste de cette division est
;
- le quotient est
.
Ce quotient est un nombre comme un autre, nous pouvons le décomposer dans la base b.
Mieux encore, nous connaissons déjà son écriture en base b !
En effet, on peut écrire que

en posant

.
Autrement dit, si

alors

et

où q et r sont respectivement le quotient et le reste de la division euclidienne de n par b.
Application pratique
Méthode générale
Si vous ne savez pas (ou plus

) comment faire une division euclidienne, je vous invite à consulter
ce lien, vous en aurez besoin.
Prenons un nombre n s'écrivant

en base b.
On peut alors montrer qu'en divisant n par b
- le reste est

- le quotient est
, donc en divisant ce quotient par b
- le reste est

- le quotient est
, donc en divisant ce quotient par b
- le reste est

- le quotient est
, donc en divisant ce quotient par b
Le premier reste calculé correspond au dernier chiffre, et non au premier !
En divisant à chaque fois le quotient précédent par b, on obtient petit à petit les

, ce sont les restes des divisions successives. Il reste un point à préciser : quand doit-on s'arrêter ? En effet, on ne peut pas savoir à l'avance combien de fois nous allons devoir répéter le processus car le paramètre p est un nombre inconnu.
Secret (cliquez pour afficher)Petite anecdote pour les matheux.
Puisque

, p est la partie entière de

, mais cette formule est inutile ici.
En fait, comme la condition

est imposée, on aura toujours un quotient strictement positif sauf pour la toute dernière division, pour laquelle on obtiendra

et

. Il faut donc s'arrêter dès que l'on obtient un quotient nul !
En décimal
Pour bien voir que cette méthode fonctionne, commençons par chercher l'écriture décimale de quarante-deux.
Si on divise quarante-deux par dix
- le reste est
donc le dernier chiffre sera un 2
- le quotient est
, et en divisant ce quotient par dix
- le reste est
donc l'avant-dernier chiffre sera un 4
- le quotient est
, on s'arrête.
On obtient (et heureusement !) que quarante-deux s'écrit 42 en base 10 !
En binaire
Voilà qui est plus intéressant : nous allons pouvoir écrire un nombre sous forme binaire.
Si on divise quarante-deux par deux
- le reste est
donc le dernier chiffre sera un 0
- le quotient est
, et en divisant ce quotient par deux
- le reste est
donc l'avant-dernier chiffre sera un 1
- le quotient est
, et en divisant ce quotient par deux
- le reste est

- le quotient est
, et en divisant ce quotient par deux
- le reste est

- le quotient est
, et en divisant ce quotient par deux
- le reste est
donc l'avant-dernier chiffre sera un 1
- le quotient est
, et en divisant ce quotient par deux
- le reste est
donc l'avant-dernier chiffre sera un 1
- le quotient est
, on s'arrête.
En mettant les chiffres dans le bon ordre, on obtient bien que quarante-deux s'écrit 101010 en binaire.
Pour ne pas s'y perdre, une méthode élégante est d'adopter une structure en cascade comme le montre l'image suivante :
Cette méthode a l'avantage d'être simple, puisque la division par deux est facile à réaliser, mais elle nécessite de nombreux calculs car les plus petits nombres s'écrivent déjà avec beaucoup de chiffres en binaire. C'est pourquoi il peut être plus avantageux de commencer par écrire le nombre en hexadécimal ou en octal puis d'en déduire l'écriture binaire, ce qui se fait très simplement comme nous le verrons plus loin.
Application algorithmique
Vous pouvez sauter ce paragraphe si c'est uniquement l'aspect pratique qui vous intéresse.
Cette méthode est algorithmique, nous pouvons donc en faire un programme. Essayez d'écrire dans votre langage préféré une fonction repr_nombre(n, b) prenant en entrée un nombre entier et une base, et retournant une chaîne de caractères représentant le nombre en question dans la base voulue. Cette fonction utilisera la fonction chiffre(n) précédemment définie.
Le résultat attendu est le suivant :
Code : Python | >>> repr_nombre(42, 16)
'2A'
|
Secret (cliquez pour afficher)Exemple en Python :
Code : Python | def repr_nombre(n, b):
rep = ""
q = n
while q != 0:
r = q % b
rep = chiffre(r) + rep
q = q // b
if rep == "":
return chiffre(0)
else:
return rep
|
On calcule les quotients et les restes successifs en remplissant au fur et à mesure la chaîne représentative du nombre. Quelques commentaires :
- on utilise une boucle faisant évoluer deux paramètres :
- la chaîne contenant les chiffres qu'on a déjà calculés ;
- le quotient q ;
- on s'arrête quand q est nul ;
- le nombre zéro est un cas particulier à traiter séparément.