Dans indice maximum, remplacer par =
Exercice d'entraînement · niveau 2 · NSI (première), chapitre 7 — Parcourir, trier, prouver · Parcours, occurrences, cas limites
Énoncé
Dans indice_maximum, remplacer > par >=. Le résultat reste-t-il correct ? Qu'est-ce qui change exactement ?
Corrigé
Correct, oui : c'est bien un indice de maximum dans les deux cas. La postcondition « t[r] t[k] pour tout » est vérifiée par les deux versions — tirages le confirment.
Ce qui change : l'ex æquo choisi.
| `t` | `>` rend | `>=` rend |
|---|---|---|
| `[4, 7, 1, 7]` | (le premier ) | (le dernier ) |
Avec >, on ne déloge m que sur un strictement plus grand : le premier maximum reste. Avec >=, tout maximum de même valeur prend la place : le dernier gagne. Les deux propriétés ont été vérifiées formellement sur tirages — le premier indice atteignant le maximum d'un côté, le dernier de l'autre.
Quand cela cesse d'être anodin. Tant qu'on ne rend que la valeur, aucune importance. Mais dès qu'on rend l'indice — et c'est exactement ce que fait cette fonction — le choix devient visible pour l'appelant. Et si l'on trie une table (chapitre 6) en s'appuyant dessus, il décide de la stabilité du tri, comme on l'a vu en TD.
La règle, une troisième fois. Ce que le code choisit, la docstring doit le promettre. Ici : « en cas d'ex æquo, l'indice du premier maximum rencontré » — c'est écrit dans le cours, et ce n'est pas décoratif.
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.