NSI (première) · Chapitre 3 · Exercice de TD
Reprendre le premier programme du chapitre (celui qui calcule total…
Langages et programmation · Constructions élémentaires, traces et terminaison · niveau 2
Énoncé
Reprendre le premier programme du chapitre (celui qui calcule total, message et etapes pour ). Dérouler à la main la boucle while, en dressant le tableau des valeurs de reste et de etapes après chaque tour. Prédire ensuite la valeur de etapes pour , puis vérifier sur machine. Enfin, exprimer etapes en fonction du nombre de bits de .
Corrigé
La trace, pour . On part de reste = 7 et etapes = 0. Le test est évalué avant chaque tour.
| tour | test | reste | etapes |
|---|---|---|---|
| — | — | 7 | 0 |
| 1 | vrai | 3 | 1 |
| 2 | vrai | 1 | 2 |
| — | faux : sortie | 1 | 2 |
La boucle fait donc deux tours et etapes vaut .
Prédiction pour . Chaque tour divise par deux : . Six tours.
Vérification.
def etapes_de(n):
"""Nombre de divisions par 2 pour ramener n >= 1 a 1."""
reste = n
etapes = 0
while reste > 1:
reste = reste // 2
etapes = etapes + 1
return etapes
print(etapes_de(7), etapes_de(100)) # 2 6
Le lien avec le chapitre 1. Diviser par deux, c'est effacer le bit de poids faible. Partir d'un nombre de bits et arriver à (un seul bit) demande donc effacements :
for n in range(1, 100000):
assert etapes_de(n) == nb_bits(n) - 1
Les cas passent. Contrôle : a trois bits, et ; en a sept, et .
Piège de la trace : placer la mise à jour de etapes avant celle de reste ne change rien ici, mais écrire le test après le corps — c'est-à-dire une boucle « répéter jusqu'à » — donnerait un tour de plus pour .
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 16 autres exercices corrigés dans ce chapitre, et 20 à chercher avec le tuteur
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
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.