Adloun

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.

tourtest resteetapes
——70
1 vrai31
2 vrai12
— faux : sortie12

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

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 →