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.
💡 La recette de cuisine

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 — le squelette
Algorithme nom_algorithme

Constantes
    Constante1 = valeur

Variables
    Variable1 : type
    Variable2 : type

Début
    instructions
Fin
ÉlémentRôle
Algorithmeouvre la déclaration
nom_algorithmele nom qu'on lui donne
Constantesles valeurs qui ne changent pas
Variablesles données utilisées, avec leur type
Début … Finencadrent les instructions

Un premier exemple complet

algorithme
Algorithme Somme

Variables
    a : entier
    b : entier
    somme : entier

Début
    Lire a
    Lire b
    somme ← a + b
    Afficher somme
Fin
🔧 Corrigé — les déclarations vont AVANT Début

Le 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 :

à ne pas recopier
Début
    Variables :
        temperature : réel
    Lire temperature

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

ENTRÉES ce dont j'ai besoin TRAITEMENTS ce que je calcule SORTIES ce que je produis puis seulement : écrire les étapes
La méthode d'analyse. Tant que les trois cases ne sont pas remplies, on n'écrit rien.
  1. Les entrées — les informations nécessaires au programme.
  2. Les traitements — les opérations réalisées sur ces données.
  3. Les sorties — les résultats produits.
  4. L'algorithme — la description des étapes.
🧰 Sur un sujet d'examen

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.

temperature 65 la boîte porte un nom… temperature 72 …son contenu peut changer
Une variable est une boîte étiquetée : le nom ne change pas, le contenu si.

L'affectation

Donner une valeur à une variable s'écrit avec une flèche :

variable ← valeur
algorithme
temperature ← 65
temperature ← 72            La variable contient maintenant 72.

debit1 ← 100
debit2 ← 100
debit_total ← debit1 + debit2        debit_total vaut 200

Les types

TypeDescriptionExemple
entiernombre sans décimale25
réelnombre avec décimale72.5
caractèreun seul caractère'A'
chaînedu texte"Serveur01"
booléenvrai ou fauxVrai

Les constantes

Une constante ne change jamais pendant l'exécution. Par convention on l'écrit en majuscules.

algorithme
MAX_EQUIPEMENTS ← 50
SEUIL_TEMPERATURE ← 70

L'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.

⚠️ La flèche ← n'est pas le signe égal

En pseudo-code, on distingue soigneusement deux choses que beaucoup de langages confondent :

