Afficher en version réduite
Rédiger le cours
Moon Arrows Sun
Arrows

Boucles et mise au point d'un programme

La quatrième a vu les variables et les conditions. La troisième ajoute la répétition, et surtout ce qui vient après l'écriture : faire tourner le programme, et le corriger.

Algorithme et programme

Algorithme, programme

Un algorithme est une suite d'instructions qui résout un problème. Un programme en est l'écriture dans un langage que la machine exécute.

Les instructions s'exécutent dans l'ordre où elles sont écrites, une par une, sans jamais revenir en arrière - sauf si une boucle le demande.

La boucle bornée

Quand on sait combien de fois répéter, on écrit une boucle bornée.

somme = 0
for k in range(5):
    somme = somme + k
print(somme)

La variable \(k\) prend successivement les valeurs \(0\), \(1\), \(2\), \(3\) et \(4\) - cinq valeurs, à partir de zéro. Le programme affiche donc \(0 + 1 + 2 + 3 + 4\), soit \(10\).

« range(5) » compte cinq tours, mais s'arrête à \(4\). C'est l'erreur la plus fréquente : on croit que la boucle va jusqu'à \(5\).

La boucle non bornée

Quand on ne sait pas combien de fois, mais qu'on sait quand s'arrêter, on écrit une boucle non bornée.

capital = 1000
annees = 0
while capital < 2000:
    capital = capital * 1.05
    annees = annees + 1
print(annees)

Le programme continue tant que la condition est vraie, et s'arrête dès qu'elle devient fausse. Ici, il compte le nombre d'années pour doubler un capital.

Si la condition ne devient jamais fausse, le programme ne s'arrête pas. C'est le seul risque propre à ce type de boucle, et il faut vérifier, avant de lancer, que quelque chose la fera changer.

Choisir sa boucle

La question posée
La boucle
répéter dix fois
bornée
parcourir une liste de valeurs
bornée
continuer jusqu'à dépasser un seuil
non bornée
recommencer tant que la réponse est fausse
non bornée
« combien de fois » appelle une boucle bornée, « jusqu'à quand » une boucle non bornée

Une condition dans une boucle

Les deux se combinent : la boucle répète, la condition trie.

pairs = 0
for k in range(20):
    if k % 2 == 0:
        pairs = pairs + 1
print(pairs)

Le symbole « % » donne le reste de la division : « k % 2 == 0 » se lit « le reste de \(k\) par \(2\) est nul », c'est-à-dire « \(k\) est pair ».

Le programme compte les entiers pairs de \(0\) à \(19\), et affiche \(10\).

Lire un programme pas à pas

Pour savoir ce qu'affiche un programme, on ne devine pas : on suit les valeurs dans un tableau, tour après tour.

u = 3
for k in range(4):
    u = 2 * u - 1
Tour
\(k\)
\(u\) après le tour
départ
-
\(3\)
1
\(0\)
\(5\)
2
\(1\)
\(9\)
3
\(2\)
\(17\)
4
\(3\)
\(33\)
une ligne par tour : c'est la seule méthode qui ne se trompe pas

Le compteur \(k\) n'apparaît pas dans le calcul : il ne sert qu'à compter les tours. Une variable de boucle peut très bien n'être jamais utilisée.

Mettre au point

Écrire un programme qui fonctionne du premier coup est rare. Le tester et le corriger fait partie du travail, et c'est ce que le programme officiel demande.

  1. l'essayer sur un cas dont on connaît la réponse
  2. si le résultat est faux, dresser le tableau d'exécution pour trouver le tour qui dérape
  3. vérifier les trois pièges habituels : le nombre de tours, l'initialisation d'une variable, et l'endroit où l'on affiche

Une somme qui ne repart pas de zéro, une boucle qui fait un tour de trop, un affichage placé dans la boucle au lieu d'après : ces trois erreurs expliquent presque tous les programmes faux.