Adloun

NSI (première) · Chapitre 7 · Exercice de TD

Écrire un variant pour la boucle while n!= 1

Parcourir, trier, prouver · Variants, terminaison, mesure · niveau 2

Énoncé

Écrire un variant pour la boucle while n != 1: n = n // 2 avec n entier strictement positif, et prouver qu'elle s'arrête. Combien de tours effectue-t-elle ? (chapitre 1)

Corrigé

Le variant : n lui-même.

Entier et positif : n est entier par hypothèse, et la division entière d'un entier strictement positif par reste positive ou nulle. En fait elle reste : si , alors .

Strictement décroissant : on entre dans le corps seulement si , donc — n étant — si . Et pour , , l'inégalité étant stricte.

Une suite d'entiers strictement décroissante est finie : la boucle s'arrête, et elle s'arrête sur n , puisque c'est la seule valeur qui ne permet pas d'entrer.

Le nombre de tours : . Chaque tour retire un bit à l'écriture binaire de n (chapitre 1) ; on s'arrête quand il n'en reste qu'un. Un entier s'écrit sur bits, donc il faut tours.

tours

Vérification : l'égalité a été contrôlée pour tous les de à — elle tient partout.

Le piège de la précondition. Pour , la boucle ne s'arrête jamais : , et . Le variant n'y décroît pas. Pour négatif, c'est pire : en Python, la suite décroît sans jamais valoir — le variant décroît bien, mais il n'est pas positif, et c'est cette hypothèse-là qui manque. Un variant a trois conditions, et les trois servent.

100 % gratuit

Essaie le suivant avec le tuteur

Faire l'exercice suivant avec le tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →