É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 > devient <. L'invariant se transporte mot pour mot, en remplaçant « plus grand » par « plus petit ».
L'ex æquo. Le test est <, 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.