© Copyright Franck CHEVRIER 2019-2021 https://www.python-lycee.com.
Les activités partagées sur Capytale sont sous licence Creative Commons.
Pour exécuter une saisie Python, sélectionner la cellule et valider avec SHIFT+Entrée.
Addition binaire
Activité sur les booléens n°2
Important : Il est conseillé de réaliser cette activité après l'activité Portes logiques et booléens.
1. Somme de deux chiffres en binaire
En écriture binaire, on ne dispose que de deux chiffres pour l'écriture des nombres : 0 et 1.
Ces chiffres correspondent respectivement aux valeurs booléennes False et True.
La somme de deux chiffres en binaire donne un résultat à deux chiffres : Le chiffre des unités et le chiffre des "deuzaines".
1.1. Recopier et compléter la table d'addition de deux chiffres binaires e1 et e2 ci-contre.
$\quad\;\;$(s0 et s1 sont respectivement le chiffre des unités et le chiffre des deuzaines du résultat)
1.2. a. Quelle est la porte logique qui permet d'obtenir s1 à partir de e1 et e2 ?
$\quad\;\;$b. Quelle est la porte logique qui permet d'obtenir s0 à partir de e1 et e2 ?
$\quad\;\;$c. Représenter un circuit combinatoire qui réalise l'addition de deux chiffres binaires.
1.3. Écrire une fonction Python add:
# Écrire ici la fonction add
1.4. La fonction Python Table_verite donnée ci-dessous renvoie la table de vérité d'un circuit combinatoire donné par une fonction Python.
$\quad\;\;$Exécuter les cellules suivantes pour vérifier que la fonction add permet de retrouver la table de vérité construite en 1.1.
from itertools import product
from inspect import signature
def Table_verite(fonction_booleenne):
"""
renvoie la table d'une fonction booléenne sous forme d'un dictionnaire
À chaque tuple des valeurs booléennes en entrée est associé la(les) sortie(s) correspondante(s)
"""
#récupération du nombre d'arguments de la fonction booleenne
nbre_arguments = len (signature(fonction_booleenne).parameters)
#initialisation de la table
Table={}
#remplissage de la table : à chaque séquence de booléens possible...
for liste_bool in product( *([[False,True] for j in range(nbre_arguments)] )):
#...on fait correspondre le résultat de la fonction booléenne
Table[liste_bool] = fonction_booleenne(*liste_bool)
#renvoie la table
return Table
Table_verite(add)
2. Somme de deux nombres en binaire
Lorsqu’on pose une addition de deux nombres, on est amené à calculer la somme de trois chiffres :
2.1. a. Effectuer à la main les additions binaires suivantes.
#Sélectionner cette zone puis SHIFT+ENTREE
from IPython.display import HTML ; HTML("""<iframe scrolling="no" title="Additionneur binaire" src="https://www.geogebra.org/material/iframe/id/umzwxpdw/width/717/height/423/border/888888/sfsb/true/smb/false/stb/false/stbh/false/ai/false/asb/false/sri/false/rc/false/ld/false/sdz/false/ctl/false" width="717px" height="423px" style="border:0px;"> </iframe>""")
2.2. Recopier et compléter la table d'addition de trois chiffres binaires e1, e2 et r ci-contre.
$\quad\;\;$(s0 et s1 sont respectivement le chiffre des unités et le chiffre des deuzaines du résultat)
# Écrire ici la fonction add_r
# Exécuter cette cellule pour vérifier
Table_verite(add_r)
2.5. Pour la suite, un nombre binaire sera représenté par une liste contenant des 0 et des 1.
$\quad\;\;$Tester les syntaxes suivantes et compléter dans chaque cas le commentaire.
L=[1,0,0,0,1,1,0] # représentation du nombre binaire 1000110 sous forme de liste
L[-1] # permet d'obtenir ...
L[-2] # permet d'obtenir ...
L[-len(L)] # permet d'obtenir ...
L.insert(0,1) # permet ...
L
2.6. Écrire une fonction Python add_bin :
# Écrire ici la fonction add_bin
2.7. Tester la fonction Python ci-dessous qui permet le calcul de deux nombres binaires quelconques (à l'aide de la fonction add_bin).
# Exécuter cette cellule
def add_bin_final(L1,L2):
"""
Fonction qui réalise la somme de deux nombres binaires
représentés par des listes
"""
# on ajoute des 0 "inutiles" pour que les listes soient de même longueur
L2 = [0]*(len(L1)-len(L2)) + L2 # ajouts de chiffres 0 à L2 si nécessaire
L1 = [0]*(len(L2)-len(L1)) + L1 # ajouts de chiffres 0 à L1 si nécessaire
return add_bin(L1,L2)
add_bin_final([1,1,0,0],[1,1,0,0,1,1,1])
© Copyright Franck CHEVRIER 2019-2021 https://www.python-lycee.com.
Les activités partagées sur Capytale sont sous licence Creative Commons.