Bonjour ! J'espère que vous êtes prêt(e) à enrichir la logique de vos algorithmes.
Introduction
Dans la leçon précédente, nous avons introduit la structure Si...Alors...Sinon, un outil puissant pour permettre à un algorithme de faire un choix entre deux options. Vous avez appris à évaluer une condition et à exécuter un bloc d'instructions si elle est vraie, ou un autre bloc si elle est fausse.
Cependant, de nombreux problèmes réels exigent de choisir non pas entre deux, mais entre trois, quatre, ou même plus de possibilités. Par exemple :
- Un feu de signalisation peut être rouge, orange ou vert.
- Une note d'examen peut donner lieu à plusieurs mentions : "Très bien", "Bien", "Passable", ou "Insuffisant".
L'objectif de cette leçon est d'apprendre à gérer ces cas multiples de manière propre et efficace. Pour cela, nous allons imbriquer les structures conditionnelles pour créer une chaîne de décisions, ce qui se traduit par la structure Si...SinonSi...Sinon. Maîtriser cette technique est essentiel pour modéliser des logiques complexes et progresser vers votre objectif d'écrire un "code clean".
1. Le défi des cas multiples
Imaginons que nous voulions écrire un algorithme qui détermine si un nombre entier est positif, négatif ou nul. Avec ce que nous savons jusqu'à présent (la structure Si...Alors...Sinon simple), nous pourrions être tenté(e) d'écrire ceci :
// Approche avec plusieurs "Si" séparés (non optimale)
Algorithme Signe_Inefficace
Variable
N : Entier
Début
Ecrire("Entrez un nombre :")
Lire(N)
Si (N > 0) Alors
Ecrire("Le nombre est positif.")
FinSi
Si (N < 0) Alors
Ecrire("Le nombre est négatif.")
FinSi
Si (N == 0) Alors
Ecrire("Le nombre est nul.")
FinSi
Fin
Cet algorithme fonctionne, mais il n'est pas efficace. Si vous entrez 10, la première condition (N > 0) est vraie, et le message "Le nombre est positif." s'affiche. Cependant, l'algorithme va quand même tester les deux autres conditions (N < 0 et N == 0), même si nous savons déjà qu'elles seront fausses. C'est un travail inutile.
La solution est de lier ces conditions entre elles pour que l'algorithme s'arrête dès qu'il a trouvé le bon cas.
2. La structure Si...SinonSi...Sinon
Pour créer une chaîne de décision, on "imbrique" les structures conditionnelles. Cela signifie que l'on place une nouvelle structure Si à l'intérieur du bloc Sinon de la précédente.
La syntaxe de base est la suivante :
Si <condition 1> Alors
// Bloc d'instructions 1
Sinon
Si <condition 2> Alors
// Bloc d'instructions 2
Sinon
// Bloc d'instructions 3 (par défaut)
FinSi
FinSi
Pour rendre cela plus lisible, les langages algorithmiques proposent une syntaxe condensée : SinonSi.
Si <condition 1> Alors
// Bloc 1 : exécuté si la condition 1 est VRAIE.
// L'algorithme saute ensuite à la fin (après FinSi).
SinonSi <condition 2> Alors
// Bloc 2 : exécuté si la condition 1 est FAUSSE ET la condition 2 est VRAIE.
Sinon
// Bloc 3 : exécuté si TOUTES les conditions précédentes sont FAUSSES.
FinSi
L'avantage fondamental est que l'évaluation s'arrête dès qu'une condition est vraie. C'est plus logique et plus performant.
Pour visualiser ce flux de décision, je vous invite à consulter la ressource suivante qui utilise l'exemple du signe d'un nombre (positif, négatif, nul).
Séance 3: Les structures conditionnelles
Ce document illustre parfaitement le concept de conditions imbriquées. Il montre comment transformer une simple décision binaire en une chaîne de décisions pour gérer trois cas distincts.
Concentrez-vous sur les diapositives 7 à 12, qui portent sur les 'Structures conditionnelles imbriquées'. Observez bien l'organigramme (diapositive 9) : il montre comment, si la première condition (N>0) est fausse, on passe à une seconde condition (N<0). Ensuite, étudiez le pseudo-code (diapositive 11) qui traduit cet organigramme avec la syntaxe 'Si... Sinon Si... Sinon'.
Comme vous l'avez vu, la version optimisée de notre algorithme Signe est bien plus élégante :
Algorithme Signe_Efficace
Variable
N : Entier
Début
Ecrire("Entrez un nombre :")
Lire(N)
Si (N > 0) Alors
Ecrire("Le nombre est positif.")
SinonSi (N < 0) Alors
Ecrire("Le nombre est négatif.")
Sinon
Ecrire("Le nombre est nul.")
FinSi
Fin
Analyse de l'exécution :
- Si l'utilisateur saisit
10: La conditionN > 0estVRAI. Le message s'affiche, et l'algorithme saute directement après leFinSi, sans tester les autres cas. - Si l'utilisateur saisit
-5: La conditionN > 0estFAUX. L'algorithme passe auSinonSi. La conditionN < 0estVRAI. Le message s'affiche, et c'est terminé. - Si l'utilisateur saisit
0: La conditionN > 0estFAUX. La conditionN < 0estFAUX. L'algorithme exécute donc le blocSinonpar défaut.
3. Mise en pratique : attribution d'une mention
Appliquons cette logique à un cas pratique un peu plus complexe : attribuer une mention en fonction d'une moyenne.
Problème : Écrire un algorithme qui demande une moyenne (sur 20) et affiche la mention correspondante :
- "Admis avec mention" si moyenne 12
- "Admis sans mention" si 10 moyenne < 12
- "Recalé" si moyenne < 10
Voici l'algorithme qui résout ce problème. Faites bien attention à l'ordre des conditions ! On commence par le cas le plus restrictif (la note la plus haute).
Algorithme Mentions
Variable
moyenne : Réel
Début
Ecrire("Entrez la moyenne du candidat :")
Lire(moyenne)
Si (moyenne >= 12) Alors
Ecrire("Admis avec mention.")
SinonSi (moyenne >= 10) Alors
// On arrive ici seulement si moyenne < 12
Ecrire("Admis sans mention.")
Sinon
// On arrive ici seulement si moyenne < 10
Ecrire("Recalé.")
FinSi
Fin
Notez qu'il n'est pas nécessaire d'écrire SinonSi (moyenne >= 10 ET moyenne < 12). Le fait d'être dans le SinonSi garantit déjà que la première condition (moyenne >= 12) était fausse. C'est ce qui rend ce code "clean" et facile à lire.
4. À vous de jouer !
Comme vous préférez la pratique, voici deux exercices pour vous entraîner. Prenez une feuille et un crayon, et essayez de les résoudre en utilisant la structure Si...SinonSi...Sinon.
Exercice 1 : Indice de Masse Corporelle (IMC)
L'OMS classe les individus en trois catégories selon leur IMC :
IMC < 18.5: Maigreur18.5 <= IMC < 25: Corpulence normaleIMC >= 25: Surpoids
Concevez un algorithme qui demande le poids (en kg) et la taille (en m) d'une personne, calcule son IMC avec la formule , puis affiche la catégorie correspondante ("Maigreur", "Corpulence normale" ou "Surpoids").
Cliquez ici pour voir une solution possible
Algorithme ClassificationIMC
Variables
poids : Réel
taille : Réel
imc : Réel
Début
Ecrire("Entrez votre poids en kg :")
Lire(poids)
Ecrire("Entrez votre taille en mètres :")
Lire(taille)
// Calcul de l'IMC
imc <-- poids / (taille * taille)
Ecrire("Votre IMC est de ", imc)
// Classification
Si (imc >= 25) Alors
Ecrire("Catégorie : Surpoids")
SinonSi (imc >= 18.5) Alors
Ecrire("Catégorie : Corpulence normale")
Sinon
Ecrire("Catégorie : Maigreur")
FinSi
Fin
Note : j'ai inversé l'ordre des tests par rapport à l'énoncé (commencer par le plus grand), mais l'autre ordre fonctionne aussi parfaitement. L'important est que les cas soient mutuellement exclusifs.
Exercice 2 : Tarif de cinéma
Un cinéma propose les tarifs suivants en fonction de l'âge :
- Moins de 13 ans : Tarif enfant (6€)
- De 13 à 64 ans : Plein tarif (10€)
- 65 ans et plus : Tarif senior (8€)
Écrivez un algorithme qui demande l'âge du spectateur et affiche le prix du billet.
Cliquez ici pour voir une solution possible
Algorithme TarifCinema
Variable
age : Entier
prix : Entier
Début
Ecrire("Quel est l'âge du spectateur ?")
Lire(age)
Si (age < 13) Alors
prix <-- 6 // Tarif enfant
SinonSi (age < 65) Alors
// On arrive ici si age >= 13
prix <-- 10 // Plein tarif
Sinon
// On arrive ici si age >= 65
prix <-- 8 // Tarif senior
FinSi
Ecrire("Le prix du billet est de ", prix, "€.")
Fin
Conclusion
Vous venez d'ajouter un outil très puissant à votre boîte à outils d'algorithmicien. Vous savez maintenant comment gérer des situations avec de multiples issues possibles de manière structurée et efficace.
Points clés à retenir :
- Pour gérer plus de deux cas mutuellement exclusifs, on utilise la structure
Si...SinonSi...Sinon. - Cette structure est une chaîne de décisions : l'évaluation s'arrête dès qu'une condition est trouvée vraie.
- C'est une méthode plus performante et plus lisible que l'utilisation de plusieurs structures
Siindépendantes. - Le bloc
Sinonfinal est optionnel mais très utile pour gérer le cas par défaut, lorsque toutes les autres conditions sont fausses.
Et après ?
Jusqu'à présent, chaque test portait sur une seule condition (age < 13, imc >= 25). Mais que faire si une décision dépend de plusieurs facteurs à la fois ? Par exemple, "Si l'utilisateur est majeur ET qu'il possède un abonnement, alors accorder la réduction".
Dans la prochaine leçon, nous apprendrons à combiner des conditions en utilisant les opérateurs logiques (ET, OU, NON), ce qui nous permettra de construire une logique de décision encore plus fine et puissante.