NSI (première) · Chapitre 3 · Exercice de TD
Écrire le prototype, la précondition et la postcondition d'une…
Langages et programmation · Spécifier : prototype, préconditions, postconditions · niveau 2
É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 > et non >=. Avec >=, 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.
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.