PARTIE ALGORITHMIQUE TP3 Addition de deux entiers exprimés en binaire 1) L’algorithme de l’addition en base 10 Pour ajouter 2 nombres exprimés en base 10, on les pose en colonne : On commence par ajouter les chiffres des unités, ici 8 et 6 ce qui donne 14. Si le nombre trouvé est supérieur ou égal à la base, ici 10, on soustrait 10, on écrit 4 et on a une retenue de 1 pour les dizaines. Ensuite, on ajoute les chiffres des dizaines et la retenue : 2+5+1=8. Ce nombre est inférieur à 10 donc on écrit 8 et la retenue pour les centaines vaut 0. On continue cet algorithme jusqu’à la fin. 1 0 1 0 728 + 456 1184 Rem : la retenue initiale est égale à 0. 2) Comment ajouter des nombres exprimés en base 2 ? 1 1 1 0 101 + 111 1100 On procède de la même façon pour ajouter des nombres en base 2 : On ajoute 1 et 1 et la retenue initiale qui vaut 0 : le résultat est 10. Comme vu dans l’exemple précédent, si le nombre trouvé est supérieur ou égal à 10 (2 en décimal), on soustrait la base et on a une retenue pour le chiffre des deuzaines. On ajoute ensuite 0+1+1de retenue. Le résultat est 10 : on pose 0 et on retient 1. Puis on continue l’algorithme jusqu’à la fin. 3) Table d’addition binaire 1. Compléter la table d’addition de deux L’addition est l’opération qui consiste à effectuer : – Dans un premier temps, la somme Si de deux digits de même rang tels que a i et bi par exemple, – Puis dans un second temps, une deuxième somme entre les digits de rang supérieur ai +1 et b i +1 et la valeur de la retenue issue de l’addition précédente Ri . nombres binaires : 0+0 0+1 1+0 1+1 = = = = je pose 0 et je retiens 1 Si l’on désire additionner des nombres binaires comportant plusieurs bits (a n−1 , . . . , a2 , a1 , a0 ) + (b n−1 , . . . , b2 , b1 , b0 ), on doit ajouter les unités (rang 0), puis les bits de rang 1, puis 2, etc. Il faut tenir compte, dès le deuxième rang que l’on peut avoir une retenue ; donc il faut ajouter au résultat précédent la retenue de l’addition de rang inférieur. Pour l’addition de deux nombres binaires, on peut donc considérer qu’il faut ajouter à chaque rang, 3 bits : Sn = (an + bn ) + Rn−1 2. Compléter la table suivante Rn−1 0 0 0 0 1 1 1 1 bn 0 0 1 1 0 0 1 1 an 0 1 0 1 0 1 0 1 Sn Rn En considérant une addition binaire comme la somme à effectuer sur 3 mémoires 1 bits, nous aurons comme résultat : un bit de somme et un bit de retenue. La retenue est égale à 1 dès que le résultat de la somme précédente atteint la valeur 2 (10 en binaire) ou 3 (11 en binaire). 4) Algorithme d’addition. Soit 2 nombres A et B représentés par les listes : – A = [a n−1, a n−2, . . ., a 0] – B = [b n−1,b n−2, . . ., b 0] et leur somme S = A + B représentée par la liste : – S = [S n−1, S n−2, . . ., S 0] et soit Rn−1 Rn−2 . . . R0 les retenues successives. En Python, dans les programmes réalisés au cours de ce TP, A, B et S seront représentés par des variables de type list. Le nombre 6 sera par exemple représenté par la liste : [1,1,0]. Algorithme : Addition en base 2 INITIALISATION : A FFECTER À R LA VALEUR ….. TRAITEMENT : POUR i VARIANT DE 0 À …… AFFECTER À w LA VALEUR ai + bi + R SI w <=…….. ALORS A FFECTER À Si LA VALEUR ……. A FFECTER À R LA VALEUR ……… S INO N A FFECTER À Si LA VALEUR……… A FFECTER À R LA VALEUR …....... 1) Compléter l’algorithme d’addition ci-dessus : 2) Définir une fonction add2 qui effectue l’addition binaire de 2 entiers A et B donnés par leur représentation binaire sur n bits. 3) On pensera à traiter le cas particulier de la dernière retenue égale à 1. Aide : transformer la chaine issue de l’input en liste avec la fonction list(chaine). Placer les sommes de la droite vers la gauche dans une liste s grâce à s.insert(0,valeur à insérer). int(ch) transforme un caractère ‘6’ en nombre entier 6. 4) Pour les plus rapides, écrire une fonction nommée neg2 qui détermine le complément à 2 n d’un entier codé sur n bits. a) Première méthode : pour trouver le complément à 2n d’un entier A écrit sur n bits, il suffit, dans la représentation binaire de A, de remplacer chaque 0 par un 1 et chaque 1 par un 0. Il suffit ensuite d’ajouter 1 au nombre obtenu. b) Deuxième méthode : pour donner le complément à 2n, en partant de la droite, on garde les zéros jusqu’au premier ‘1’ rencontré. On garde aussi ce premier ‘1’. En se déplaçant vers la droite, on inverse les chiffres (1 devient 0 et 0 devient 1).