Aller au contenu principal

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.

Définition

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 :

ÉcritureAmbigu ?Exécutable ?
Français« Afficher le plus grand des deux nombres »ouinon
Pseudo-codeSi a > b Alors Écrire a Sinon Écrire b FinSinonnon, sauf dans les figures du cours
Pythonif a > b: print(a)
else: print(b)
nonoui

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.

Algorithme
Début
// les instructions vont ici, dans l'ordre
Fin

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

Algorithme
pas 1 / 3
Début
stock ← 20
piece ← "vis M6"
stock ← stock + 5
Fin

programme principal

stock20
La flèche n'est pas un égal

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.

Algorithme
pas 1 / 3
séparées par des virgules, décimales au point
Début
Écrire "Prénom ?"
Lire prenom
Écrire "Bonjour ", prenom, " !"
Fin

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 :

Algorithme
pas 1 / 3
Début
prenom ← "Lina"
Écrire "prenom" // affiche : prenom
Écrire prenom // affiche : Lina
Fin

programme principal

prenom"Lina"
Vérification rapideon peut se reprendre

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.

Algorithme
pas 1 / 5
séparées par des virgules, décimales au point
Début
Lire temperature
Si temperature >= 80 Alors
Écrire "Alerte"
Écrire "Arrêt de la pompe"
FinSi
Écrire "Relevé enregistré"
Fin

programme principal

temperaturesaisi85
À manipuler
Cliquer sur « dérouler » avec la valeur proposée, 85 : la ligne surlignée passe par les deux É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.

Vérification rapideon peut se reprendre

À 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

Algorithme
pas 1 / 4
séparées par des virgules, décimales au point
Début
Lire a
Lire b
somme ← a + b
Écrire "Somme = ", somme
Fin

programme principal

asaisi7

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

Algorithme
pas 1 / 4
séparées par des virgules, décimales au point
Début
Lire stock
Si stock >= 10 Alors
Écrire "Stock suffisant"
Sinon
Écrire "Réapprovisionner"
FinSi
Fin

programme principal

stocksaisi4

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é.

Organigramme
FauxVraiDébutLire stockstock >= 10Afficher "Réapprovisionner"Afficher "Stock suffisant"Fin

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 :

Algorithme
pas 1 / 11
Début
Pour i de 1 à 5
Écrire "Tour numéro ", i
FinPour
Fin

programme principal

i1

Quand on sait seulement jusqu'à quand :

Algorithme
pas 1 / 9
séparées par des virgules, décimales au point
Début
Lire quantite
TantQue quantite <= 0
Écrire "Saisir une quantité strictement positive"
Lire quantite
FinTantQue
Écrire "Quantité enregistrée : ", quantite
Fin

programme principal

quantitesaisi-3

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.

Vérification rapideon peut se reprendre

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 ».

Algorithme
pas 1 / 11
Début
somme ← 0
Pour i de 1 à 4
somme ← somme + i
FinPour
Écrire somme
Fin

programme principal

somme0

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 :

