Lire et écrire du pseudo-code
Ce que ce chapitre apporte 6 points
- Dire ce qu'est le pseudo-code et à quoi il sert par rapport au français et à un langage de programmation.
- Connaître la convention d'écriture utilisée dans ce cours : squelette, affectation, entrées et sorties.
- Lire les mots de fin et l'indentation comme une information, et non comme une décoration.
- Reconnaître les trois seules structures dont tout algorithme est fait.
- Dérouler un algorithme à la main dans un tableau de trace, et prédire ce qu'il affiche.
- Repérer les erreurs de lecture les plus courantes, et retrouver dans le mémo de la convention l'équivalent Python de chaque construction.
La consigne de la pompe de relevage, écrite en français pour l'équipe de nuit, doit maintenant être programmée. Une phrase arrête l'automaticien : « si le niveau reste haut, relancer la pompe et prévenir l'astreinte, puis noter l'heure ». L'heure se note-t-elle à chaque fois, ou seulement après une relance ? Le français ne dit pas où finit le « si », et il faudra deviner ou rappeler l'auteur.
Entre « je vois comment faire » et « le programme marche », il y a une étape que tout le monde saute et que tout le monde paie. Le pseudo-code est cette étape : une façon d'écrire un raisonnement assez précise pour qu'une autre personne l'exécute sans avoir à interroger son auteur, mais assez souple pour ne pas se battre avec des points-virgules. Ce chapitre part des trois façons d'enchaîner des étapes, posées au chapitre précédent, qu'est-ce qu'un algorithme, et leur donne une écriture : il pose la convention d'écriture du parcours, que les chapitres suivants compléteront, puis apprend à faire tourner un algorithme dans la tête.
Pourquoi ne pas écrire directement en français ?
Voici une recette écrite en français : « faire chauffer l'eau, ajouter les pâtes, égoutter quand c'est cuit ». Tout le monde comprend, et pourtant rien n'est exécutable. Combien de temps ? À quelle température ? « Quand c'est cuit » veut dire quoi, exactement ?
Le français est ambigu par nature, et c'est sa qualité entre humains. Une machine, elle, n'a aucun moyen de deviner ce qu'on voulait dire.
Le pseudo-code est une écriture intermédiaire : la structure et la rigueur d'un programme, avec le vocabulaire du français. Aucun ordinateur ne l'exécute tel quel, et ce n'est pas son but : on y réfléchit au raisonnement sans se préoccuper de la syntaxe d'un langage particulier. Les figures de ce cours le déroulent pourtant pas à pas, parce que la plateforme connaît la convention décrite plus bas : c'est une aide pour vérifier une trace, pas un langage de plus.
Trois façons d'écrire la même chose :
| Écriture | Ambigu ? | Exécutable ? | |
|---|---|---|---|
| Français | « Afficher le plus grand des deux nombres » | oui | non |
| Pseudo-code | Si a > b Alors Écrire a Sinon Écrire b FinSi | non | non, sauf dans les figures du cours |
| Python | if a > b: print(a)else: print(b) | non | oui |
La ligne du milieu est celle qui compte pour apprendre : elle est précise sans être technique. C'est aussi celle qu'on écrit sur un tableau blanc, ou sur un coin de table avec un collègue. Le tableau l'écrit sur une ligne pour tenir dans sa case ; la convention de ce cours, décrite plus bas, lui donne une ligne par instruction.
Un langage pour les humains. Le pseudo-code n'est pas un langage au rabais : c'est un langage pour les humains, qui impose la rigueur sans imposer la syntaxe. Un algorithme juste en pseudo-code se traduit ensuite dans n'importe quel langage. Un algorithme faux ne devient pas juste parce qu'on l'a écrit en Python.
La convention de ce cours
Il n'existe pas de pseudo-code officiel : chaque école a le sien. Voici celui de ce parcours, que la plateforme sait dérouler. Les chapitres suivants le compléteront, pour les conditions, les tableaux et les fonctions, sans jamais revenir sur ce qui est posé ici. La section « La convention en un coup d'œil », en fin de chapitre, le rassemble en un seul tableau.
Le squelette
Tout algorithme est encadré par Début et Fin. Ce qui est entre les deux est le corps de l'algorithme, décalé d'un cran vers la droite.
Ce qui suit // est un commentaire : il explique, il ne fait rien. Il occupe une ligne entière, ou la fin d'une ligne d'instruction.
Ce qu'est une variable, en une minute
Un algorithme a besoin de retenir des choses au fur et à mesure : la valeur qu'on vient de demander, un total en cours de constitution, le relevé le plus élevé rencontré jusqu'ici.
Une variable est l'endroit où l'on range une de ces choses. C'est une boîte munie d'une étiquette : l'étiquette est le nom, et l'on peut à tout moment regarder ce qu'il y a dedans, ou remplacer le contenu par autre chose. Dans ce cours, un nom s'écrit en minuscules, sans accent ni espace : prenom, stock, temperature_max.
Trois mots suffisent pour la suite de ce chapitre : une variable porte un nom, elle contient une valeur, et cette valeur peut changer. Le chapitre suivant lui est consacré tout entier et reviendra sur ce qu'elle peut contenir, et sur les erreurs qu'elle provoque.
Ranger une valeur : la flèche
programme principal
stock ← 20 ne dit pas « stock est égal à 20 », mais « ranger 20 dans la boîte nommée stock ». C'est une action, orientée de droite à gauche. On peut donc écrire stock ← stock + 5, qui serait absurde comme égalité mathématique et qui veut simplement dire « remplacer le contenu de stock par ce contenu augmenté de 5 ».
Le signe = est réservé aux comparaisons, dans les conditions. Une ligne stock = 20 ne range rien : les figures la refusent, en signalant la flèche qui manque.
La flèche ← n'est sur aucun clavier. Dans l'éditeur des exercices, elle se tape <-, deux caractères que la plateforme lit exactement comme la flèche ; les deux écritures sont acceptées partout, et le cours imprime la flèche.
Faire entrer et sortir des données
Lire demande une valeur à l'utilisateur et la range dans une variable. Écrire affiche.
programme principal
aucune variable
Ce que Écrire a affiché
Prénom ?Dans les figures, Lire prend ses valeurs dans le champ « Ce que Lire reçoit », placé sous les commandes de déroulement : y écrire d'autres valeurs, séparées par des virgules, puis redérouler, montre ce que devient l'algorithme avec d'autres données.
Ce qui est entre guillemets est du texte affiché tel quel. Ce qui n'y est pas est calculé : le nom d'une variable donne son contenu, une expression comme a + b donne son résultat. Confondre les deux est une erreur très répandue au début :
programme principal
1.Que fait la ligne total ← total + 1 ?
2.Écrire "total" et Écrire total affichent quoi ?
L'indentation dit ce qui est à l'intérieur de quoi
Décaler une ligne vers la droite n'est pas de la mise en page. Dans ce cours, un bloc est délimité deux fois : par son mot de fin (FinSi, FinPour, FinTantQue), qui fait foi, et par le décalage des lignes qu'il contient, qui le rend visible. Les deux doivent dire la même chose : un décalage qui contredit le mot de fin ne change pas ce que fait l'algorithme, mais il trompe celui qui le lit. Python, qui n'a pas de mot de fin, ne garde que le décalage, et là-bas déplacer une ligne d'un cran change vraiment le programme.
programme principal
Écrire décalés, et le cadre « Ce que Écrire a affiché » reçoit trois lignes en cinq pas. Remplacer ensuite 85 par 40 dans le champ « Ce que Lire reçoit », puis dérouler de nouveau en notant les numéros des lignes surlignées : le compteur s'arrête à trois pas au lieu de cinq, le surlignage saute de la ligne 3 à la ligne 7, et seul « Relevé enregistré » s'affiche. Essayer enfin 80 : les trois lignes reviennent, parce que la condition est « supérieur ou égal » et que la borne compte.
Les deux Écrire décalés sont dans le Si : ils ne s'exécutent que si la température atteint 80. Le dernier Écrire, placé après le FinSi et revenu au niveau du Si, s'exécute dans tous les cas. Faire passer cette ligne au-dessus du FinSi, et l'algorithme change de sens.
Les figures du cours aident à cette lecture : leurs lignes sont numérotées, et un filet vertical marque chaque niveau d'imbrication. Suivre un filet du regard montre où un bloc commence et où il finit ; c'est le réflexe à prendre avant de lire le détail des instructions.
À quoi sert l'indentation dans un algorithme ?
Les trois seules structures
Le chapitre précédent l'a posé : tout algorithme se construit avec trois structures, et rien d'autre. Voici leur écriture en pseudo-code.
1. La séquence : les unes après les autres
programme principal
L'ordre compte. Inverser les deux premières lignes ne change rien ici, mais déplacer le calcul avant les lectures arrêterait l'algorithme : au moment du calcul, a et b n'existent pas encore.
2. Le choix : selon le cas
programme principal
Une seule des deux branches s'exécute, jamais les deux. FinSi referme le bloc : sans lui, on ne saurait pas où s'arrête le choix, et les figures refusent d'ailleurs un Si jamais refermé.
Le même choix, dans l'autre notation. Le losange correspond au Si, les deux chemins aux deux branches, et le point où ils se rejoignent correspond au FinSi. Les deux écritures disent la même chose.
3. La répétition : plusieurs fois
Quand on sait combien de fois :
programme principal
Quand on sait seulement jusqu'à quand :
programme principal
La saisie est redemandée tant qu'elle est négative ou nulle. Avec -3, 0 puis 8, le message s'affiche deux fois avant que 8 soit accepté : le zéro est refusé, parce que la condition écrit <= 0 et non < 0.
Lire la structure avant le détail. Quand un algorithme paraît compliqué, chercher d'abord les trois structures : ce qui s'enchaîne, ce qui choisit (Si), ce qui se répète (Pour, TantQue). Les mots de fin et les filets verticaux les délimitent, et une structure apparaît là où l'on ne voyait qu'un mur de texte.
Quand employer un Pour plutôt qu'un TantQue ?
Faire tourner un algorithme à la main
Lire un algorithme ne suffit pas : il faut savoir le dérouler, c'est-à-dire jouer le rôle de la machine, une ligne à la fois, en notant ce que devient chaque variable. Ce relevé s'appelle une trace d'exécution. Il remplace ce qui semble écrit par ce que l'algorithme fait vraiment, et c'est pour cela qu'il répond à la plupart des « je ne comprends pas pourquoi ça ne marche pas ».
programme principal
Le tableau se construit avec une colonne par variable et une ligne chaque fois qu'une instruction s'exécute. Pour une boucle aussi courte, une ligne par tour suffit, à condition d'y noter l'état de toutes les variables à la fin du tour :
| Étape | i | somme | Commentaire |
|---|---|---|---|
| avant la boucle | (n'existe pas) | 0 | initialisation |
| tour 1 | 1 | 1 | 0 + 1 |
| tour 2 | 2 | 3 | 1 + 2 |
| tour 3 | 3 | 6 | 3 + 3 |
| tour 4 | 4 | 10 | 6 + 4 |
| après la boucle | 4 | 10 | affiché : 10 |
La dernière ligne mérite un regard : après la boucle, i ne disparaît pas, il garde la dernière valeur qu'il a reçue. La figure ci-dessus déroule le même algorithme instruction par instruction ; à chaque pas, elle surligne la ligne exécutée et donne la valeur de chaque variable. Elle compte onze pas là où le tableau compte six lignes, et les quatre tours s'y retrouvent aux pas 3, 5, 7 et 9. Construire d'abord le tableau à la main, puis avancer dans la figure et comparer : un désaccord désigne l'endroit exact où le raisonnement s'est écarté de l'algorithme.
Une colonne par variable ; une ligne par instruction exécutée, ou par tour pour une boucle courte. Ne rien anticiper : ne sauter aucun tour sous prétexte qu'« on voit bien ce que ça fait ». C'est justement dans le tour sauté que se cache l'erreur.
Dans un tableau de trace, à quoi correspond une colonne ?
Trois erreurs de lecture courantes
Écrire "total" affiche le mot total. Écrire total affiche son contenu. Les guillemets changent tout.
Dans Pour i de 1 à 5, c'est la boucle qui fait avancer i, d'elle-même, au début de chaque tour. Ajouter un i ← i + 1 dans le corps ne fait donc pas ce qu'il semble dire : le Pour rétablit son compteur au tour suivant, et le nombre de tours ne change pas.
programme principal
La figure fait bien cinq tours, mais elle affiche 2, 3, 4, 5 et 6, alors que l'en-tête annonce 1 à 5 : plus personne ne peut dire d'un coup d'œil ce que vaut i à une ligne donnée. Python se comporte comme ce cours ; d'autres langages, comme le C ou Java, laisseraient au contraire la ligne ajoutée faire sauter une valeur sur deux. La ligne est donc à proscrire partout. Le compteur d'un Pour se lit, il ne s'écrit pas ; un compteur que le corps doit faire avancer lui-même appelle un TantQue.
programme principal
x ne bouge pas : la condition reste vraie pour toujours et l'algorithme n'en sort jamais. La figure s'interrompt d'elle-même au-delà de 500 pas, avec un message qui le dit. Avant d'écrire un TantQue, une question se pose : qu'est-ce qui, dans le corps de la boucle, finira par rendre la condition fausse ?
La convention en un coup d'œil
Ce tableau rassemble toutes les constructions que la plateforme sait dérouler, le chapitre qui les introduit, et leur équivalent en Python, le langage vers lequel mène le parcours après Flowgorithm, le logiciel d'organigrammes. Il se relit au fil des chapitres : chaque ligne s'éclaire au moment où son chapitre arrive.
| Pseudo-code | Ce que cela fait | Chapitre | Python |
|---|---|---|---|
Début … Fin | encadre l'algorithme | 2 | rien : le programme commence à sa première ligne |
// commentaire | explique, n'exécute rien | 2 | # commentaire |
x ← 5, tapé x <- 5 | range 5 dans x | 2 | x = 5 |
a = b | compare : vrai si a égale b | 2 | a == b |
Lire x | range dans x la valeur saisie | 2 | x = int(input()), ou float(input()) pour un réel |
Lire a, b | deux saisies d'un coup | 3 | deux lignes input() |
Écrire "Total : ", t | affiche les morceaux, collés | 2 | print("Total :", t) |
+, -, *, / | calculent ; 7 / 2 vaut 3,5 | 3 | +, -, *, / |
a DIV b, a MOD b | quotient entier et reste | 3 | a // b, a % b |
Vrai, Faux | les deux valeurs booléennes | 3 | True, False |
<>, <, <=, >, >= | différent, inférieur, supérieur | 4 | !=, <, <=, >, >= |
ET, OU, NON | combinent des conditions | 4 | and, or, not |
Si c Alors … Sinon … FinSi | exécute une branche sur deux | 2 | if c: … else: |
SinonSi c Alors | teste le cas suivant | 4 | elif c: |
Pour i de 1 à n … FinPour | n tours, bornes comprises | 2 | for i in range(1, n + 1): |
Pour i de n à 1 pas -1 | compte à rebours | 5 | for i in range(n, 0, -1): |
TantQue c … FinTantQue | répète tant que c est vraie | 2 | while c: |
Répéter … Jusqu'à c | répète au moins une fois, jusqu'à ce que c soit vraie | 5 | pas d'équivalent direct |
t ← [12, 15, 18], t ← tableau[5] | un tableau de valeurs, ou de cinq cases vides | 6 | t = [12, 15, 18], t = [None] * 5 |
t[i] | la case numéro i, la première étant t[1] | 6 | t[i - 1], la première étant t[0] |
longueur(t) | le nombre de cases | 6 | len(t) |
Fonction f(a) … Retourner r … FinFonction | une fonction qui rend r | 7 | def f(a): … return r |
Quatre pièges de la traduction
À quatre points près, la traduction en Python est mécanique.
- Le signe
=change de rôle. Python écrit l'affectation avec=, celui-là même que le pseudo-code réserve aux comparaisons ; une comparaison d'égalité s'y écrit==. input()rend toujours un texte. Pour lire un nombre, il faut le convertir,int(input())pour un entier,float(input())pour un réel, faute de quoi la première comparaison ou le premier calcul échoue.printsépare ses morceaux par un espace, là oùÉcrireles colle :Écrire "Total : ", tdevientprint("Total :", t).- Les cases d'un tableau sont numérotées à partir de 0 en Python, et à partir de 1 ici :
t[1]se traduitt[0].
Quant au décalage des lignes, que le pseudo-code tient par convention, Python l'impose : les habitudes prises ici se paieront directement là-bas.
Les règles que suivent les figures
Les figures déroulent le pseudo-code selon des règles précises, que les chapitres suivants mettent en scène une à une. Les voici réunies.
- Une variable naît à sa première affectation. La lire avant arrête l'algorithme, avec le message « n'existe pas ici ». Aucun type n'est déclaré : le type est celui de la valeur rangée, et c'est l'opération qui échoue quand les types ne vont pas ensemble.
n ← "10"passe,n + 5arrête l'algorithme. Lirerange un nombre quand on saisit un nombre, un texte sinon ; un nombre saisi entre guillemets reste un texte. Python, lui, rend toujours un texte.- Le compteur d'un
Pourappartient à la boucle. LePourle rétablit au début de chaque tour, si bien qu'une affectation au compteur dans le corps ne change pas le nombre de tours. Après la boucle, le compteur garde la dernière valeur prise. - Les tableaux commencent à la case 1. Un tableau créé avec sa taille,
t ← tableau[5], ou avec ses valeurs,t ← [12, 15, 18], a un nombre de cases fixé : lire ou écrire au-delà arrête l'algorithme. Un tableau qui naît de sa première case,t[1] ← 7sans rien avant, grandit à mesure qu'on le remplit. - Une fonction travaille sur des copies. Un tableau passé en paramètre est copié, et une fonction ne voit pas les variables du programme principal. Python, qui partage le tableau et laisse lire les variables du programme, diffère sur ces deux points, et Flowgorithm partage lui aussi les tableaux ; le chapitre 7 y revient.
- Les fonctions s'écrivent avant
Début, etRetournerest le seul mot qui rend une valeur. Employé seul, sans valeur, il arrête la fonction. DIVrend le quotient entier etMODle reste, comme//et%en Python, nombres négatifs compris./fait la division exacte :7 / 2vaut 3,5, là où7 DIV 2vaut 3.ETn'évalue pas sa droite quand sa gauche est fausse, etOUpas quand sa gauche est vraie. C'est ce qui permet d'écrirei <= longueur(t) ET t[i] > 0sans jamais lire hors du tableau.- Un nombre décimal s'écrit avec un point dans le code,
3.14, et la virgule sépare toujours : les morceaux d'unÉcrire, les valeurs d'un tableau, les arguments d'une fonction. Les figures affichent en revanche les résultats à la française,3,14. - Les mots-clés s'écrivent comme dans le tableau,
ET,OUetNONen majuscules. Un mot d'une autre convention,AfficherouRenvoyer, est refusé avec un message qui donne le mot du cours. Au-delà de 500 pas, un déroulement s'interrompt : c'est presque toujours une boucle qui ne s'arrête pas.
Mettre en pratique
Des traces à tenir jusqu'au bout et des tours à compter, sur des algorithmes qui n'ont pas de figure : seul le tableau de trace y mène.
Prévoir avant de dérouler
- 1.
Après
a ← 5,b ← 2,a ← a + b,b ← a - beta ← a - b, exécutées dans cet ordre, que vauta? - 2.
L'algorithme de la quantité, celui dont le
TantQueredemande la saisie, reçoit -2, 0, -5, 0 puis 7. Combien de fois affiche-t-il « Saisir une quantité strictement positive » ? - 3.
Combien de tours fait la boucle
Pour jour de 3 à 10? - 4.
Après
somme ← 0, la bouclePour i de 1 à 6, dont le corps estsomme ← somme + i, se termine. Que vautsomme? - 5.
Après
x ← 1, la boucleTantQue x <= 10, dont le corps estx ← x + 4, se termine. Que vautx?
Que produit cet algorithme ? Dérouler chaque ligne dans un tableau de trace et prévoir l'affichage, puis dérouler la figure pour le vérifier.
programme principal
Le corrigé
Trace d'exécution, les numéros de ligne étant ceux affichés à gauche de l'algorithme :
| Étape | a | b |
|---|---|---|
| après la ligne 2 | 3 | (n'existe pas) |
| après la ligne 3 | 3 | 4 |
| après la ligne 4 | 7 | 4 |
| après la ligne 5 | 7 | 3 |
Résultat attendu :
Sortie : 7 3
Explication : l'algorithme échange presque les deux valeurs. b a bien récupéré l'ancienne valeur de a, mais a contient encore la somme. Il faudrait une troisième affectation, a ← a - b, pour terminer l'échange et obtenir 4 3. Ce détour par la somme ne marche qu'avec des nombres ; le chapitre suivant montre un échange qui marche avec n'importe quelle valeur.
Cet algorithme doit afficher la somme des entiers de 1 à n. Il ne fonctionne pas : trouver les deux défauts et le corriger.
programme principal
Le corrigé
Deux défauts :
in'est jamais initialisée : la condition duTantQuelit une variable qui n'existe pas encore, et la figure s'arrête dès la ligne 4.in'est jamais modifiée dans la boucle : même initialisée, la boucle ne s'arrêterait pas.
Version corrigée :
programme principal
Résultat attendu :
Entrée : 5
Sortie : 15
Écrire un algorithme qui lit un entier et affiche s'il est pair ou impair. On dispose de l'opérateur MOD, qui donne le reste de la division entière : 17 MOD 5 vaut 2.
programme principal
Explication : un nombre est pair si le reste de sa division par 2 vaut 0. Le = de la condition compare, il ne range rien.
Résultat attendu :
Entrée : 12
Sortie : 12 est pair
Chapitre révisé en octobre 2026 · Une erreur dans ce chapitre ?
Dans la bibliothèque d'exercices
Lire un problème en français, écrire l'algorithme qui le résout, et le faire exécuter dans la page.
- La somme de deux nombres2 · Appliquer
- Le plus grand des deux2 · Appliquer
- Pair ou impair2 · Appliquer
- La table de multiplication3 · Combiner
- Des secondes en heures, minutes, secondes3 · Combiner
- La somme des premiers entiers3 · Combiner
- Compter ce qui dépasse le seuil4 · Analyser
- Le maximum d'une série4 · Analyser
- Deux boucles, l'une dans l'autre2 · Appliquer