Adloun

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

Faire l'exercice suivant avec le tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →