Adloun

Un invariant de boucle

Exercice supplémentaire · niveau 3 (difficile) · sciences numériques et technologie (seconde), chapitre 4 — Les boucles · Du langage naturel à Python

Énoncé

On considère le programme ci-dessous, qui calcule .

resultat = 1
base = x
exposant = n
while exposant > 0:
    resultat = resultat * base
    exposant = exposant - 1

Vérifier qu'à chaque passage, la quantité garde la même valeur. À quoi sert cette observation ?

Corrigé

Vérification. Avant le premier tour, la quantité vaut . À chaque tour, resultat est multiplié par base tandis que exposant diminue de , donc base**exposant est divisé par base : le produit est inchangé.

À la sortie, exposant vaut , donc la quantité vaut . Comme elle valait au départ et n'a jamais changé, resultat contient .

C'est une démonstration de correction, et non un simple test. Un jeu d'essais montre qu'un programme marche sur les cas essayés ; un invariant montre qu'il marche toujours. La méthode est générale : trouver une quantité que la boucle préserve, puis regarder ce qu'elle devient à la sortie.

Prolongement. Le même invariant permet l'exponentiation rapide : quand exposant est pair, on peut mettre base au carré et diviser exposant par — le produit reste inchangé, mais on va deux fois plus vite.

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.