NSI (première) · Chapitre 7 · Application directe du cours
Écrire indice minimum(t), symétrique de indice maximum
Parcourir, trier, prouver · Parcours élémentaires · niveau 1 (application)
É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.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 16 autres exercices corrigés dans ce chapitre, et 20 à chercher avec le tuteur
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
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.