Préparatifs⚓︎
Consignes⚓︎
Règles pour ce TP
L'objectif est de programmer l'addition et le complément à 2 sur les nombres binaires. Pour cela, vous devrez respecter les contraintes suivantes :
- Les nombres binaires sont représentés par des chaînes de caractères, comme
"0111"
. - Vous pouvez utiliser les fonctions pour convertir en base 10 ou en binaire, mais uniqument pour faciliter les tests et l'affichage, pas pour faire l'addition.
- Vous ne pouvez utiliser l'opérateur
+
uniquement pour concaténer des chaînes de caractères. - Même si pour les tests, vous pouvez vous restreindre aux nombres représentés sur 4 bits, vos fonctions doivent marcher pour un nombre arbitraire de bits.
- On notera généralement
nb_bin
les nombres binaires etnb_entiers
les nombres entiers en base 10. - Dans la suite, on appellera entier les entiers exprimés en base 10.
Convertir un chiffre en texte et réciproquement
Lorsqu'il faut convertir un chiffre en un texte, ou un texte en chiffre, vous pouvez utiliser les fonctions suivantes :
>>> str(0) # chiffre -> texte
'0'
>>> str(1)
'1'
>>> int("1") # texte -> chiffre
1
>>> int("0")
0
Échauffement⚓︎
Conversion d'un nombre binaire en entier
Pour convertir un nombre binaire en base 10, on utilise la méthode des multiplications successives par 2, appelée méthode de Horner :
\(11001_{2} =\)
\(11001_{2} =\)
\(11001_{2} =\)
\(11001_{2} =\)
\(11001_{2} = 19_{10}\)
Exercice 1 : binaire vers entier
Écrire le code de la fonction bin_vers_entier
qui prend en paramètre un texte correspondant à un nombre binaire et renvoie le nombre en base 10 correspondant.
>>> bin_vers_entier("0")
0
>>> bin_vers_entier("1")
1
>>> bin_vers_entier("10")
2
>>> bin_vers_entier("1101")
13
# Tests
(insensible à la casse)(Ctrl+I)
Conversion d'un entier en binaire
Pour faire la conversion, on utilise la méthode des divisions, comme dans l'exemple ci-dessous :
\(19_{10} =\)
\(19_{10} =\)
\(19_{10} =\)
\(19_{10} =\)
\(19_{10} = 10011_2\)
Exercice 2 : entier vers binaire
Écrire le code de la fonction entier_vers_bin
qui prend en paramètre un entier et qui renvoie le texte correspondant à sa valeur en binaire.
Indications
- Il faut rajouter les restes de droite à gauche.
- Pour rappel la division entière s'écrit
n // 2
et le reste s'obtient en faisantn % 2
. - On rajoute toujours le dernier chiffre en dehors de la boucle.
>>> entier_vers_bin(0)
"0"
>>> entier_vers_bin(1)
"1"
>>> entier_vers_bin(2)
"10"
>>> entier_vers_bin(13)
"1101"
# Tests
(insensible à la casse)(Ctrl+I)
# Tests
(insensible à la casse)(Ctrl+I)
# Tests
(insensible à la casse)(Ctrl+I)