Adloun

Écrire le prototype, la précondition et la postcondition d'une…

Exercice de TD · niveau 2 · NSI (première), chapitre 3 — Langages et programmation · Spécifier : prototype, préconditions, postconditions

Énoncé

Écrire le prototype, la précondition et la postcondition d'une fonction indice_du_maximum(t) qui renvoie l'indice d'un plus grand élément. Attention : que se passe-t-il en cas d'ex æquo ? La postcondition doit rester vraie dans ce cas.

Corrigé

Prototype. indice_du_maximum(t), où t est un tableau de nombres ; le résultat est un entier.

Précondition. len(t) > 0. Un tableau vide n'a pas de maximum, donc pas d'indice de maximum : la fonction ne peut rien promettre.

Postcondition. C'est ici que se joue l'exercice. Écrire « le résultat est l'indice du plus grand élément » suppose qu'il n'y en ait qu'un. La formulation correcte évite l'article défini :

Elle reste vraie en cas d'ex æquo : elle affirme qu'aucun élément ne dépasse t[i], sans prétendre que t[i] est seul de son espèce.


def indice_du_maximum(t):
    """Indice d'un plus grand element de t.

    Precondition  : t est un tableau non vide.
    Postcondition : 0 <= i < len(t) et t[i] >= t[j] pour tout j.
                    En cas d'ex aequo, l'indice rendu est le plus petit.
    """
    assert len(t) > 0, "tableau vide"
    i = 0
    for j in range(len(t)):
        if t[j] > t[i]:
            i = j
    assert 0 <= i < len(t) and all(t[i] >= x for x in t)
    return i

Vérification. indice_du_maximum([3, 1, 4, 1, 5]) rend ; [7, 7, 7] rend ; [-3, -1, -7] rend ; [5] rend . Puis, sur tableaux aléatoires de longueurs à et de valeurs dans :


for _ in range(2000):
    t = [random.randint(-50, 50) for _ in range(random.randint(1, 12))]
    assert t[indice_du_maximum(t)] == max(t)

Le détail qui décide : la comparaison est &gt; et non &gt;=. Avec &gt;=, la fonction rendrait le dernier indice maximal — ce qui est tout aussi correct vis-à-vis de la postcondition ci-dessus, mais contredirait la précision ajoutée dans la docstring. On ne documente que ce que le code garantit.

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.