Pseudo-codeEn 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érateurVrai quand…Exemple
ETles deux conditions sont vraies temperature > 70 ET serveur_actif = Vrai
OUau moins une est vraie serveur_actif = Faux OU connexion = Faux
NONla condition est fausse (elle s'inverse) NON serveur_actif
🧰 Une expression, c'est une combinaison

Une expression combine variables, constantes et opérateurs pour produire une valeur :

algorithme
debit_moyen ← (debit1 + debit2) / 2

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

algorithme — Si simple
Si condition Alors
    instructions
FinSi

Si temperature > 70 Alors
    Afficher "Alerte : température élevée"
FinSi
algorithme — Si…Sinon
Si serveur_actif = Vrai Alors
    Afficher "Serveur disponible"
Sinon
    Afficher "Serveur indisponible"
FinSi

Conditions imbriquées

Une condition peut en contenir une autre — c'est ainsi qu'on traite plus de deux cas.

algorithme
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é"
FinSi
🧰 Trois cas ou plus : la cascade Sinon Si

Pour classer une valeur en plusieurs tranches, on enchaîne les tests — et l'ordre compte :

algorithme
Si temperature ≤ 60 Alors
    Afficher "fonctionnement normal"
Sinon Si temperature ≤ 70 Alors
    Afficher "température élevée"
Sinon
    Afficher "alerte : température critique"
FinSi

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

⚠️ L'ordre des tranches n'est pas libre

Si l'on met la tranche la plus large en premier, elle avale tout le reste :

faux
Si temperature ≤ 70 Alors        ← attrape aussi 60, 50, 20…
    Afficher "température élevée"
Sinon Si temperature ≤ 60 Alors  ← jamais atteint
    Afficher "fonctionnement normal"
FinSi

On 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 ?

Sait-on combien de fois ? Pour OUI — nombre connu « pour chaque port de 1 à 5 » compteur automatique Tant que NON — dépend d'un test test AVANT → peut ne jamais tourner 0 fois ou plus Répéter…Jusqu'à NON — dépend d'un test test APRÈS → tourne toujours 1 fois 1 fois ou plus
La différence décisive entre Tant que et Répéter : la position du test.

La boucle Pour

Quand on connaît le nombre de répétitions.

algorithme
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  5

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

algorithme
Tant que condition
    instructions
FinTantQue
🔧 Corrigé — l'exemple du cours boucle à l'infini

Le polycopié donne cet exemple pour surveiller un serveur :

boucle infinie
Tant que serveur_actif = Vrai
    Afficher "Surveillance du serveur..."
FinTantQue

Le 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 :

algorithme — correct
Tant que serveur_actif = Vrai
    Afficher "Surveillance du serveur..."
    Lire serveur_actif          ← on relit l'état : la condition peut devenir Faux
FinTantQue

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

algorithme
Répéter
    Lire port
Jusqu'à port ≥ 1 ET port ≤ 65535

C'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" [0][1] [2][3] 4 cases, mais les indices vont de 0 à 3
L'indice commence à 0. Un tableau de taille n a donc pour dernier indice n − 1.
algorithme
equipements ← ["SW-01", "SW-02", "RTR-01", "SRV-01"]

equipements[0]        vaut "SW-01"
equipements[3]        vaut "SRV-01"

Parcourir un tableau

algorithme
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-01
⚠️ L'erreur d'un cran (off-by-one)

C'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 :

Pour i allant de 0 à taille − 1

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.

algorithme
Fonction nom_fonction(paramètres)
    instructions
    Retourner résultat
FinFonction
algorithme — exemple
Fonction calculerDebitMoyen(debit1, debit2)
    moyenne ← (debit1 + debit2) / 2
    Retourner moyenne
FinFonction

debit ← calculerDebitMoyen(100, 100)      debit vaut 100
💡 La machine à café

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

🧰 Quand créer une fonction

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.

algorithme
Fonction EstPortValide(port)
    Si port ≥ 0 ET port ≤ 65535 Alors
        Retourner Vrai
    Sinon
        Retourner Faux
    FinSi
FinFonction

Une fonction qui répond par Vrai ou Faux s'appelle un prédicat. Par convention, on la nomme comme une question : EstPortValide, EstLent, EstVide.

🧠 Auto-évaluation

Cette fonction est correcte, mais un développeur expérimenté l'écrirait en une seule ligne. Comment ?

algorithme
Fonction EstPortValide(port)
    Retourner (port ≥ 0 ET port ≤ 65535)
FinFonction

L'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.

⚡ Récap 2 minutes

  • Algorithme : suite finie, ordonnée, précise — indépendante du langage.
  • Structure : Algorithme → Constantes → Variables → Début … Fin. On déclare avant.
  • Analyse : entrées → traitements → sorties, puis les étapes.
  • Affectation ← ≠ comparaison =. En C : = et ==.
  • Types : entier, réel, caractère, chaîne, booléen.
  • Conditions : Si…Alors…Sinon…FinSi ; cascade du plus restrictif au plus large ; ET, OU, NON.
  • Boucles : Pour (nombre connu) · Tant que (test avant, 0 fois possible) · Répéter…Jusqu'à (test après, 1 fois minimum). Toujours faire évoluer la condition.
  • Tableaux : indices de 0 à taille − 1.
  • Fonctions : paramètres → traitement → Retourner. À créer dès qu'on se répète.

Sources exploitées

  • Cours « Algorithmique et programmation » — Chapitre 1 (le professeur, BTS CIEL 2e année, 2026-2027)
  • TP1 — Algorithmique (5 exercices en contexte réseau)