Livre_silo 30 août 2013 16:32 Page 103
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
103
4 – Instructions : langage minimal de l’algorithmique
SAVOIR-FAIRE Corriger un programme à l’aide d’un débogueur
1 On identifie les variables critiques, dont la valeur peut radicalement influencer
le comportement du programme. En particulier, les variables intervenant dans la
condition d’une instruction while sont particulièrement importantes puisqu’elles
conditionnent le nombre de fois où le corps de cette boucle est exécuté.
2 On identifie, pour chacune de ces variables, les endroits clés du programme qui la
concernent : par exemple, lorsqu’ on lui affecte une valeur, en début ou en fin de
boucle.
3 On crée un point d’arrêt à ces endroits, puis on déroule l’exécution du programme
à l’aide du débogueur et on surveille les valeurs des variables critiques dans l’explorateur de variables.
Voir le chapitre 1 page 30 pour l’utilisation concrète du débogueur de Spyder.
Exercice 4.23 Utiliser un débogueur pour identifier l’erreur commise dans le programme ci-après. Le
comportement attendu est le suivant : on demande des nombres entiers au clavier tant que la suite des
nombres fournis est strictement croissante. La variable n compte le nombre de valeurs entrées au clavier.
precedent = int(input())
nouveau = int(input())
n = 2
while precedent < nouveau:
nouveau = int(input())
precedent = nouveau
n = n + 1
Un premier test du programme permet de se rendre compte que celui-ci s’arrête dès le troisième nombre
entré. Il n’est donc pas nécessaire de placer des points d’arrêt, on peut suivre l’évolution de precedent et
nouveau sur toute l’exécution du programme.
On voit alors que le problème se pose aux deux premières lignes du corps de la boucle. L’instruction
nouveau = int(input()) écrase la dernière valeur entrée au clavier, puis l’instruction precedent = nouveau
rend forcément fausse la condition de la boucle.
Il faut ici intervertir ces deux lignes pour que la variable precedent mémorise correctement l’avant-dernière
valeur tapée au clavier.
Exercice 4.24 Le programme qui suit se termine-t-il pour toutes les valeurs initiales de c ?
p = 1
if c > 0:
while c != 0:
p = p * 2
c = c - 2
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
103
4 – Instructions : langage minimal de l’algorithmique
SAVOIR-FAIRE Corriger un programme à l’aide d’un débogueur
1 On identifie les variables critiques, dont la valeur peut radicalement influencer
le comportement du programme. En particulier, les variables intervenant dans la
condition d’une instruction while sont particulièrement importantes puisqu’elles
conditionnent le nombre de fois où le corps de cette boucle est exécuté.
2 On identifie, pour chacune de ces variables, les endroits clés du programme qui la
concernent : par exemple, lorsqu’ on lui affecte une valeur, en début ou en fin de
boucle.
3 On crée un point d’arrêt à ces endroits, puis on déroule l’exécution du programme
à l’aide du débogueur et on surveille les valeurs des variables critiques dans l’explorateur de variables.
Voir le chapitre 1 page 30 pour l’utilisation concrète du débogueur de Spyder.
Exercice 4.23 Utiliser un débogueur pour identifier l’erreur commise dans le programme ci-après. Le
comportement attendu est le suivant : on demande des nombres entiers au clavier tant que la suite des
nombres fournis est strictement croissante. La variable n compte le nombre de valeurs entrées au clavier.
precedent = int(input())
nouveau = int(input())
n = 2
while precedent < nouveau:
nouveau = int(input())
precedent = nouveau
n = n + 1
Un premier test du programme permet de se rendre compte que celui-ci s’arrête dès le troisième nombre
entré. Il n’est donc pas nécessaire de placer des points d’arrêt, on peut suivre l’évolution de precedent et
nouveau sur toute l’exécution du programme.
On voit alors que le problème se pose aux deux premières lignes du corps de la boucle. L’instruction
nouveau = int(input()) écrase la dernière valeur entrée au clavier, puis l’instruction precedent = nouveau
rend forcément fausse la condition de la boucle.
Il faut ici intervertir ces deux lignes pour que la variable precedent mémorise correctement l’avant-dernière
valeur tapée au clavier.
Exercice 4.24 Le programme qui suit se termine-t-il pour toutes les valeurs initiales de c ?
p = 1
if c > 0:
while c != 0:
p = p * 2
c = c - 2
