Aller au contenu principal

Lire et écrire du pseudo-code

Ce que ce chapitre apporte6 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 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 fréquentes.

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 fixe la convention utilisée dans tout le parcours, puis apprend à faire tourner un algorithme dans la tête.

Pourquoi ne pas écrire directement en français ?

Écrivons une recette en français : « fais chauffer l'eau, ajoute les pâtes, égoutte 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. Il ne s'exécute sur aucune machine, et c'est volontaire. On y réfléchit au raisonnement sans se préoccuper de la syntaxe d'un langage particulier.

Trois façons d'écrire la même chose :

ÉcritureAmbigu ?Exécutable ?
Français« Affiche le plus grand des deux nombres »ouinon
Pseudo-codeSi a > b Alors Écrire a Sinon Écrire b FinSinonnon
Pythonprint(a if a > b else b)nonoui

La colonne du milieu est celle qui compte pour apprendre : elle est précise sans être technique. C'est aussi celle qu'on écrit au tableau, ou sur un coin de table avec un collègue.

À retenir

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 utilisé dans tous les chapitres qui suivent. L'apprendre une fois, il ne changera plus.

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

Une ligne qui commence par // est un commentaire : elle explique, elle ne fait rien.

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 plus grand nombre 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.

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
age 20
nom "Lina"
total age + 5
Fin

programme principal

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

age ← 20 ne dit pas « age est égal à 20 », mais « mets 20 dans la boîte nommée age ». C'est une action, orientée de droite à gauche. On peut donc écrire total ← total + 1, qui serait absurde comme égalité mathématique et qui veut simplement dire « remplace le contenu de total par son contenu augmenté de 1 ».

Le signe = est réservé aux comparaisons, dans les conditions.

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 "Quel est ton prénom ?"
Lire prenom
Écrire "Bonjour ", prenom, " !"
Fin

programme principal

aucune variable

Ce que Écrire a affiché

Quel est ton prénom ?

Ce qui est entre guillemets est du texte affiché tel quel. Ce qui n'y est pas est le contenu d'une variable. La différence est la source d'erreur numéro un des débutants :

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

programme principal

prenom"Lina"

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 : c'est une information. Le décalage dit à quel bloc appartient l'instruction.

Algorithme
pas 1 / 5
séparées par des virgules, décimales au point
Début
Lire note
Si note >= 10 Alors
Écrire "Reçu"
Écrire "Félicitations"
FinSi
Écrire "Fin du traitement"
Fin

programme principal

notesaisi14

Les deux Écrire décalés sont dans le Si : ils ne s'exécutent que si la note est suffisante. Le dernier Écrire, revenu au niveau du Si, s'exécute dans tous les cas. Le déplacer d'un cran et l'algorithme change de sens.

Un repère visuel

Dans ce cours, les algorithmes affichent des filets verticaux à chaque niveau d'imbrication, et les lignes sont numérotées. Suivre un filet du regard : il montre exactement où un bloc commence et où il finit. C'est le réflexe à prendre avant de lire le détail des instructions.

Les trois seules structures

C'est le résultat le plus surprenant de l'algorithmique : tout programme, quelle que soit sa taille, se construit avec trois structures et rien d'autre.

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 donnerait un résultat vide de sens.

2. Le choix : selon le cas

Algorithme
pas 1 / 4
séparées par des virgules, décimales au point
Début
Lire age
Si age >= 18 Alors
Écrire "Majeur"
Sinon
Écrire "Mineur"
FinSi
Fin

programme principal

agesaisi20

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.

Organigramme
FauxVraiDébutLire ageage >= 18Afficher "Mineur"Afficher "Majeur"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 n
TantQue n <= 0
Écrire "Entre un nombre positif"
Lire n
FinTantQue
Écrire "Merci, valeur acceptée : ", n
Fin

programme principal

nsaisi-3
À retenir

Séquence, choix, répétition. Un algorithme de trois lignes et un logiciel de trois millions de lignes sont faits des mêmes trois briques, emboîtées. Quand un algorithme paraît compliqué, chercher d'abord ces trois briques : une structure apparaît là où l'on ne voyait qu'un mur de texte.

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. C'est ce qu'on appelle une trace d'exécution, et c'est l'outil qui règle 90 % 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

On construit un tableau avec une colonne par variable, une ligne par passage :

ÉtapeisommeCommentaire
avant la boucle(vide)0initialisation
tour 1110 + 1
tour 2231 + 2
tour 3363 + 3
tour 44106 + 4
après la boucle(vide)10affiché : 10