ÉtapeisommeCommentaire
avant la boucle(n'existe pas)0initialisation
tour 1110 + 1
tour 2231 + 2
tour 3363 + 3
tour 44106 + 4
après la boucle410affiché : 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.

La règle du tableau de trace

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.

Vérification rapideon peut se reprendre

Dans un tableau de trace, à quoi correspond une colonne ?

Trois erreurs de lecture courantes

Confondre la valeur et le nom

Écrire "total" affiche le mot total. Écrire total affiche son contenu. Les guillemets changent tout.

Modifier le compteur d'un Pour

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.

Algorithme
pas 1 / 16
Début
Pour i de 1 à 5
i ← i + 1
Écrire i
FinPour
Fin

programme principal

i1

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.

Écrire un TantQue dont la condition ne change jamais
Algorithme
pas 1 / 501
Début
x ← 1
TantQue x <= 10
Écrire x
FinTantQue
Fin

programme principal

x1

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-codeCe que cela faitChapitrePython
Début … Finencadre l'algorithme2rien : le programme commence à sa première ligne
// commentaireexplique, n'exécute rien2# commentaire
x ← 5, tapé x <- 5range 5 dans x2x = 5
a = bcompare : vrai si a égale b2a == b
Lire xrange dans x la valeur saisie2x = int(input()), ou float(input()) pour un réel
Lire a, bdeux saisies d'un coup3deux lignes input()
Écrire "Total : ", taffiche les morceaux, collés2print("Total :", t)
+, -, *, /calculent ; 7 / 2 vaut 3,53+, -, *, /
a DIV b, a MOD bquotient entier et reste3a // b, a % b
Vrai, Fauxles deux valeurs booléennes3True, False
<>, <, <=, >, >=différent, inférieur, supérieur4!=, <, <=, >, >=
ET, OU, NONcombinent des conditions4and, or, not
Si c Alors … Sinon … FinSiexécute une branche sur deux2if c: … else:
SinonSi c Alorsteste le cas suivant4elif c:
Pour i de 1 à n … FinPourn tours, bornes comprises2for i in range(1, n + 1):
Pour i de n à 1 pas -1compte à rebours5for i in range(n, 0, -1):
TantQue c … FinTantQuerépète tant que c est vraie2while c:
Répéter … Jusqu'à crépète au moins une fois, jusqu'à ce que c soit vraie5pas d'équivalent direct
t ← [12, 15, 18], t ← tableau[5]un tableau de valeurs, ou de cinq cases vides6t = [12, 15, 18], t = [None] * 5
t[i]la case numéro i, la première étant t[1]6t[i - 1], la première étant t[0]
longueur(t)le nombre de cases6len(t)
Fonction f(a) … Retourner r … FinFonctionune fonction qui rend r7def 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.
  • print sépare ses morceaux par un espace, là où Écrire les colle : Écrire "Total : ", t devient print("Total :", t).
  • Les cases d'un tableau sont numérotées à partir de 0 en Python, et à partir de 1 ici : t[1] se traduit t[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 + 5 arrête l'algorithme.
  • Lire range 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 Pour appartient à la boucle. Le Pour le 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] ← 7 sans 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, et Retourner est le seul mot qui rend une valeur. Employé seul, sans valeur, il arrête la fonction.
  • DIV rend le quotient entier et MOD le reste, comme // et % en Python, nombres négatifs compris. / fait la division exacte : 7 / 2 vaut 3,5, là où 7 DIV 2 vaut 3.
  • ET n'évalue pas sa droite quand sa gauche est fausse, et OU pas quand sa gauche est vraie. C'est ce qui permet d'écrire i <= longueur(t) ET t[i] > 0 sans 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, OU et NON en majuscules. Un mot d'une autre convention, Afficher ou Renvoyer, 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 - b et a ← a - b, exécutées dans cet ordre, que vaut a ?

  • 2.

    L'algorithme de la quantité, celui dont le TantQue redemande 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 boucle Pour i de 1 à 6, dont le corps est somme ← somme + i, se termine. Que vaut somme ?

  • 5.

    Après x ← 1, la boucle TantQue x <= 10, dont le corps est x ← x + 4, se termine. Que vaut x ?

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.
Algorithme
pas 1 / 5
Début
a ← 3
b ← 4
a ← a + b
b ← a - b
Écrire a, " ", b
Fin

programme principal

a3
Le corrigé

Trace d'exécution, les numéros de ligne étant ceux affichés à gauche de l'algorithme :

Étapeab
après la ligne 23(n'existe pas)
après la ligne 334
après la ligne 474
après la ligne 573

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.
Algorithme
pas 1 / 3
séparées par des virgules, décimales au point
Début
Lire n
somme ← 0
TantQue i <= n
somme ← somme + i
FinTantQue
Écrire somme
Fin

programme principal

nsaisi5
Le corrigé

Deux défauts :

  1. i n'est jamais initialisée : la condition du TantQue lit une variable qui n'existe pas encore, et la figure s'arrête dès la ligne 4.
  2. i n'est jamais modifiée dans la boucle : même initialisée, la boucle ne s'arrêterait pas.

Version corrigée :

Algorithme
pas 1 / 20
séparées par des virgules, décimales au point
Début
Lire n
somme ← 0
i ← 1
TantQue i <= n
somme ← somme + i
i ← i + 1
FinTantQue
Écrire somme
Fin

programme principal

nsaisi5

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.
Algorithme
pas 1 / 3
séparées par des virgules, décimales au point
Début
Lire n
Si n MOD 2 = 0 Alors
Écrire n, " est pair"
Sinon
Écrire n, " est impair"
FinSi
Fin

programme principal

nsaisi12

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