Adloun

Écrire indice minimum(t), symétrique de indice maximum

Application directe du cours · niveau 1 (application) · NSI (première), chapitre 7 — Parcourir, trier, prouver · Parcours élémentaires

Énoncé

Écrire indice_minimum(t), symétrique de indice_maximum. Quelle occurrence rend-elle en cas d'ex æquo, et pourquoi cela mérite-t-il d'être écrit ?

Corrigé


def indice_minimum(t):
    """Indice d'un plus petit élément de t.

    Précondition  : t est non vide.
    Postcondition : t[r] <= t[k] pour tout k ; en cas d'ex aequo, l'indice
                    du PREMIER minimum rencontré.
    """
    assert len(t) > 0, "tableau vide"
    m = 0
    for i in range(1, len(t)):
        if t[i] < t[m]:
            m = i
    return m

Une seule différence avec indice_maximum : le &gt; devient &lt;. L'invariant se transporte mot pour mot, en remplaçant « plus grand » par « plus petit ».

L'ex æquo. Le test est &lt;, strict : on ne remplace m que si l'on trouve strictement plus petit. Un second minimum de même valeur ne déloge donc pas le premier : la fonction rend le premier. indice_minimum([4, 1, 7, 1]) rend , pas .

Pourquoi l'écrire dans la docstring. Parce que ce n'est pas une conséquence de l'énoncé « rendre l'indice d'un minimum » — les deux réponses le satisfont. C'est un choix, et un choix non écrit est un piège pour celui qui utilisera la fonction : il découvrira le comportement par l'expérience, sur un cas, et supposera qu'il est garanti. La règle du chapitre 5 sur les ex æquo vaut ici : ce que la fonction choisit, la docstring le promet.

Vérification : sur tableaux tirés au hasard, on a contrôlé à la fois t[m] == min(t) et la primauté — aucun élément d'indice inférieur n'est égal au minimum.

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.