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 |
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\) |
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.
-
l'essayer sur un cas dont on connaît la réponse
-
si le résultat est faux, dresser le tableau d'exécution pour trouver le tour qui dérape
-
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.