Le tableau ci-dessus a été construit à la main. Celui-ci se construit tout seul, sur le même algorithme : avancer pas à pas et comparer avec ce qu'on avait prévu. Un désaccord entre les deux tableaux est toujours instructif.

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

programme principal

somme0
La méthode

Une colonne par variable, une ligne par instruction exécutée. 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.

Les erreurs de lecture les plus fréquentes

Confondre la valeur et le nom

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

Oublier que la boucle Pour incrémente toute seule

Dans Pour i de 1 à 5, la variable i avance d'elle-même à chaque tour. Ajouter un i ← i + 1 dans le corps de la boucle la fait avancer deux fois, et la moitié des valeurs sont sautées.

É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. 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 ?

Du pseudo-code au vrai langage

Une fois l'algorithme juste, la traduction est mécanique. Voici la correspondance avec Python, le langage vers lequel mène le parcours, après le passage par Flowgorithm :

Pseudo-codePython
x ← 5x = 5
Lire xx = input()
Écrire xprint(x)
Si c Alors … FinSiif c: …
Sinonelse:
Pour i de 1 à nfor i in range(1, n+1):
TantQue c … FinTantQuewhile c: …
Fonction f(a) … FinFonctiondef f(a): …
indentationindentation (obligatoire en Python)

Notons la dernière ligne : ce que le pseudo-code fait par convention, Python l'impose. Les habitudes prises ici se paieront directement là-bas.

Exercices type

Que produit cet algorithme ?
Algorithme
pas 1 / 5
Début
a 3
b 4
a a + b
b a - b
Écrire a, " ", b
Fin

programme principal

a3

Traçons d'exécution :

Étapeab
après ligne 23(vide)
après ligne 334
après ligne 474
après ligne 573

Affichage : 7 3. L'algorithme échange presque les deux valeurs : il faudrait une troisième affectation a ← a - b pour terminer l'échange.

Combien de fois « Bonjour » est-il affiché ?
Algorithme
pas 1 / 19
Début
Pour i de 1 à 3
Pour j de 1 à 2
Écrire "Bonjour"
FinPour
FinPour
Fin

programme principal

i1

La boucle intérieure fait 2 tours, et elle est relancée à chaque tour de la boucle extérieure, qui en fait 3.

3 × 2 = 6 affichages. Les filets verticaux montrent que le second Pour est bien à l'intérieur du premier.

Corriger cet algorithme
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

Deux défauts :

  1. i n'est jamais initialisée : la condition compare une variable qui n'a pas de valeur.
  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
Traduire en pseudo-code : afficher si un nombre est pair
Algorithme
pas 1 / 4
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

MOD donne le reste de la division entière. Un nombre est pair si son reste dans la division par 2 vaut 0.

Vérification

Vérification rapideon peut se reprendre

1.total ← total + 1 serait absurde comme égalité mathématique. Que veut dire cette ligne ?

2.Écrire "total" et Écrire total affichent quoi ?

3.À quoi sert l'indentation dans un algorithme ?

4.Quand employer un Pour plutôt qu'un TantQue ?

5.Dans un tableau de trace, que met-on en colonnes ?

La méthode

  1. Repérer les trois structures avant de lire le détail : ce qui s'enchaîne, ce qui choisit, ce qui se répète. Tout pseudo-code se ramène à ces trois-là.
  2. Lire l'indentation en premier. Elle dit ce qui est à l'intérieur de quoi, et une erreur de lecture vient presque toujours de là.
  3. Dérouler à la main en tenant un tableau : une colonne par variable, une ligne par instruction exécutée.
  4. Noter la valeur après chaque affectation, sans sauter de ligne. Sauter une ligne est exactement ce qui fait manquer l'erreur.
  5. Contrôler le nombre de tours d'une répétition en comptant les bornes, avant de conclure sur le résultat.
  6. Traduire en dernier, une fois l'algorithme déroulé et vérifié.

Synthèse

  • Le pseudo-code est précis comme un programme, lisible comme du français, et ne s'exécute nulle part. C'est fait exprès.
  • Il n'y a pas de norme universelle : c'est la convention de ce cours qu'il faut connaître.
  • range une valeur dans une variable, de droite à gauche. = compare.
  • Les guillemets distinguent le texte affiché tel quel du contenu d'une variable.
  • L'indentation dit ce qui est à l'intérieur de quoi. Ce n'est pas de la mise en page.
  • Tout algorithme se construit avec trois structures : séquence, choix, répétition.
  • La trace d'exécution (une colonne par variable, une ligne par passage) est l'outil qui répond à « pourquoi ça ne fait pas ce que je veux ».
  • Avant d'écrire un TantQue, se demander ce qui rendra la condition fausse.

Mettre en pratique