Écrire somme(t) et produit(t) par accumulateur
Application directe du cours · niveau 1 (application) · NSI (première), chapitre 7 — Parcourir, trier, prouver · Parcours élémentaires
É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.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.