Suivre une boucle while pas à pas
Exercice d'entraînement · niveau 2 · mathématiques (ECT 1re année), chapitre 13 — Informatique et algorithmique · Lire, corriger et écrire un script
Énoncé
Qu'affiche ce script ? Détailler les valeurs successives de u et de n.
u = 3
n = 0
while u < 50:
u = 2*u + 1
n = n + 1
print(n, u)Corrigé
Le mécanisme. Une boucle while teste sa condition avant chaque tour. Tant que u est strictement inférieur à , on remplace u par 2*u + 1 et on ajoute au compteur n.
Les tours, un par un.
| avant le tour | test u < 50 | u après | n après |
|---|---|---|---|
| vrai | |||
| vrai | |||
| vrai | |||
| vrai | |||
| faux | — | — |
L'affichage. Au cinquième test, est faux : la boucle s'arrête sans rien modifier. Le script affiche donc
4 63
Le point délicat. La valeur finale de u est , et non : la boucle ne s'arrête pas « juste avant » de dépasser le seuil, elle exécute un tour de trop du point de vue du seuil. Le dernier u calculé est le premier qui dépasse — c'est précisément ce qu'on cherche quand on programme un rang d'arrêt.
Pourquoi la boucle se termine. À chaque tour u est remplacé par dès que : la suite croît strictement, elle finira donc par dépasser . C'est la question à se poser avant tout while : qu'est-ce qui fait progresser vers l'arrêt ?
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.