Bonjour ! Bienvenue dans cette cinquième leçon. Nous allons aujourd'hui nous attaquer à une compétence fondamentale qui va vous servir tout au long de votre parcours, de l'algorithmique jusqu'au développement Java : le traçage manuel.
Introduction
Dans la leçon précédente, vous avez appris à construire des expressions arithmétiques et logiques. Vous savez maintenant comment demander à un algorithme d'effectuer un calcul (prix * 1.2) ou de vérifier une condition (age >= 18).
Mais comment être certain que ces instructions s'exécutent comme prévu et dans le bon ordre ? Comment "voir" ce qui se passe à l'intérieur de l'algorithme ?
L'objectif de cette leçon est de vous apprendre à tracer manuellement l'exécution d'un algorithme simple pour en suivre le déroulement. C'est un peu comme si vous preniez la place de l'ordinateur, un crayon à la main, pour exécuter le programme ligne par ligne. C'est une méthode infaillible pour comprendre la logique d'un algorithme, vérifier son exactitude et, surtout, trouver des erreurs.
Cette compétence est directement liée à votre objectif d'écrire du "code clean" : un code que l'on comprend bien est un code plus facile à maintenir et à corriger.
1. Qu'est-ce que le traçage manuel ?
Tracer un algorithme, c'est simuler son exécution étape par étape, en notant méticuleusement la valeur de chaque variable à chaque instant. L'outil principal pour cela est le tableau de suivi d'exécution (ou table de traçage).
Un tableau de suivi simple contient :
- Une colonne pour chaque variable de l'algorithme.
- Parfois, une colonne supplémentaire pour noter ce qui est affiché à l'écran (la "Sortie").
- Chaque ligne du tableau représente l'état des variables après l'exécution d'une instruction.
2. Tracer un algorithme séquentiel simple
Commençons par un exemple très simple, sans condition ni boucle.
Algorithme CalculCercle
Variables
rayon : Réel
aire : Réel
Début
Afficher("Saisir le rayon du cercle :")
Lire(rayon)
aire ← 3.14 * rayon * rayon
Afficher("L'aire du cercle est : ", aire)
Fin
Maintenant, traçons son exécution. Imaginons que l'utilisateur saisisse la valeur 10 pour le rayon. Voici le tableau de suivi :
| Instruction exécutée | rayon |
aire |
Sortie à l'écran |
|---|---|---|---|
| Initialisation | ? | ? | |
Afficher(...) |
? | ? | Saisir le rayon du cercle : |
Lire(rayon) |
10 | ? | |
aire ← 3.14 * rayon * rayon |
10 | 314 | |
Afficher(...) |
10 | 314 | L'aire du cercle est : 314 |
Au début, les valeurs des variables sont inconnues (notées ?). Chaque instruction met à jour soit une variable, soit l'affichage. Simple, n'est-ce pas ?
3. Tracing a Conditional Structure
Les choses deviennent plus intéressantes avec des conditions. Le chemin d'exécution change en fonction des données. Prenons l'algorithme suivant qui calcule la valeur absolue d'une différence.
Traçons-le pour deux scénarios différents (deux "jeux d'essai").
Jeu d'essai 1 : a = 7, b = 4
| Instruction | Condition | a |
b |
d |
|---|---|---|---|---|
Lire(a, b) |
7 | 4 | ? | |
si (a > b) |
7 > 4 est VRAI |
|||
d ← a - b |
7 | 4 | 3 | |
Afficher(d) |
7 | 4 | 3 |
Jeu d'essai 2 : a = 5, b = 9
| Instruction | Condition | a |
b |
d |
|---|---|---|---|---|
Lire(a, b) |
5 | 9 | ? | |
si (a > b) |
5 > 9 est FAUX |
|||
d ← b - a |
(on exécute le sinon) |
5 | 9 | 4 |
Afficher(d) |
5 | 9 | 4 |
Vous voyez que selon la condition, nous ne suivons pas le même chemin. Le traçage nous permet de visualiser ce flux.
4. Tracing a Loop
Les boucles sont là où le traçage devient indispensable. Une petite erreur peut faire tourner la boucle une fois de trop, ou pas assez, ou même à l'infini !
Pour découvrir la méthode appliquée aux boucles, je vous propose d'étudier deux excellents exemples.
Pré-requis ---- Les notions de base de l'algorithmique
Ce premier document montre comment tracer une boucle qui calcule la somme des premiers entiers. C'est un exemple classique et très clair.
Allez à la section 3.1, 'Itération simple'. Étudiez l'algorithme 'Programme Somme'. Juste en dessous, analysez le tableau de suivi pour l'entrée n=5. Suivez l'évolution des variables 'i' et 's' à chaque 'Itération' (chaque passage dans la boucle). Ensuite, la lecture rapide de la section D, 'Vérification et preuve', vous confirmera l'importance de cette méthode.
Ce second document présente un autre exemple, cette fois avec une boucle 'tant que'. Le principe est le même, mais la condition est vérifiée au début de chaque tour.
Lisez d'abord l'algorithme de l'Exemple 5 (dans la section 1.8.1). Puis, lisez la section 1.9 'Exécution « manuelle » d’un algorithme'. Vous y trouverez un tableau de suivi détaillé qui trace l'exécution de cet algorithme pour les entrées a=17 et b=4. C'est une démonstration parfaite de la méthode.
La méthode pour tracer une boucle :
- Initialisez votre tableau avec les valeurs des variables avant la boucle.
- Avant chaque tour de boucle, évaluez la condition de la boucle.
- Si la condition est vraie, exécutez les instructions du corps de la boucle une par une, en mettant à jour les valeurs dans une nouvelle ligne (ou un nouveau groupe de lignes) de votre tableau.
- Revenez à l'étape 2 et répétez.
- Si la condition est fausse, sortez de la boucle et continuez avec les instructions qui suivent.
5. À vous de jouer !
La meilleure façon d'apprendre est de pratiquer. Voici deux algorithmes "mystères". Votre mission est de les tracer pour découvrir ce qu'ils font.
Exercice 1
Que fait l'algorithme suivant ? Prenez un papier et un crayon, et tracez son exécution avec les valeurs d'entrée a = 5 et b = 8.
Algorithme mystèreADécouvrir
Variables
a, b : Entier
Début
Entrer(a, b)
a ← a + b
b ← a - b
a ← a - b
Afficher(a, b)
Fin
Cliquez ici pour voir la solution
Voici la table de traçage pour a = 5 et b = 8 :
| Instruction | a |
b |
Sortie |
|---|---|---|---|
| Initialisation | ? | ? | |
Entrer(a, b) |
5 | 8 | |
a ← a + b |
13 | 8 | |
b ← a - b |
13 | 5 | (b devient 13 - 8) |
a ← a - b |
8 | 5 | (a devient 13 - 5) |
Afficher(a, b) |
8 | 5 | "8, 5" |
Conclusion : Cet algorithme échange les valeurs des variables a et b !
Exercice 2
Celui-ci est un peu plus complexe, il contient une boucle et une condition. Tracez-le avec les valeurs d'entrée a = 5 et b = 3.
Algorithme mystèreBoucle1
Variables
a, b, c : Entier
Début
Entrer(a, b)
c ← 0
tantque (a ≠ 0) faire
si ((a MOD 2) ≠ 0) alors
c ← c + b
fin_si
a ← a div 2
b ← b * 2
fin_tantque
Afficher(c)
Fin
Cliquez ici pour voir la solution
Voici la table de traçage pour a = 5 et b = 3 :
| Instruction | Condition (a ≠ 0) ? | Condition (a MOD 2 ≠ 0) ? | a |
b |
c |
Sortie |
|---|---|---|---|---|---|---|
| Initialisation | ? | ? | ? | |||
Entrer(a, b) |
5 | 3 | ? | |||
c ← 0 |
5 | 3 | 0 | |||
| Début boucle 1 | 5≠0 (VRAI) | |||||
si ... |
5 MOD 2 ≠ 0 (VRAI) | |||||
c ← c + b |
5 | 3 | 3 | |||
a ← a div 2 |
2 | 3 | 3 | |||
b ← b * 2 |
2 | 6 | 3 | |||
| Début boucle 2 | 2≠0 (VRAI) | |||||
si ... |
2 MOD 2 ≠ 0 (FAUX) | |||||
a ← a div 2 |
1 | 6 | 3 | |||
b ← b * 2 |
1 | 12 | 3 | |||
| Début boucle 3 | 1≠0 (VRAI) | |||||
si ... |
1 MOD 2 ≠ 0 (VRAI) | |||||
c ← c + b |
1 | 12 | 15 | |||
a ← a div 2 |
0 | 12 | 15 | |||
b ← b * 2 |
0 | 24 | 15 | |||
| Début boucle 4 | 0≠0 (FAUX) | |||||
Afficher(c) |
0 | 24 | 15 | "15" |
Conclusion : Cet algorithme calcule le produit de a et b (5 * 3 = 15). C'est une ancienne méthode de multiplication, connue sous le nom de "multiplication égyptienne".
Résumé de la leçon
Félicitations pour avoir complété cette leçon ! C'est une compétence qui demande de la rigueur, mais qui est extrêmement gratifiante.
- Tracer un algorithme, c'est l'exécuter manuellement ligne par ligne.
- Le tableau de suivi est l'outil essentiel pour garder une trace de la valeur de chaque variable.
- Le traçage permet de comprendre le flux d'exécution, en particulier avec les conditions (
si...sinon) et les boucles (tantque,pour). - C'est la technique de base pour vérifier la correction d'un algorithme et pour débugger (trouver et corriger les erreurs).
Et après ?
Vous avez maintenant assemblé toutes les pièces du puzzle des fondamentaux. Vous connaissez les variables, les expressions et vous savez comment suivre une exécution. Dans la prochaine leçon, nous mettrons tout cela en pratique en apprenant à concevoir un algorithme séquentiel simple pour résoudre un problème de calcul, comme le calcul d'une moyenne. Vous passerez du statut d'analyste à celui de concepteur d'algorithmes