Donner un exemple de boucle while qui ne se termine jamais, et un…
Application directe du cours · niveau 1 (application) · NSI (première), chapitre 3 — Langages et programmation · Reconnaître les constructions et les langages
Énoncé
Donner un exemple de boucle while qui ne se termine jamais, et un exemple de boucle while dont on ne peut pas dire à l'avance combien de tours elle fera, mais dont on est certain qu'elle se termine.
Corrigé
def somme_bornee(n):
"""Somme des entiers de 1 a n, par boucle bornee."""
total = 0
for i in range(1, n + 1):
total = total + i
return total
def somme_non_bornee(n):
"""Somme des entiers de 1 a n, par boucle non bornee."""
total = 0
i = 1
while i <= n:
total = total + i
i = i + 1
return total
Vérification.
for n in range(0, 300):
assert somme_bornee(n) == somme_non_bornee(n) == n * (n + 1) // 2
Les cas passent, et coïncident avec la formule .
Laquelle préférer ? La bornée, sans hésiter. Trois raisons, dans l'ordre d'importance :
- elle s'arrête toujours : rien à démontrer ;
- elle ne comporte pas de ligne
i = i + 1à oublier — l'oubli le plus classique, et il produit une boucle infinie ; - elle dit son intention : « pour chaque de à ».
La règle générale : quand le nombre de tours est connu avant d'entrer dans la boucle, on emploie une boucle bornée. La boucle non bornée est réservée aux cas où ce nombre dépend de ce qui se passe pendant l'exécution.
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.