Prouver qu'une boucle while se termine
Quand l'utiliser : Dès qu'une boucle non bornée apparaît, et systématiquement quand l'énoncé écrit « justifier que l'algorithme se termine ».
- 1 Nommer la quantité choisie comme variant, en une phrase : « Considérons la valeur de n au début de chaque tour. »
- 2 Montrer qu'elle est ENTIÈRE et POSITIVE, en s'appuyant sur la précondition de la fonction.
- 3 Montrer qu'elle DÉCROÎT STRICTEMENT à chaque tour, en citant l'instruction responsable.
- 4 Conclure : une suite d'entiers positifs strictement décroissante est finie, donc la boucle se termine.
Phrase de conclusion
La valeur de n est un entier strictement positif d'après la précondition, et l'instruction n = n // 2 la fait strictement décroître à chaque tour tant que n est supérieur à 1. Une suite d'entiers positifs strictement décroissante étant finie, la boucle se termine.
Le piège : Se contenter de « la boucle finit par s'arrêter ». Les trois propriétés, entière, positive, strictement décroissante, doivent être écrites une par une : c'est le barème.
Barème : En général 0,5 point pour le variant nommé, 0,5 pour la positivité, 1 point pour la décroissance stricte, 0,5 pour la conclusion.
Spécifier et tester une fonction
Quand l'utiliser : Dès que l'énoncé demande d'écrire une fonction, et toujours avant d'écrire la première ligne de code.
- 1 Écrire la docstring d'abord : ce que la fonction reçoit, ce qu'elle renvoie, et la précondition qui doit être vraie à l'appel.
- 2 Choisir les noms des paramètres et le TYPE de la valeur renvoyée, puis seulement écrire le corps.
- 3 Construire un jeu de tests avec au moins trois cas : un cas courant, un cas limite, et un cas qui a failli être oublié.
- 4 Les cas limites obligatoires : la liste vide, la liste à un seul élément, le premier et le dernier indice, et les valeurs négatives.
Phrase de conclusion
La fonction maximum(t) renvoie le couple constitué du plus grand élément de t et de son indice; sa précondition est que t soit une liste non vide de nombres. Testée sur [3, 9, 2, 9, 1], elle renvoie (9, 1), et sur [-5, -2, -9] elle renvoie (-2, 1).
Le piège : Ne tester que sur l'exemple de l'énoncé. Le cas qui fait tomber une copie est presque toujours la liste à un seul élément, ou une liste de valeurs toutes négatives quand le maximum a été initialisé à zéro.
Barème : 1 point pour la spécification, 2 points pour le code, 1 point pour un jeu de tests couvrant un cas limite.