NSI (première) · Chapitre 7 · Application directe du cours
Écrire somme(t) et produit(t) par accumulateur
Parcourir, trier, prouver · Parcours élémentaires · niveau 1 (application)
Énoncé
Écrire somme(t) et produit(t) par accumulateur. Pourquoi l'une part de et l'autre de ? Que rendent-elles sur un tableau vide ?
Corrigé
def somme(t):
"""Somme des éléments. Rend 0 sur un tableau vide."""
total = 0
for x in t:
total = total + x
return total
def produit(t):
"""Produit des éléments. Rend 1 sur un tableau vide."""
p = 1
for x in t:
p = p * x
return p
somme([]) == 0, produit([]) == 1, et sur [3, 1, 4] : et .
Pourquoi et . L'accumulateur doit partir de l'élément neutre de l'opération : la valeur qui ne change rien. Pour l'addition c'est , pour la multiplication c'est . C'est ce qui rend l'invariant vrai avant le premier tour — invariant : après avoir traité les premiers éléments, total vaut leur somme ; pour , la somme de rien vaut .
Et sur un tableau vide, ce ne sont pas des cas particuliers. Le résultat sort tout seul de l'invariant, sans qu'on ait rien écrit de spécial. C'est le signe d'un bon choix d'initialisation : aucun test de cas limite n'a été nécessaire. Comparez avec indice_maximum, dont l'initialisation ne peut pas être une constante — d'où sa précondition « t non vide ». La différence tient à ce que le maximum n'a pas d'élément neutre parmi les nombres.
Validation : comparées à sum sur tableaux tirés au hasard, vides compris — cas passent.
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.