NSI (première) · Chapitre 1 · Exercice de TD
Écrire une fonction addition base(s, t, b) qui additionne deux…
Représenter les entiers · Écrire un nombre dans une base · niveau 3 (difficile)
Énoncé
Écrire une fonction addition_base(s, t, b) qui additionne deux écritures en base chiffre par chiffre, avec retenue, sans jamais convertir en entier Python. Donner sa précondition, puis la valider sur toutes les sommes avec et toutes les bases de à .
Corrigé
On aligne les deux écritures à la même longueur en complétant à gauche par des zéros — l'ajout d'un zéro de poids fort ne change pas la valeur — puis on parcourt les positions de droite à gauche en propageant la retenue.
def addition_base(s, t, b):
"""Somme de deux écritures en base b, rendue en base b.
Précondition : s et t ne contiennent que des chiffres
valides en base b (donc d'indice < b dans CHIFFRES).
"""
n = max(len(s), len(t))
s = s.rjust(n, "0")
t = t.rjust(n, "0")
res = ""
retenue = 0
for i in range(n - 1, -1, -1):
somme = CHIFFRES.index(s[i]) + CHIFFRES.index(t[i]) + retenue
res = CHIFFRES[somme % b] + res
retenue = somme // b
if retenue > 0:
res = CHIFFRES[retenue] + res
return res
L'invariant. Après avoir traité les positions à , la chaîne res contient l'écriture des chiffres de poids faible de la somme, et retenue vaut ou : c'est ce qui « déborde » vers la position suivante. La retenue reste toujours inférieure à car , donc .
La validation.
for b in range(2, 17):
for x in range(0, 60):
for y in range(0, 60):
got = addition_base(vers_base(x, b), vers_base(y, b), b)
assert depuis_base(got, b) == x + y
cas passent. Exemples : addition_base("1101", "111", 2) rend "10100" (), et addition_base("7EA", "1F", 16) rend "809" ().
Piège : oublier la dernière ligne. Si la retenue finale est non nulle et qu'on ne l'écrit pas, le résultat est faux d'exactement — et il est faux silencieusement.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 16 autres exercices corrigés dans ce chapitre, et 20 à chercher avec le tuteur
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
Sans compte : le cours, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.