Annoter et prouver totalement
Exercice · informatique (tronc commun des prépas scientifiques), chapitre 10 — Prouver et analyser : la boîte à outils formalisée
Énoncé
Annoter et prouver totalement la fonction suivante :
def somme_impairs(n: int) -> int:
s, k = 0, 0
while k < n:
s = s + 2 * k + 1
k = k + 1
return sCorrigé
- Précondition : .
- Postcondition : Renvoie .
- Invariant : .
- Initialisation : Avant la boucle, et . On a bien , l'invariant est initialisé.
- Conservation : Supposons vrai et au début d'un tour. Après le tour, la nouvelle valeur vaut et la nouvelle valeur vaut . On a bien . L'invariant est conservé.
- Conclusion : En sortie de boucle, (par négation de la condition) et (puisque commence à 0 et progresse de 1 à chaque étape). Donc . L'invariant donne alors . La postcondition est démontrée.
- Variant : . C'est un entier. Tant que la boucle tourne, . À chaque tour, augmente de 1 donc diminue strictement de 1. La terminaison est prouvée. L'algorithme est totalement correct et calcule le carré de par somme d'impairs.
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.