Un test qui aurait dû être une boucle
Exercice d'entraînement · niveau 2 · mathématiques (ECT 1re année), chapitre 13 — Informatique et algorithmique · Lire, corriger et écrire un script
Énoncé
Ce script devait donner le nombre de mois au bout desquels un stock de unités, qui perd chaque mois, passe sous unités. Il affiche 1. Trouver l'erreur, corriger, puis donner la réponse.
S = 200
n = 0
if S > 50:
S = 0.9*S
n = n + 1
print(n)Corrigé
Le diagnostic. L'instruction if exécute son bloc au plus une fois : le test est évalué, le bloc est fait, et le script continue. Elle ne revient jamais en arrière. Ici le stock est donc diminué une seule fois — d'où l'affichage 1, quelle que soit la valeur de départ.
La correction. Il faut répéter tant que la condition tient, donc remplacer if par while :
S = 200
n = 0
while S > 50:
S = 0.9*S
n = n + 1
print(n, S)
Ce que rend le script corrigé. Il affiche 14 et une valeur de S proche de .
Le calcul qui le confirme. Après mois, . La condition s'écrit . Or et : il faut donc mois, et le stock vaut alors unités.
Ce qu'il faut retenir. if pose une question une fois ; while la repose avant chaque tour. Un script qui affiche toujours ou là où l'on attend un rang est presque toujours un while écrit if, ou un compteur oublié.
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.