{"cells":[{"metadata":{},"cell_type":"markdown","source":"![En tête general](https://raw.githubusercontent.com/PythonLycee/PyLyc/master/img/En_tete_general.png)\n\n\n© Copyright Franck CHEVRIER 2019-2021 https://www.python-lycee.com.
\nLes activités partagées sur Capytale sont sous licence Creative Commons.\n\n Pour exécuter une saisie Python, sélectionner la cellule et valider avec SHIFT+Entrée.\n"},{"metadata":{},"cell_type":"markdown","source":"

\n Addition binaire \n

\n Activité sur les booléens n°2 \n

\nImportant : Il est conseillé de réaliser cette activité après l'activité Portes logiques et booléens."},{"metadata":{},"cell_type":"markdown","source":"### Sommaire\n\n1. Somme de deux chiffres en binaire
\n2. Somme de deux nombres en binaire
\n"},{"metadata":{},"cell_type":"markdown","source":"

\n1. Somme de deux chiffres en binaire "},{"metadata":{},"cell_type":"markdown","source":"En écriture binaire, on ne dispose que de deux chiffres pour l'écriture des nombres : 0 et 1.
\nCes chiffres correspondent respectivement aux valeurs booléennes False et True.
\nLa somme de deux chiffres en binaire donne un résultat à deux chiffres : Le chiffre des unités et le chiffre des \"deuzaines\"."},{"metadata":{},"cell_type":"markdown","source":"
Addition binaire de deux chiffres
e1e2s1s0
00
01
10
11
\n\n1.1. Recopier et compléter la table d'addition de deux chiffres binaires e1 et e2 ci-contre.
\n$\\quad\\;\\;$(s0 et s1 sont respectivement le chiffre des unités et le chiffre des deuzaines du résultat)
\n

\n1.2. a. Quelle est la porte logique qui permet d'obtenir s1 à partir de e1 et e2 ?
\n$\\quad\\;\\;$b. Quelle est la porte logique qui permet d'obtenir s0 à partir de e1 et e2 ?
\n$\\quad\\;\\;$c. Représenter un circuit combinatoire qui réalise l'addition de deux chiffres binaires.
\n"},{"metadata":{},"cell_type":"markdown","source":"1.3. Écrire une fonction Python add:\n\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Écrire ici la fonction add\n\n\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"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.
\n$\\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.
"},{"metadata":{"trusted":false},"cell_type":"code","source":"from itertools import product\nfrom inspect import signature\n\ndef Table_verite(fonction_booleenne):\n \"\"\"\n renvoie la table d'une fonction booléenne sous forme d'un dictionnaire\n À chaque tuple des valeurs booléennes en entrée est associé la(les) sortie(s) correspondante(s)\n \"\"\"\n #récupération du nombre d'arguments de la fonction booleenne\n nbre_arguments = len (signature(fonction_booleenne).parameters) \n \n #initialisation de la table\n Table={}\n \n #remplissage de la table : à chaque séquence de booléens possible...\n for liste_bool in product( *([[False,True] for j in range(nbre_arguments)] )):\n #...on fait correspondre le résultat de la fonction booléenne\n Table[liste_bool] = fonction_booleenne(*liste_bool)\n \n #renvoie la table\n return Table\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"Table_verite(add)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

\n2. Somme de deux nombres en binaire "},{"metadata":{},"cell_type":"markdown","source":"
\n \n
\n\nLorsqu’on pose une addition de deux nombres, on est amené à calculer la somme de trois chiffres :\n \nAinsi, pour réaliser la somme de deux nombres, il est nécessaire de savoir sommer trois chiffres.\n"},{"metadata":{},"cell_type":"markdown","source":"2.1. a. Effectuer à la main les additions binaires suivantes.\n\n$\\quad\\;\\;$b. Activer la cellule ci-dessous pour obtenir un additionneur binaire. Utiliser cet additionneur pour vérifier les résultats de la question 2.1.a.\n "},{"metadata":{"trusted":false},"cell_type":"code","source":"#Sélectionner cette zone puis SHIFT+ENTREE\nfrom IPython.display import HTML ; HTML(\"\"\"\"\"\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
Somme binaire de trois chiffres
re1e2s1s0
000
001
010
011
100
101
110
111
\n\n\n2.2. Recopier et compléter la table d'addition de trois chiffres binaires e1, e2 et r ci-contre.
\n$\\quad\\;\\;$(s0 et s1 sont respectivement le chiffre des unités et le chiffre des deuzaines du résultat)
\n
\n2.3. a. Construire un circuit combinatoire qui permet d'obtenir s0 à partir de e1, e2 et r.
\n$\\quad\\;\\;$b. Construire un circuit combinatoire qui permet d'obtenir s1 à partir de e1, e2 et r.
\n$\\quad\\quad$ (on pourra réaliser un autre schéma ou compléter le schéma précédent)
\n
\n2.4. Écrire une fonction Python add_r:\n\n
Effectuer ensuite un appel à la fonction Table_verite pour vérifier la cohérence avec la question 2.2\n
"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Écrire ici la fonction add_r\n\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# Exécuter cette cellule pour vérifier\nTable_verite(add_r)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"2.5. Pour la suite, un nombre binaire sera représenté par une liste contenant des 0 et des 1.
\n$\\quad\\;\\;$Tester les syntaxes suivantes et compléter dans chaque cas le commentaire. "},{"metadata":{"trusted":false},"cell_type":"code","source":"L=[1,0,0,0,1,1,0] # représentation du nombre binaire 1000110 sous forme de liste\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"L[-1] # permet d'obtenir ...","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"L[-2] # permet d'obtenir ...","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"L[-len(L)] # permet d'obtenir ...","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"L.insert(0,1) # permet ...\nL","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"2.6. Écrire une fonction Python add_bin :\n\n\nRemarques :\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Écrire ici la fonction add_bin\n\n\n ","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"2.7. Tester la fonction Python ci-dessous qui permet le calcul de deux nombres binaires quelconques (à l'aide de la fonction add_bin).\n\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Exécuter cette cellule\n\ndef add_bin_final(L1,L2):\n \"\"\"\n Fonction qui réalise la somme de deux nombres binaires\n représentés par des listes \n \"\"\" \n # on ajoute des 0 \"inutiles\" pour que les listes soient de même longueur\n L2 = [0]*(len(L1)-len(L2)) + L2 # ajouts de chiffres 0 à L2 si nécessaire\n L1 = [0]*(len(L2)-len(L1)) + L1 # ajouts de chiffres 0 à L1 si nécessaire\n \n return add_bin(L1,L2)\n\n\nadd_bin_final([1,1,0,0],[1,1,0,0,1,1,1])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"![Claude_Shannon_George_Stibitz](https://raw.githubusercontent.com/PythonLycee/PyLyc/master/img/Claude_Shannon_George_Stibitz.png) \n\n
Claude Shannon (1916-2001) et George Stibitz (1904-1995) ont initié le calcul binaire en électronique en 1937.
"},{"metadata":{},"cell_type":"markdown","source":"© Copyright Franck CHEVRIER 2019-2021 https://www.python-lycee.com.
\nLes activités partagées sur Capytale sont sous licence Creative Commons.\n"}],"metadata":{"celltoolbar":"Raw Cell Format","kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.8.5"}},"nbformat":4,"nbformat_minor":2}