Algorithmique — raisonner avant de coder
Décrire la solution d'un problème pas à pas, indépendamment de tout langage. Le raisonnement reste le même ; seule la syntaxe change.
Résumé flash
Un algorithme est une suite finie, ordonnée et précise d'instructions qui résout un problème. On l'écrit en pseudo-code, avant et indépendamment du langage. Tout tient en cinq briques : variables (stocker), conditions (choisir), boucles (répéter), tableaux (regrouper) et fonctions (réutiliser). Le même algorithme se traduit ensuite en C, Python ou Java.
🔑
#pseudo-code #variable #affectation #type
#condition #Si-Alors-Sinon #boucle #Pour
#TantQue #Répéter #tableau #indice
#fonction
01Qu'est-ce qu'un algorithme
Un algorithme est une suite finie, ordonnée et précise d'instructions permettant de résoudre un problème ou d'effectuer une tâche. Il décrit la méthode de résolution, indépendamment du langage de programmation.
Pourquoi ne pas coder directement ?
Parce qu'écrire du code, c'est résoudre deux problèmes à la fois : quoi faire et comment l'écrire dans ce langage. L'algorithme sépare les deux. Il permet de :
- décomposer un problème complexe ;
- organiser les étapes de résolution ;
- éviter les erreurs de raisonnement ;
- faciliter la programmation et la maintenance ;
- traduire la même solution dans plusieurs langages.
Un algorithme, c'est la recette ; le langage de programmation, c'est la langue dans laquelle on l'écrit. « Faire revenir l'oignon 5 minutes » se traduit en français, en anglais ou en japonais : le plat est le même. De même, un algorithme se traduit en C, Python, Java ou C++ — le raisonnement ne bouge pas, seule la syntaxe change.
Et comme une recette : il doit être fini (elle se termine), ordonné (on ne cuit pas avant d'éplucher) et précis (« un peu de sel » n'est pas une instruction).
02La structure type
Tout algorithme suit le même squelette.
Algorithme nom_algorithme
Constantes
Constante1 = valeur
Variables
Variable1 : type
Variable2 : type
Début
instructions
Fin| Élément | Rôle |
|---|---|
Algorithme | ouvre la déclaration |
| nom_algorithme | le nom qu'on lui donne |
Constantes | les valeurs qui ne changent pas |
Variables | les données utilisées, avec leur type |
Début … Fin | encadrent les instructions |
Un premier exemple complet
Algorithme Somme
Variables
a : entier
b : entier
somme : entier
Début
Lire a
Lire b
somme ← a + b
Afficher somme
FinDébutLe polycopié se contredit : la syntaxe générale place Variables
au-dessus de Début, mais le corrigé de l'exercice « surveillance
d'équipement » les écrit à l'intérieur :
Début
Variables :
temperature : réel
Lire temperatureLa forme correcte, celle qu'on attend à l'examen, est la première : on déclare d'abord, on exécute ensuite. C'est aussi ce que fera le C, où les variables se déclarent en tête de bloc.
03Analyser un problème
Avant d'écrire la moindre ligne, on analyse. La méthode tient en trois questions, toujours les mêmes.
- Les entrées — les informations nécessaires au programme.
- Les traitements — les opérations réalisées sur ces données.
- Les sorties — les résultats produits.
- L'algorithme — la description des étapes.
Les énoncés demandent presque toujours, dans cet ordre : « identifier les données d'entrée », « identifier la sortie recherchée », « déterminer les étapes de calcul », « écrire l'algorithme », « le tester ». Les quatre premières questions rapportent des points même si l'algorithme final est raté : ne les sautez jamais pour « gagner du temps ».
04Variables et types
Une variable est une zone de mémoire qui stocke une donnée dont la valeur peut changer pendant l'exécution.
L'affectation
Donner une valeur à une variable s'écrit avec une flèche :
variable ← valeurtemperature ← 65
temperature ← 72 La variable contient maintenant 72.
debit1 ← 100
debit2 ← 100
debit_total ← debit1 + debit2 debit_total vaut 200Les types
| Type | Description | Exemple |
|---|---|---|
entier | nombre sans décimale | 25 |
réel | nombre avec décimale | 72.5 |
caractère | un seul caractère | 'A' |
chaîne | du texte | "Serveur01" |
booléen | vrai ou faux | Vrai |
Les constantes
Une constante ne change jamais pendant l'exécution. Par convention on l'écrit en majuscules.
MAX_EQUIPEMENTS ← 50
SEUIL_TEMPERATURE ← 70L'intérêt : si le seuil passe un jour à 75, on modifie une seule ligne au lieu de chasser le nombre 70 dans tout le programme.
← n'est pas le signe égalEn pseudo-code, on distingue soigneusement deux choses que beaucoup de langages confondent :
| Pseudo-code | En langage C | |
|---|---|---|
| Affecter (ranger une valeur) | x ← 5 |
x = 5; |
| Comparer (poser une question) | Si x = 5 |
if (x == 5) |
C'est le piège du passage au C : écrire if (x = 5) ne compare
pas — cela affecte 5 à x, et la condition est toujours vraie. Le compilateur ne dit
rien. En pseudo-code la flèche rend l'erreur impossible : profitez-en pour ancrer la
distinction maintenant.
05Les opérateurs
Arithmétiques
+ | addition |
- | soustraction |
* | multiplication |
/ | division |
% | reste de la division (modulo) |
De comparaison
= | égal |
≠ | différent |
> · < | supérieur · inférieur |
≥ · ≤ | supérieur ou égal · inférieur ou égal |
Logiques
Ils combinent plusieurs conditions.
| Opérateur | Vrai quand… | Exemple |
|---|---|---|
ET | les deux conditions sont vraies | temperature > 70 ET serveur_actif = Vrai |
OU | au moins une est vraie | serveur_actif = Faux OU connexion = Faux |
NON | la condition est fausse (elle s'inverse) | NON serveur_actif |
Une expression combine variables, constantes et opérateurs pour produire une valeur :
debit_moyen ← (debit1 + debit2) / 2debit1 et debit2 sont les variables, + et
/ les opérateurs, et le résultat est affecté à debit_moyen. Les
parenthèses ne sont pas décoratives : sans elles,
debit1 + debit2 / 2 ne divise que debit2.
06Les conditions
Une structure conditionnelle n'exécute des instructions que si une condition est vraie.
Si condition Alors
instructions
FinSi
Si temperature > 70 Alors
Afficher "Alerte : température élevée"
FinSiSi serveur_actif = Vrai Alors
Afficher "Serveur disponible"
Sinon
Afficher "Serveur indisponible"
FinSiConditions imbriquées
Une condition peut en contenir une autre — c'est ainsi qu'on traite plus de deux cas.
Si serveur_actif = Vrai Alors
Si temperature > 70 Alors
Afficher "Serveur actif mais température élevée"
Sinon
Afficher "Serveur opérationnel"
FinSi
Sinon
Afficher "Serveur arrêté"
FinSiSinon SiPour classer une valeur en plusieurs tranches, on enchaîne les tests — et l'ordre compte :
Si temperature ≤ 60 Alors
Afficher "fonctionnement normal"
Sinon Si temperature ≤ 70 Alors
Afficher "température élevée"
Sinon
Afficher "alerte : température critique"
FinSiRemarquez qu'on n'écrit pas temperature > 60 ET temperature ≤ 70 : inutile.
Si l'on atteint le deuxième test, c'est que le premier était faux, donc que
temperature dépasse déjà 60. Chaque branche hérite du contraire des
précédentes — c'est ce qui rend la cascade lisible.
Si l'on met la tranche la plus large en premier, elle avale tout le reste :
Si temperature ≤ 70 Alors ← attrape aussi 60, 50, 20…
Afficher "température élevée"
Sinon Si temperature ≤ 60 Alors ← jamais atteint
Afficher "fonctionnement normal"
FinSiOn teste toujours du plus restrictif au plus large.
07Les boucles
Une boucle (ou structure répétitive) répète des instructions. Il en existe trois, et le choix se fait sur une seule question : sait-on combien de fois ?
Tant que et Répéter :
la position du test.La boucle Pour
Quand on connaît le nombre de répétitions.
Pour variable allant de valeur_depart à valeur_fin
instructions
FinPour
Pour port allant de 1 à 5
Afficher port
FinPour
Résultat : 1 2 3 4 5La boucle Tant que
Répète tant que la condition est vraie. Le test a lieu avant chaque tour : si la condition est fausse dès le départ, le corps n'est jamais exécuté.
Tant que condition
instructions
FinTantQueLe polycopié donne cet exemple pour surveiller un serveur :
Tant que serveur_actif = Vrai
Afficher "Surveillance du serveur..."
FinTantQueLe commentaire annonce que le message s'affichera « jusqu'à ce que le serveur ne soit plus
actif ». C'est faux : rien, à l'intérieur de la boucle, ne modifie
serveur_actif. Si la variable vaut Vrai au départ, elle
vaudra Vrai éternellement — le programme se fige.
Toute boucle Tant que doit contenir une instruction qui fait évoluer sa
condition vers la sortie :
Tant que serveur_actif = Vrai
Afficher "Surveillance du serveur..."
Lire serveur_actif ← on relit l'état : la condition peut devenir Faux
FinTantQueLe réflexe : après avoir écrit un Tant que, cherchez des yeux
la ligne qui permettra d'en sortir. Si vous ne la trouvez pas, elle manque.
La boucle Répéter…Jusqu'à
Répète jusqu'à ce qu'une condition devienne vraie. Le test est à la fin : le corps s'exécute donc au moins une fois.
Répéter
Lire port
Jusqu'à port ≥ 1 ET port ≤ 65535C'est la structure idéale pour une saisie contrôlée : il faut bien demander la valeur une première fois avant de pouvoir la juger.
08Les tableaux
Un tableau stocke plusieurs valeurs du même type sous un seul nom. On accède à chaque case par son indice.
equipements ← ["SW-01", "SW-02", "RTR-01", "SRV-01"]
equipements[0] vaut "SW-01"
equipements[3] vaut "SRV-01"Parcourir un tableau
Pour i allant de 0 à taille - 1
Afficher tableau[i]
FinPour
Pour i allant de 0 à 3
Afficher equipements[i]
FinPour
Résultat : SW-01 SW-02 RTR-01 SRV-01C'est l'erreur la plus fréquente de toute la programmation. Un tableau de 4 éléments se parcourt de 0 à 3, jamais de 0 à 4 ni de 1 à 4. D'où la formule à retenir :
Accéder à equipements[4] lit une case qui n'existe pas. En pseudo-code c'est une
faute de raisonnement ; en C, cela lit de la mémoire au hasard — sans message d'erreur, et
parfois sans planter tout de suite. C'est ainsi que naissent les bugs les plus difficiles à
trouver.
09Les fonctions
Une fonction est un bloc d'instructions qui réalise une tâche précise et que l'on peut réutiliser. Elle reçoit des paramètres et retourne un résultat.
Fonction nom_fonction(paramètres)
instructions
Retourner résultat
FinFonctionFonction calculerDebitMoyen(debit1, debit2)
moyenne ← (debit1 + debit2) / 2
Retourner moyenne
FinFonction
debit ← calculerDebitMoyen(100, 100) debit vaut 100Vous mettez une pièce (le paramètre), la machine fait son travail (les instructions), un café sort (le retour). Vous n'avez pas besoin de savoir comment elle chauffe l'eau : c'est tout l'intérêt. Une fonction bien écrite s'utilise sans relire son contenu.
Dès qu'une vérification revient à plusieurs endroits. Écrire trois fois « le port est-il entre 0 et 65535 ? », c'est trois occasions de se tromper — et trois lignes à corriger le jour où la règle change.
Fonction EstPortValide(port)
Si port ≥ 0 ET port ≤ 65535 Alors
Retourner Vrai
Sinon
Retourner Faux
FinSi
FinFonctionUne fonction qui répond par Vrai ou Faux s'appelle un
prédicat. Par convention, on la nomme comme une question :
EstPortValide, EstLent, EstVide.
Cette fonction est correcte, mais un développeur expérimenté l'écrirait en une seule ligne. Comment ?
Fonction EstPortValide(port)
Retourner (port ≥ 0 ET port ≤ 65535)
FinFonctionL'expression port ≥ 0 ET port ≤ 65535 est déjà un booléen : elle vaut
Vrai ou Faux. Écrire Si (c'est vrai) Alors retourner Vrai
Sinon retourner Faux revient à dire « si c'est vrai, alors c'est vrai » — on peut
retourner la condition directement.
Les deux versions sont justes ; la seconde montre que vous avez compris qu'une comparaison produit une valeur.