Chapitre 121 minDébutant
C'est quoi un algorithme ? Pseudo-code et Python
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- définir un algorithme et le distinguer d'un programme ;
- lire et écrire un pseudo-code avec les conventions des sujets ;
- reconnaître les trois structures de base : séquence, condition, boucle ;
- installer Python et lancer ton premier programme ;
- passer d'un énoncé à un algorithme avec une méthode en étapes.
5 exercices corrigés1 schéma
Un algorithme est une suite finie d'instructions précises qui, à partir de données d'entrée, produit un résultat en un nombre fini d'étapes. Ce chapitre explique ce qui distingue un algorithme d'un programme, comment l'écrire en pseudo-code avec les conventions de ce cours, et comment le traduire en Python pour l'exécuter sur ta machine.
La définition, mot par mot
Tu suis des algorithmes tous les jours sans les appeler ainsi : une recette de cuisine, l'itinéraire donné par ton GPS, la procédure pour réinitialiser un mot de passe. Un algorithme informatique a les mêmes ingrédients, avec une exigence de plus : il doit pouvoir être exécuté par quelqu'un (ou quelque chose) qui ne réfléchit pas. Une machine ne devine rien.
| Propriété | Ce qu'elle veut dire | Contre-exemple |
|---|---|---|
| Finitude | L'algorithme s'arrête après un nombre fini d'étapes | « Tant que le café est chaud, attendre » : rien ne garantit la fin si personne ne mesure la température |
| Précision | Chaque instruction a un seul sens possible | « Ajouter un peu de sel » : combien ? |
| Entrées | Les données dont il a besoin, fournies au départ | Calculer une moyenne sans dire de quelles notes |
| Sorties | Au moins un résultat, en lien avec les entrées | Un calcul dont le résultat n'est ni affiché ni renvoyé |
| Effectivité | Chaque étape est faisable avec les moyens disponibles | « Choisir le meilleur mot de passe possible » |
Le mot vient du nom d'Al-Khwârizmî, mathématicien persan du IXe siècle dont les traités ont fait connaître en Europe le calcul avec les chiffres indo-arabes. L'algorithme le plus célèbre est plus ancien encore : celui d'Euclide, qui calcule le PGCD de deux entiers (chapitre 11).
Algorithme ou programme ?
Les deux mots ne sont pas synonymes. L'algorithme est la méthode, indépendante de tout langage. Le programme est cette méthode traduite dans un langage que la machine sait exécuter.
| Algorithme | Programme | |
|---|---|---|
| C'est quoi | La méthode de résolution | La méthode traduite dans un langage |
| Écrit en | Pseudo-code, organigramme, phrases numérotées | Python, C#, JavaScript, PHP… |
| Exécuté par | Toi, à la main, sur papier | La machine |
| Erreurs possibles | Erreurs de logique | Erreurs de logique et erreurs de syntaxe |
| Exemple | « Parcourir les notes et garder la plus grande » | if note > maxi: maxi = note |
Un même algorithme se programme dans n'importe quel langage : la syntaxe change, la logique reste. C'est pour cela que l'algorithmique est la base commune de toutes les options du BTS SIO : la boucle que tu écris en Python en première année est la même que celle que tu écriras en C# ou en PHP en SLAM, ou dans un script Bash ou PowerShell en SISR.
Pourquoi ne pas coder directement ?
Sur un exercice de trois lignes, tu peux écrire directement le Python. Dès que le problème grossit, écrire l'algorithme d'abord t'évite trois pièges.
- Mélanger deux difficultés. Trouver la bonne logique et respecter une syntaxe sont deux problèmes différents. Les traiter l'un après l'autre est plus simple que les deux à la fois.
- Coder à l'aveugle. Sans plan, tu modifies le code au hasard jusqu'à ce que « ça marche » sur l'exemple, puis ça casse sur le suivant.
- Ne pas pouvoir expliquer. À l'épreuve d'algorithmique de l'E3, une partie de la préparation se fait sur table, sans machine, et la commission peut examiner cette trace écrite (chapitre 13). Il faut savoir écrire un algorithme sur papier.
Le pseudo-code et ses conventions
Le pseudo-code est une façon d'écrire un algorithme en français structuré, assez rigoureux pour être traduit sans ambiguïté, sans les contraintes de syntaxe d'un vrai langage. Il n'existe pas de norme officielle : chaque manuel, chaque professeur a ses habitudes, et le référentiel du BTS SIO précise qu'aucun langage ni formalisme n'est imposé pour écrire les algorithmes. Ce qui compte, c'est d'être cohérent du début à la fin de ta copie.
Le programme de mathématiques du BTS donne tout de même des recommandations, que ce cours applique :
- une représentation textuelle indentée, avec des indicateurs de début et de fin explicites (
Début/Fin,FinSi,FinPour) ; - un en-tête avec le nom de l'algorithme, son rôle, ses données d'entrée et de sortie ;
- des commentaires qui précisent le rôle des variables ou la démarche.
Voici la structure d'un algorithme complet dans les conventions du cours :
Algorithme MoyenneDeuxNotes
// Rôle : calculer et afficher la moyenne de deux notes
// Entrées : note1, note2 (réels, saisis au clavier)
// Sortie : la moyenne, affichée à l'écran
Variables
note1, note2, moyenne : réel
Début
Afficher("Première note ?")
Saisir(note1)
Afficher("Deuxième note ?")
Saisir(note2)
moyenne ← (note1 + note2) / 2
Afficher("Moyenne : ", moyenne)
Fin
Un algorithme se lit de haut en bas. L'en-tête dit quoi ; la partie Variables déclare les cases mémoire et leur type ; le bloc Début … Fin dit comment. La flèche ← est l'affectation : « ranger dans moyenne le résultat du calcul » (chapitre 2).
Le tableau ci-dessous résume le vocabulaire utilisé dans tout le cours, avec sa traduction en Python. Tu le retrouveras complété dans l'aide-mémoire du chapitre 13.
| Pseudo-code | Sens | Python |
|---|---|---|
x ← 5 | Affectation : ranger 5 dans x | x = 5 |
0,20 | Nombre décimal, avec une virgule | 0.20, avec un point |
Saisir(x) | Lire une valeur au clavier | x = int(input()) (ou float, ou rien pour une chaîne) |
Afficher("Total : ", x) | Écrire à l'écran | print("Total :", x) |
=, ≠, <, ≤, >, ≥ | Comparaisons | ==, !=, <, <=, >, >= |
ET, OU, NON | Opérateurs logiques | and, or, not |
a DIV b, a MOD b | Quotient et reste de la division entière | a // b, a % b |
Si … Alors … Sinon … FinSi | Alternative | if …: / else: |
Pour i de 0 à n - 1 Faire … FinPour | Boucle à nombre de tours connu | for i in range(n): |
TantQue … Faire … FinTantQue | Boucle conditionnelle | while …: |
Fonction f(x : entier) : réel … Retourner r … FinFonction | Fonction | def f(x): … return r |
t[i] | Case d'indice i d'un tableau | t[i] |
// commentaire | Commentaire | # commentaire |
Les trois structures de base
En 1966, Corrado Böhm et Giuseppe Jacopini ont montré que tout algorithme peut s'écrire avec seulement trois façons d'enchaîner les instructions. Quand un algorithme te paraît énorme, cherche ces trois briques : il se démonte tout seul.
Les fonctions (chapitre 6) n'ajoutent pas de puissance : elles servent à découper un gros algorithme en morceaux qu'on nomme, qu'on teste et qu'on réutilise.
On représente parfois un algorithme par un organigramme (ou logigramme) : des rectangles pour les actions, des losanges pour les conditions, des parallélogrammes pour les entrées et sorties, des flèches pour l'ordre. Il aide à visualiser une boucle ou un enchaînement de conditions (chapitre 4), mais devient illisible dès que l'algorithme dépasse une quinzaine d'étapes. À l'examen, préfère le pseudo-code.
Pourquoi Python ?
Le référentiel du BTS SIO demande qu'un langage de haut niveau soit utilisé régulièrement en mathématiques pour l'informatique, et précise que Python est recommandé sans être imposé : il est simple, libre et largement enseigné. Si ton établissement en choisit un autre, il doit être accepté par le centre d'examen. Ce cours donne chaque algorithme en pseudo-code puis en Python.
Python a deux particularités à connaître dès maintenant.
- L'indentation fait partie de la syntaxe. Il n'y a ni
FinSini accolades : un bloc est l'ensemble des lignes décalées de la même quantité (4 espaces par convention) sous une ligne terminée par:. Une indentation fausse provoque uneIndentationError, ou pire, un programme qui fait autre chose que prévu. - Les variables ne se déclarent pas. Une variable naît à sa première affectation et prend le type de la valeur qu'on y range. En pseudo-code, tu déclares quand même tes variables : c'est là que tu réfléchis à leur type.
Installer Python et ton éditeur
Installe la dernière version de Python 3 proposée sur python.org. Sous Linux, Python 3 est en général déjà présent (tape python3 --version dans un terminal). Ensuite, choisis un éditeur.
| Outil | Pour qui | Point fort |
|---|---|---|
| IDLE | Tout le monde, installé avec Python | Une console pour tester une ligne, un éditeur pour les programmes (F5 pour exécuter) |
| Thonny | Débutants | Livré avec son propre Python ; son débogueur montre les variables pas à pas, idéal pour vérifier une trace |
| VS Code + extension Python | Ceux qui codent déjà | Le même éditeur que pour le web ou le C# ; débogueur complet |
| Python Tutor (en ligne) | Pour comprendre | Dessine la mémoire à chaque instruction : variables, listes, appels de fonctions |
Le jour de l'épreuve, tu travailles sur le poste fourni par le centre d'examen. Tu peux y consulter l'aide syntaxique du langage et les ressources documentaires électroniques installées dans le centre, mais aucun service accessible sur internet : ni recherche web, ni assistant en ligne, et tes connexions peuvent être contrôlées. Entraîne-toi donc avec un outil simple, et apprends à te servir de help() dans la console Python : help(str.find) affiche la documentation de la méthode find.
Ton premier programme
Voici la traduction en Python de l'algorithme MoyenneDeuxNotes. Chaque ligne du bloc Début … Fin devient une ligne de Python.
# Rôle : calculer et afficher la moyenne de deux notes
# Entrées : note1, note2 (réels, saisis au clavier)
# Sortie : la moyenne, affichée à l'écran
note1 = float(input("Première note ? "))
note2 = float(input("Deuxième note ? "))
moyenne = (note1 + note2) / 2
print("Moyenne :", moyenne)
Avec les notes 12 et 15, l'exécution donne :
Première note ? 12
Deuxième note ? 15
Moyenne : 13.5
Trois remarques sur cette traduction :
inputrenvoie toujours une chaîne de caractères. Sansfloat(...),note1 + note2collerait les deux textes :"12" + "15"donne"1215". La conversion est détaillée au chapitre 2.printsépare ses arguments par une espace ; Python affiche les réels avec un point décimal (13.5).- Les commentaires de l'en-tête deviennent des lignes
#. Sur une fonction, on les met dans une docstring (chapitre 6).
De l'énoncé à l'algorithme : la méthode
Face à un énoncé, ne te jette pas sur le code. Quatre questions, dans l'ordre :
- Quelles sont les entrées ? Les données fournies, saisies ou passées en paramètre, avec leur type.
- Quelle est la sortie attendue ? Ce qu'on affiche ou renvoie, sous quelle forme.
- Quel traitement relie les deux ? Les étapes, puis les structures (alternative, boucle) dont tu as besoin.
- Avec quels exemples vas-tu tester ? Un cas ordinaire, un cas limite, un cas d'erreur, avec le résultat attendu calculé à la main avant d'exécuter (chapitre 5).
Appliquons la méthode à un énoncé simple : « Un technicien saisit le prix hors taxe d'un matériel. Le programme affiche le prix TTC, avec une TVA de 20 %. »
- Entrée : le prix HT, un réel positif.
- Sortie : le prix TTC, affiché.
- Traitement :
ttc ← ht × 1,2. Une séquence suffit. - Tests : 100 € HT donnent 120 € TTC ; 0 donne 0 ; 19,99 donne 23,988, qu'on arrondit à 23,99 pour l'affichage.
Algorithme PrixTTC
// Rôle : calculer le prix TTC d'un matériel (TVA 20 %)
// Entrée : ht (réel), le prix hors taxe
// Sortie : le prix TTC, affiché
Constante
TAUX_TVA ← 0,20
Variables
ht, ttc : réel
Début
Afficher("Prix HT ?")
Saisir(ht)
ttc ← ht × (1 + TAUX_TVA)
Afficher("Prix TTC : ", ttc)
Fin
TAUX_TVA = 0.20
ht = float(input("Prix HT ? "))
ttc = ht * (1 + TAUX_TVA)
print("Prix TTC :", round(ttc, 2))
Le taux est une constante : une valeur nommée qui ne change pas pendant l'exécution. Si le taux change, tu modifies une seule ligne. Python n'a pas de vraies constantes ; par convention, un nom en MAJUSCULES signale qu'il ne faut pas modifier la variable.
Où l'algorithmique te sert au BTS SIO
| Où | Ce qu'on te demande |
|---|---|
| E3, situation A du CCF (algorithmique appliquée) | Écrire sur table puis mettre en œuvre sur machine un ou plusieurs algorithmes, puis les présenter et répondre à un entretien (chapitre 13) |
| E3 en forme ponctuelle (candidats hors CCF) | Un écrit de 2 heures dont un exercice évalue la capacité « programmer » |
| Option SLAM (E6, E7) | Écrire, lire, corriger et tester du code en C#, PHP ou JavaScript : les boucles, les fonctions et les tableaux sont partout |
| Option SISR | Écrire des scripts d'administration en Bash ou en PowerShell : variables, conditions, boucles sur des fichiers ou des comptes |
| Toutes les épreuves orales | Expliquer clairement ce que fait un traitement, ce qui suppose de le comprendre ligne à ligne |
Le programme d'algorithmique appliquée cite cinq compétences, que ce cours travaille toutes : comprendre un algorithme et expliquer ce qu'il fait, le modifier pour obtenir un résultat différent, en concevoir un, le transcrire dans un langage, et s'interroger sur son efficacité.
Exercices
Exercice 1 sur 5 Algorithme ou pas ? Réussi À revoir
Pour chaque consigne, dis si c'est un algorithme. Sinon, quelle propriété manque-t-il ?
- « Additionner 7 et 5. »
- « Lire un entier n, puis afficher n × 2. »
- « Tant que le serveur ne répond pas, attendre. »
- « Choisir un bon nom de variable. »
- « Lire un prix et afficher le prix avec une petite remise. »
Voir la réponseMasquer la réponse de l'exercice 1
- Ce n'est pas un algorithme au sens du cours : il n'y a pas d'entrée, c'est un calcul isolé (son résultat est toujours 12).
- Oui : une entrée (n), un traitement précis, une sortie, et une fin.
- Pas de finitude garantie : si le serveur ne répond jamais, l'algorithme ne s'arrête pas. Il faut une limite, par exemple « au plus 5 essais ».
- Pas de précision ni d'effectivité : « bon » n'a pas de définition qu'une machine puisse appliquer.
- Pas de précision : « petite remise » ne dit pas combien. Il faut un taux, par exemple 5 %.
Tu avais trouvé ?
Exercice 2 sur 5 Entrées et sorties Réussi À revoir
Pour chaque énoncé, donne les entrées (avec leur type) et la sortie.
- Convertir une durée en minutes en heures et minutes (135 minutes donnent 2 h 15).
- Dire si une adresse e-mail saisie contient le caractère
@. - Calculer le montant total d'une commande à partir de la quantité et du prix unitaire.
Voir la réponseMasquer la réponse de l'exercice 2
- Entrée : une durée en minutes (entier positif). Sorties : les heures (entier) et les minutes restantes (entier), qu'on obtient avec
DIV 60etMOD 60. - Entrée : l'adresse (chaîne). Sortie : un booléen, vrai si
@est présent (ou un message « valide » / « invalide »). - Entrées : la quantité (entier) et le prix unitaire (réel). Sortie : le montant (réel),
quantité × prix.
Tu avais trouvé ?
Exercice 3 sur 5 Traduire en Python Réussi À revoir
Traduis cet algorithme en Python, puis donne ce qu'il affiche si l'on saisit 135.
Algorithme Duree
// Rôle : convertir une durée en heures et minutes
Variables
total, h, m : entier
Début
Afficher("Durée en minutes ?")
Saisir(total)
h ← total DIV 60
m ← total MOD 60
Afficher(h, " h ", m, " min")
Fin
Voir la réponseMasquer la réponse de l'exercice 3
total = int(input("Durée en minutes ? "))
h = total // 60
m = total % 60
print(h, "h", m, "min")
Avec 135, 135 // 60 vaut 2 et 135 % 60 vaut 15 : le programme affiche 2 h 15 min. La saisie est convertie avec int et non float, car DIV et MOD portent sur des entiers.
Tu avais trouvé ?
Exercice 4 sur 5 Trouver l'erreur Réussi À revoir
Un étudiant a traduit PrixTTC ainsi. Il saisit 100 et obtient une erreur. Pourquoi, et comment corriger ?
ht = input("Prix HT ? ")
ttc = ht * 1.2
print("Prix TTC :", ttc)
Voir la réponseMasquer la réponse de l'exercice 4
input renvoie la chaîne "100". Multiplier une chaîne par un réel est interdit : Python lève TypeError: can't multiply sequence by non-int of type 'float'. Il faut convertir la saisie : ht = float(input("Prix HT ? ")). Le programme affiche alors Prix TTC : 120.0.
Curiosité : "100" * 2 ne provoque pas d'erreur, il donne "100100" (la chaîne répétée deux fois). C'est encore plus trompeur, car le programme tourne et affiche n'importe quoi.
Tu avais trouvé ?
Exercice 5 sur 5 Écrire un premier algorithme Réussi À revoir
Une imprimante réseau facture 0,05 € la page en noir et 0,15 € la page en couleur. Écris l'algorithme (avec son en-tête) qui lit les deux nombres de pages et affiche le coût total, puis traduis-le en Python. Quel coût pour 120 pages noires et 30 couleurs ?
Voir la réponseMasquer la réponse de l'exercice 5
Algorithme CoutImpression
// Rôle : calculer le coût d'une impression
// Entrées : noir, couleur (entiers), les nombres de pages
// Sortie : le coût total en euros, affiché
Constantes
PRIX_NOIR ← 0,05
PRIX_COULEUR ← 0,15
Variables
noir, couleur : entier
cout : réel
Début
Saisir(noir)
Saisir(couleur)
cout ← noir × PRIX_NOIR + couleur × PRIX_COULEUR
Afficher("Coût : ", cout, " €")
Fin
PRIX_NOIR = 0.05
PRIX_COULEUR = 0.15
noir = int(input("Pages en noir ? "))
couleur = int(input("Pages en couleur ? "))
cout = noir * PRIX_NOIR + couleur * PRIX_COULEUR
print("Coût :", round(cout, 2), "€")
120 × 0,05 + 30 × 0,15 = 6 + 4,5 = 10,50 €. Python affiche Coût : 10.5 € : round garde au plus deux décimales et n'écrit pas le zéro final. Pour forcer deux décimales, on formate la valeur (chapitre 9).
Tu avais trouvé ?