Chapitre 5 — Structures conditionnelles
Prendre une décision et adapter l’exécution d’un algorithme
Fiche pédagogique du chapitre
Objectifs d’apprentissage
À la fin de ce chapitre, l’étudiant devra être capable de :
- expliquer le rôle d’une structure conditionnelle dans un algorithme ;
- écrire et exécuter une condition simple ;
- choisir entre une condition simple et une condition avec alternative ;
- construire des conditions imbriquées sans oublier les cas particuliers ;
- organiser correctement l’ordre de plusieurs tests ;
- utiliser une structure à choix multiples lorsque les cas dépendent d’une même valeur ;
- combiner des comparaisons à l’aide de ET, OU et NON ;
- identifier les erreurs fréquentes dans les conditions ;
- tester une structure conditionnelle avec des cas normaux et des cas limites ;
- résoudre des problèmes complets à l’aide de décisions algorithmiques.
Prérequis
- connaître les variables, les constantes et les types simples ;
- savoir utiliser l’affectation, la lecture et l’écriture ;
- maîtriser les opérateurs relationnels : =, ≠, <, >, <= et >= ;
- savoir construire une expression logique avec ET, OU et NON.
Plan du chapitre
5.1 Condition simple
5.2 Condition avec alternative
5.3 Conditions imbriquées
5.4 Structure à choix multiples
5.5 Bonnes pratiques
Applications, synthèse, exercices et corrigé indicatif
Organisation pédagogique indicative
Activité | Durée indicative | Objectif principal |
|---|---|---|
| Cours | 3 h | Présenter les formes de décisions et leur fonctionnement. |
| Travaux dirigés | 3 h | Traduire des règles en conditions et analyser des cas limites. |
| Travaux pratiques | 2 h | Implémenter et tester les structures conditionnelles dans un langage. |
Idée directrice du chapitre Une structure conditionnelle permet à un algorithme de choisir les instructions à exécuter selon qu’une condition est vraie ou fausse. |
Introduction aux structures conditionnelles
Jusqu’à présent, les instructions étaient exécutées dans un ordre strictement séquentiel : chaque instruction était réalisée une fois, de la première à la dernière. Or, de nombreux problèmes exigent une décision. Un programme peut devoir vérifier une note, comparer des nombres, appliquer une remise, accepter ou refuser une saisie, ou choisir un traitement selon une catégorie.
Une structure conditionnelle modifie donc le chemin d’exécution. L’algorithme évalue une expression logique appelée condition. Si cette condition vaut Vrai, certaines instructions sont exécutées ; si elle vaut Faux, elles sont ignorées ou remplacées par d’autres instructions.
Élément | Rôle | Exemple |
|---|---|---|
| Condition | Expression qui produit Vrai ou Faux. | age >= 18 |
| Branche | Ensemble d’instructions associé à un résultat du test. | Afficher « Majeur » |
| Alternative | Traitement exécuté lorsque la condition est fausse. | Afficher « Mineur » |
| Cas particulier | Situation limite ou exceptionnelle à traiter explicitement. | Diviseur égal à zéro |
Principe fondamental Une condition doit toujours pouvoir être évaluée sans ambiguïté en Vrai ou Faux. |
Du besoin à la condition
Règle exprimée en français | Expression logique |
|---|---|
| La personne est majeure. | age >= 18 |
| La note est valide. | (note >= 0) ET (note <= 20) |
| Le nombre est pair. | nombre MOD 2 = 0 |
| Le mot de passe est incorrect. | mot_saisi ≠ mot_attendu |
| Le client bénéficie d’un tarif spécial. | (age < 18) OU (age >= 60) |
Représentation d’un choix
Dans un organigramme, une condition est généralement représentée par un losange. Deux flèches partent du test : l’une correspond à Vrai, l’autre à Faux. En pseudo-code, le même mécanisme est représenté par les mots Si, Alors, Sinon et FinSi.
5.1 Condition simple
5.1.1 Définition
Une condition simple exécute un bloc d’instructions uniquement lorsque la condition est vraie. Si la condition est fausse, le bloc est ignoré et l’algorithme poursuit son exécution après FinSi.
Syntaxe générale
| Si condition Alors instructions FinSi |
Étape | Action |
|---|---|
| 1 | Évaluer la condition. |
| 2 | Si elle vaut Vrai, exécuter le bloc situé entre Alors et FinSi. |
| 3 | Si elle vaut Faux, ignorer ce bloc. |
| 4 | Continuer avec l’instruction placée après FinSi. |
5.1.2 Exemple : afficher un message pour un nombre positif
| Algorithme Tester_Positif Variables nombre : Réel Début Lire(nombre) Si nombre > 0 Alors Écrire("Le nombre est positif") FinSi Écrire("Fin du traitement") Fin |
Lorsque nombre est positif, les deux messages sont affichés. Lorsque nombre est nul ou négatif, seul le message « Fin du traitement » est affiché.
Valeur de nombre | nombre > 0 | Message conditionnel | Suite de l’algorithme |
|---|---|---|---|
| 8 | Vrai | Affiché | Exécutée |
| 0 | Faux | Non affiché | Exécutée |
| -3 | Faux | Non affiché | Exécutée |
5.1.3 Exemple : éviter une division par zéro
| Si diviseur ≠ 0 Alors quotient ← dividende / diviseur Écrire(quotient) FinSi |
La division n’est exécutée que si le diviseur est valide. Cette condition évite une erreur d’exécution. Toutefois, l’utilisateur n’est pas informé lorsque le diviseur vaut zéro ; une alternative sera plus appropriée lorsque l’on souhaite afficher un message d’erreur.
5.1.4 Plusieurs instructions dans une branche
Le bloc d’une condition peut contenir une ou plusieurs instructions. Toutes ces instructions sont contrôlées par la même condition et doivent être clairement indentées.
| Si montant > 1000 Alors remise ← montant * 0,10 montant_net ← montant - remise Écrire("Remise accordée : ", remise) FinSi |
Indentation L’indentation ne remplace pas les mots FinSi dans le pseudo-code, mais elle rend immédiatement visible le bloc contrôlé par la condition. |
5.2 Condition avec alternative
5.2.1 Définition
La condition avec alternative permet de choisir entre deux traitements exclusifs. Le premier bloc est exécuté lorsque la condition est vraie ; le second, introduit par Sinon, est exécuté lorsqu’elle est fausse. Une seule des deux branches est exécutée.
Syntaxe générale
| Si condition Alors instructions_si_vrai Sinon instructions_si_faux FinSi |
5.2.2 Exemple : déterminer la parité
| Algorithme Parite Variables nombre : Entier Début Lire(nombre) Si nombre MOD 2 = 0 Alors Écrire("Nombre pair") Sinon Écrire("Nombre impair") FinSi Fin |
Nombre | nombre MOD 2 | Condition | Branche exécutée |
|---|---|---|---|
| 12 | 0 | Vrai | Alors : pair |
| 7 | 1 | Faux | Sinon : impair |
| 0 | 0 | Vrai | Alors : pair |
| -5 | Selon la convention du langage | Faux pour le test = 0 | Sinon : impair |
5.2.3 Exemple : admission d’un étudiant
Dans une règle simplifiée, un étudiant est admis lorsque sa moyenne est supérieure ou égale à 10. L’alternative permet de produire une décision dans les deux cas.
| Si moyenne >= 10 Alors decision ← "Admis" Sinon decision ← "Non admis" FinSi Écrire(decision) |
5.2.4 Affectation conditionnelle d’une valeur
Les branches peuvent servir à affecter une valeur différente à une même variable. Cette technique est fréquente pour calculer un tarif, une catégorie, une décision ou un message.
| Si age < 12 Alors tarif ← 20 Sinon tarif ← 35 FinSi |
Exclusivité Dans une structure Si…Sinon, les deux branches sont mutuellement exclusives : elles ne peuvent jamais être exécutées au cours du même passage. |
5.2.5 Condition opposée
Il est parfois possible d’inverser la condition et d’échanger les branches. Par exemple, « si moyenne >= 10 alors admis, sinon ajourné » peut être reformulé par « si moyenne < 10 alors ajourné, sinon admis ». La formulation la plus claire doit être privilégiée.
Formulation directe | Formulation inversée |
|---|---|
| Si stock > 0 Alors disponible Sinon indisponible | Si stock <= 0 Alors indisponible Sinon disponible |
| Si mot_correct Alors accès Sinon refus | Si NON(mot_correct) Alors refus Sinon accès |
5.3 Conditions imbriquées
5.3.1 Principe
Une condition est imbriquée lorsqu’une structure Si est placée à l’intérieur d’une branche d’une autre structure Si. L’imbrication permet d’enchaîner plusieurs décisions dépendantes. Elle est utile lorsqu’un deuxième test n’a de sens que si un premier test a déjà été satisfait.
Structure imbriquée générale
| Si condition1 Alors Si condition2 Alors instructions Sinon autres_instructions FinSi Sinon traitement_alternatif FinSi |
5.3.2 Exemple : accès à une ressource
| Si utilisateur_authentifie Alors Si compte_actif Alors Écrire("Accès autorisé") Sinon Écrire("Compte désactivé") FinSi Sinon Écrire("Authentification requise") FinSi |
Le test compte_actif n’est effectué que si l’utilisateur est déjà authentifié. Cet ordre évite un traitement inutile et correspond à la logique du problème.
5.3.3 Enchaînement de plusieurs tests
Lorsqu’il existe plus de deux catégories, on peut enchaîner plusieurs alternatives. En pseudo-code, cette forme est souvent écrite avec Sinon Si pour réduire visuellement le nombre de niveaux d’imbrication.
| Si note >= 16 Alors mention ← "Très bien" Sinon Si note >= 14 Alors mention ← "Bien" Sinon Si note >= 12 Alors mention ← "Assez bien" Sinon Si note >= 10 Alors mention ← "Passable" Sinon mention ← "Ajourné" FinSi |
5.3.4 Importance de l’ordre des conditions
Dans une chaîne de tests, les conditions sont évaluées de haut en bas. Dès qu’une condition est vraie, sa branche est exécutée et les tests suivants sont ignorés. L’ordre doit donc être choisi avec soin.
Ordre incorrect | Conséquence | Ordre correct |
|---|---|---|
| Tester note >= 10 avant note >= 16 | Une note de 18 est classée « Passable » dès le premier test. | Tester les seuils du plus élevé au plus faible. |
| Tester age >= 18 avant age >= 65 | Une personne de 70 ans entre dans la catégorie adulte générale. | Tester d’abord la catégorie la plus spécifique. |
| Tester x > 0 avant x > 100 | La catégorie « supérieur à 100 » devient inaccessible. | Tester x > 100 avant x > 0. |
Règle pratique Dans une chaîne de seuils croissants, tester généralement du seuil le plus élevé vers le plus faible. Dans une chaîne de seuils décroissants, procéder dans l’ordre inverse. |
5.3.5 Gestion des cas particuliers
Un algorithme correct doit traiter les valeurs limites et les situations exceptionnelles. Avant de résoudre le cas général, il faut souvent vérifier les données invalides ou les cas impossibles.
- vérifier qu’une note appartient à [0, 20] avant de lui attribuer une mention ;
- traiter a = 0 avant de résoudre l’équation ax + b = 0 ;
- vérifier le signe du discriminant avant de calculer une racine carrée ;
- tester un stock nul avant d’effectuer une décrémentation ;
- distinguer l’égalité dans une comparaison de maximum.
Validation avant décision
| Si note < 0 OU note > 20 Alors Écrire("Note invalide") Sinon Si note >= 10 Alors Écrire("Admis") Sinon Écrire("Ajourné") FinSi FinSi |
5.3.6 Limiter la profondeur d’imbrication
Une imbrication excessive rend l’algorithme difficile à lire, à tester et à modifier. Lorsque plusieurs niveaux s’accumulent, il est préférable de simplifier les conditions, de traiter les erreurs en premier, ou de décomposer le problème en fonctions.
Approche difficile | Approche recommandée |
|---|---|
| Plusieurs Si imbriqués pour vérifier une note. | Valider d’abord la note, puis traiter la mention. |
| Une seule expression très longue et ambiguë. | Nommer des sous-conditions booléennes. |
| Répéter le même test dans plusieurs branches. | Calculer le test une fois ou créer une fonction. |
5.4 Structure à choix multiples
5.4.1 Définition
La structure à choix multiples sélectionne un traitement parmi plusieurs cas en fonction de la valeur d’une même expression. Elle est particulièrement adaptée aux menus, codes, jours, mois, catégories et états discrets.
Syntaxe générale
| Selon valeur Faire Cas valeur1 : instructions Cas valeur2 : instructions Sinon : instructions_par_defaut FinSelon |
5.4.2 Fonctionnement
1. Évaluer une seule fois l’expression placée après Selon.
2. Comparer sa valeur aux différents cas proposés.
3. Exécuter les instructions du cas correspondant.
4. Exécuter la branche Sinon lorsqu’aucun cas ne correspond.
5. Poursuivre après FinSelon.
5.4.3 Exemple : menu d’opérations
| Écrire("1. Addition") Écrire("2. Soustraction") Écrire("3. Multiplication") Lire(choix) Selon choix Faire Cas 1 : resultat ← a + b Cas 2 : resultat ← a - b Cas 3 : resultat ← a * b Sinon : Écrire("Choix invalide") FinSelon |
5.4.4 Exemple : numéro du jour
| Selon numero_jour Faire Cas 1 : jour ← "Lundi" Cas 2 : jour ← "Mardi" Cas 3 : jour ← "Mercredi" Cas 4 : jour ← "Jeudi" Cas 5 : jour ← "Vendredi" Cas 6 : jour ← "Samedi" Cas 7 : jour ← "Dimanche" Sinon : jour ← "Numéro invalide" FinSelon Écrire(jour) |
5.4.5 Quand utiliser Selon ?
Situation | Structure conseillée | Raison |
|---|---|---|
| Comparer une variable à plusieurs valeurs précises. | Selon | Lecture directe des différents cas. |
| Tester des intervalles ou des seuils. | Si…Sinon Si | Les cas reposent sur des relations, pas uniquement sur l’égalité. |
| Combiner plusieurs variables. | Si avec expression logique | La décision dépend de plusieurs conditions. |
| Traiter seulement un cas particulier. | Si simple | Une structure multiple serait inutile. |
Branche par défaut La branche Sinon est fortement recommandée. Elle permet de traiter une valeur inattendue et évite de laisser le résultat indéfini. |
5.4.6 Limites de la structure à choix multiples
Selon n’est pas toujours adapté. Dans la plupart des pseudo-codes, les cas sont des valeurs constantes et distinctes. Pour tester « note >= 10 », « age entre 18 et 65 » ou une combinaison de conditions, la structure Si reste plus appropriée.
5.5 Bonnes pratiques
5.5.1 Éviter les conditions inutilement complexes
Une condition longue peut être correcte tout en restant difficile à comprendre. Il est conseillé de décomposer l’expression en sous-conditions nommées, particulièrement lorsque plusieurs règles métier sont combinées.
Décomposition en variables booléennes
| age_valide ← (age >= 18) ET (age <= 65) abonnement_valide ← abonnement_actif ET NON(abonnement_expire) acces_autorise ← age_valide ET abonnement_valide |
5.5.2 Regrouper les expressions logiques
Les parenthèses précisent l’intention et évitent de dépendre uniquement des règles de priorité. Elles sont indispensables lorsque ET et OU apparaissent dans la même expression.
Expression | Interprétation |
|---|---|
| administrateur OU (membre ET actif) | L’administrateur est toujours autorisé ; le membre doit être actif. |
| (administrateur OU membre) ET actif | Tout utilisateur, y compris l’administrateur, doit être actif. |
5.5.3 Prévoir les cas limites
Les cas limites se trouvent généralement aux frontières des intervalles ou dans les valeurs exceptionnelles : 0, valeur minimale, valeur maximale, égalité, chaîne vide ou donnée absente.
Problème | Cas limites à tester |
|---|---|
| Admission avec moyenne >= 10 | 9,99 ; 10 ; 10,01 |
| Âge compris entre 18 et 65 | 17 ; 18 ; 65 ; 66 |
| Résolution de ax + b = 0 | a = 0 et b = 0 ; a = 0 et b ≠ 0 ; a ≠ 0 |
| Remise à partir de 1000 | 999,99 ; 1000 ; 1000,01 |
5.5.4 Utiliser des noms explicites
Les variables booléennes doivent exprimer une proposition claire. Un nom tel que est_majeur ou note_valide rend une condition plus lisible qu’un nom générique comme test1 ou ok.
Nom peu explicite | Nom recommandé |
|---|---|
| test | note_valide |
| ok | paiement_accepte |
| x | utilisateur_authentifie |
| condition2 | stock_disponible |
5.5.5 Éviter les comparaisons booléennes inutiles
Lorsqu’une variable est déjà booléenne, il n’est pas nécessaire de la comparer à Vrai. La forme directe est plus claire.
Forme lourde | Forme recommandée |
|---|---|
| Si est_connecte = Vrai Alors | Si est_connecte Alors |
| Si erreur = Faux Alors | Si NON(erreur) Alors |
5.5.6 Ne pas confondre affectation et comparaison
Erreur fréquente x ← 5 affecte la valeur 5 à x. x = 5 vérifie si x vaut 5. Dans un langage de programmation, les symboles utilisés peuvent être différents. |
5.5.7 Toujours initialiser le résultat
Chaque chemin possible doit attribuer une valeur aux variables qui seront utilisées ensuite. Une branche manquante peut laisser une variable non initialisée.
| Si note >= 10 Alors decision ← "Admis" Sinon decision ← "Ajourné" FinSi Écrire(decision) |
5.5.8 Tester toutes les branches
Un test complet doit provoquer l’exécution de chaque branche au moins une fois. Pour une chaîne de cinq catégories, il faut prévoir au minimum un jeu d’essai par catégorie, ainsi que des valeurs frontières et invalides.
Applications guidées
Application 1 — Maximum de deux nombres
Le problème consiste à lire deux nombres et à afficher le plus grand. Le cas d’égalité doit être traité explicitement afin de ne pas annoncer arbitrairement l’un des nombres comme strictement supérieur.
| Algorithme Maximum_Deux_Nombres Variables a, b : Réels Début Lire(a, b) Si a > b Alors Écrire(a, " est le maximum") Sinon Si b > a Alors Écrire(b, " est le maximum") Sinon Écrire("Les deux nombres sont égaux") FinSi Fin |
a | b | Résultat attendu |
|---|---|---|
| 8 | 3 | 8 est le maximum |
| -2 | 5 | 5 est le maximum |
| 4 | 4 | Les deux nombres sont égaux |
Application 2 — Maximum de trois nombres
Une première méthode consiste à comparer progressivement les valeurs en conservant le maximum courant. Cette méthode réduit l’imbrication et se généralise facilement à un plus grand nombre de valeurs.
| Algorithme Maximum_Trois_Nombres Variables a, b, c, maximum : Réels Début Lire(a, b, c) maximum ← a Si b > maximum Alors maximum ← b FinSi Si c > maximum Alors maximum ← c FinSi Écrire("Maximum : ", maximum) Fin |
Avantage La variable maximum représente le meilleur résultat connu après chaque comparaison. Cette stratégie prépare l’étude du maximum dans un tableau. |
Application 3 — Déterminer si un étudiant est admis
La règle suivante est utilisée : la note doit être valide et la moyenne doit être au moins égale à 10. Une valeur hors de [0, 20] est signalée comme invalide.
| Algorithme Decision_Etudiant Variables moyenne : Réel Début Lire(moyenne) Si moyenne < 0 OU moyenne > 20 Alors Écrire("Moyenne invalide") Sinon Si moyenne >= 10 Alors Écrire("Étudiant admis") Sinon Écrire("Étudiant ajourné") FinSi Fin |
Application 4 — Classer une note par mention
On adopte le classement indicatif suivant : Très bien à partir de 16, Bien à partir de 14, Assez bien à partir de 12, Passable à partir de 10, et Ajourné en dessous de 10. La note doit être comprise entre 0 et 20.
Intervalle | Mention |
|---|---|
| [16, 20] | Très bien |
| [14, 16[ | Bien |
| [12, 14[ | Assez bien |
| [10, 12[ | Passable |
| [0, 10[ | Ajourné |
| Si note < 0 OU note > 20 Alors mention ← "Note invalide" Sinon Si note >= 16 Alors mention ← "Très bien" Sinon Si note >= 14 Alors mention ← "Bien" Sinon Si note >= 12 Alors mention ← "Assez bien" Sinon Si note >= 10 Alors mention ← "Passable" Sinon mention ← "Ajourné" FinSi Écrire(mention) |
Application 5 — Résoudre une équation du premier degré
On cherche les solutions réelles de l’équation ax + b = 0. Le cas a = 0 doit être étudié avant la formule x = -b / a.
Valeurs | Interprétation | Résultat |
|---|---|---|
| a ≠ 0 | Équation du premier degré | Une solution x = -b / a |
| a = 0 et b = 0 | Égalité 0 = 0 | Une infinité de solutions |
| a = 0 et b ≠ 0 | Égalité impossible | Aucune solution |
| Algorithme Equation_Premier_Degre Variables a, b, x : Réels Début Lire(a, b) Si a ≠ 0 Alors x ← -b / a Écrire("Solution : ", x) Sinon Si b = 0 Alors Écrire("Une infinité de solutions") Sinon Écrire("Aucune solution") FinSi Fin |
Application 6 — Résoudre une équation du second degré
On étudie ax² + bx + c = 0 dans l’ensemble des réels. Il faut d’abord vérifier que a ≠ 0. Ensuite, le discriminant Δ = b² - 4ac détermine le nombre de solutions réelles.
Condition | Nombre de solutions réelles | Formule |
|---|---|---|
| a = 0 | Le problème devient une équation du premier degré. | Traiter bx + c = 0 |
| a ≠ 0 et Δ > 0 | Deux solutions distinctes | x1 = (-b - √Δ)/(2a), x2 = (-b + √Δ)/(2a) |
| a ≠ 0 et Δ = 0 | Une solution double | x0 = -b/(2a) |
| a ≠ 0 et Δ < 0 | Aucune solution réelle | Pas de racine réelle |
| Algorithme Equation_Second_Degre Variables a, b, c, delta, x0, x1, x2 : Réels Début Lire(a, b, c) Si a = 0 Alors Écrire("Ce n’est pas une équation du second degré") Sinon delta ← b ^ 2 - 4 * a * c Si delta > 0 Alors x1 ← (-b - Racine(delta)) / (2 * a) x2 ← (-b + Racine(delta)) / (2 * a) Écrire("Deux solutions : ", x1, " et ", x2) Sinon Si delta = 0 Alors x0 ← -b / (2 * a) Écrire("Une solution double : ", x0) Sinon Écrire("Aucune solution réelle") FinSi FinSi Fin |
Précision numérique Dans un programme utilisant des nombres réels, tester exactement delta = 0 peut être délicat à cause des approximations. Une tolérance peut être utilisée dans un cours plus avancé. |
Application 7 — Calculer le montant d’une remise
On considère le barème suivant : aucune remise sous 500, 5 % à partir de 500, 10 % à partir de 1000 et 15 % à partir de 2000. Les seuils doivent être testés du plus élevé au plus faible.
Montant des achats | Taux de remise |
|---|---|
| montant >= 2000 | 15 % |
| 1000 <= montant < 2000 | 10 % |
| 500 <= montant < 1000 | 5 % |
| montant < 500 | 0 % |
| Algorithme Calcul_Remise Variables montant, taux, remise, montant_net : Réels Début Lire(montant) Si montant < 0 Alors Écrire("Montant invalide") Sinon Si montant >= 2000 Alors taux ← 0,15 Sinon Si montant >= 1000 Alors taux ← 0,10 Sinon Si montant >= 500 Alors taux ← 0,05 Sinon taux ← 0 FinSi remise ← montant * taux montant_net ← montant - remise Écrire("Remise : ", remise) Écrire("Montant à payer : ", montant_net) FinSi Fin |
Montant | Taux | Remise | Montant net |
|---|---|---|---|
| 400 | 0 % | 0 | 400 |
| 500 | 5 % | 25 | 475 |
| 1500 | 10 % | 150 | 1350 |
| 2500 | 15 % | 375 | 2125 |
Application complémentaire — Calculatrice à choix multiples
Cette application illustre l’association d’une structure Selon et d’une condition destinée à protéger la division.
| Selon operation Faire Cas "+" : resultat ← a + b Cas "-" : resultat ← a - b Cas "*" : resultat ← a * b Cas "/" : Si b ≠ 0 Alors resultat ← a / b Sinon Écrire("Division impossible") FinSi Sinon : Écrire("Opération inconnue") FinSelon |
Traçage d’une structure conditionnelle
Le traçage manuel consiste à suivre l’évolution des variables et le chemin choisi par les conditions. Pour chaque test, on note sa valeur de vérité et la branche exécutée.
Algorithme à tracer
| a ← 12 b ← 7 maximum ← a Si b > maximum Alors maximum ← b FinSi Écrire(maximum) |
Étape | Instruction ou test | a | b | maximum | Observation |
|---|---|---|---|---|---|
| 1 | a ← 12 | 12 | — | — | Affectation |
| 2 | b ← 7 | 12 | 7 | — | Affectation |
| 3 | maximum ← a | 12 | 7 | 12 | Maximum initial |
| 4 | b > maximum | 12 | 7 | 12 | Faux : branche ignorée |
| 5 | Écrire(maximum) | 12 | 7 | 12 | Affiche 12 |
Erreurs fréquentes et méthodes de correction
Erreur | Conséquence | Correction |
|---|---|---|
| Utiliser = à la place de ← ou inversement. | Comparaison et affectation sont confondues. | Distinguer clairement le test de la modification. |
| Oublier le cas d’égalité. | Résultat incomplet pour les valeurs identiques. | Ajouter une branche ou choisir >= / <=. |
| Tester les seuils dans le mauvais ordre. | Une branche générale masque une branche spécifique. | Commencer par le cas le plus restrictif. |
| Utiliser ET au lieu de OU pour un intervalle extérieur. | Condition impossible ou incorrecte. | Vérifier la règle avec des valeurs exemples. |
| Ne pas valider une donnée. | Calcul incohérent ou erreur d’exécution. | Traiter d’abord les entrées invalides. |
| Laisser une variable non initialisée dans une branche. | Valeur indéfinie après FinSi. | Affecter une valeur sur tous les chemins. |
| Imbrication trop profonde. | Algorithme difficile à comprendre. | Décomposer en sous-conditions ou fonctions. |
Méthode de conception d’une condition
1. Écrire la règle en français avec des mots simples.
2. Identifier les variables et les valeurs comparées.
3. Déterminer si la règle exige une seule branche, deux branches ou plusieurs cas.
4. Construire l’expression logique sans oublier les parenthèses.
5. Repérer les cas limites et les données invalides.
6. Vérifier que toutes les variables de sortie sont affectées.
7. Tester chaque branche avec au moins un jeu d’essai.
8. Simplifier la condition si sa lecture reste difficile.
Exemples de conditions incorrectes
Condition incorrecte | Problème | Correction |
|---|---|---|
| 18 <= age <= 65 | Cette écriture n’est pas valide dans tous les langages. | (age >= 18) ET (age <= 65) |
| age < 18 ET age >= 60 | Les deux conditions ne peuvent pas être vraies simultanément. | (age < 18) OU (age >= 60) |
| nombre / 2 = 0 | Teste une division, pas la parité. | nombre MOD 2 = 0 |
| note >= 10 OU note <= 20 | Presque toute valeur satisfait au moins une partie. | (note >= 10) ET (note <= 20) |
| Si choix = 1 OU 2 Alors | La seconde partie n’est pas une comparaison. | Si choix = 1 OU choix = 2 Alors |
Synthèse du chapitre
Structure | Nombre de chemins | Usage principal | Exemple |
|---|---|---|---|
| Si simple | Un bloc facultatif | Exécuter une action dans un seul cas. | Afficher un avertissement. |
| Si…Sinon | Deux chemins exclusifs | Choisir entre deux résultats. | Pair ou impair. |
| Si imbriqués / Sinon Si | Plusieurs chemins | Traiter des seuils ou décisions dépendantes. | Attribuer une mention. |
| Selon | Plusieurs cas discrets | Choisir selon une valeur précise. | Menu ou numéro de jour. |
À retenir
- une condition produit toujours Vrai ou Faux ;
- une condition simple peut ne rien exécuter lorsque le test est faux ;
- dans Si…Sinon, une seule branche est exécutée ;
- l’ordre des tests est essentiel dans une chaîne de seuils ;
- les cas invalides et les frontières doivent être traités explicitement ;
- Selon convient aux valeurs distinctes, mais pas toujours aux intervalles ;
- des noms booléens explicites rendent les conditions plus lisibles ;
- toutes les branches doivent être testées.
Correspondances fréquentes avec des langages
Concept | Pseudo-code | Python | C / Java |
|---|---|---|---|
| Condition simple | Si c Alors … FinSi | if c: … | if (c) { … } |
| Alternative | Sinon | else: | else { … } |
| Chaîne de tests | Sinon Si | elif | else if |
| Choix multiple | Selon / Cas | match / case selon la version | switch / case |
| ET | ET | and | && |
| OU | OU | or | || |
| NON | NON | not | ! |
Important La syntaxe exacte dépend du langage. Le raisonnement algorithmique reste cependant identique : évaluer une condition et choisir un chemin d’exécution. |
Travaux dirigés — Exercices
Exercice 1 — Identifier la structure adaptée
Pour chaque situation, indiquer s’il convient d’utiliser un Si simple, un Si…Sinon, une chaîne de Sinon Si ou une structure Selon :
- afficher un avertissement lorsque le stock est inférieur à 5 ;
- afficher si un nombre est positif ou non positif ;
- attribuer une catégorie selon quatre intervalles d’âge ;
- afficher le nom d’un mois à partir de son numéro ;
- appliquer une pénalité uniquement lorsque le délai est dépassé.
Exercice 2 — Corriger les conditions
| Si note >= 0 OU note <= 20 Alors Écrire("Note valide") FinSi Si age < 18 ET age >= 60 Alors Écrire("Tarif réduit") FinSi Si nombre / 2 = 0 Alors Écrire("Pair") FinSi |
Exercice 3 — Signe d’un nombre
Écrire un algorithme qui lit un nombre et affiche s’il est positif, négatif ou nul.
Exercice 4 — Maximum et égalité
Écrire un algorithme qui lit trois nombres, affiche leur maximum et indique si ce maximum est partagé par plusieurs valeurs.
Exercice 5 — Mention
Écrire l’algorithme de classement d’une note selon les mentions du cours. Ajouter la validation de l’intervalle [0, 20].
Exercice 6 — Année bissextile
Une année est bissextile si elle est divisible par 400, ou si elle est divisible par 4 sans être divisible par 100. Écrire l’expression logique puis l’algorithme de décision.
Exercice 7 — Tarif de livraison
Le coût de livraison est de 30 unités pour une commande inférieure à 200, de 15 unités entre 200 et 499,99, et gratuit à partir de 500. Les montants négatifs sont invalides. Écrire l’algorithme complet.
Exercice 8 — Calculatrice
Lire deux nombres et un opérateur parmi +, -, *, /. Utiliser Selon pour choisir le calcul. Protéger la division par zéro et traiter un opérateur invalide.
Exercice 9 — Triangle
Lire trois longueurs positives. Vérifier d’abord qu’elles peuvent former un triangle. Si oui, déterminer si le triangle est équilatéral, isocèle ou scalène.
Rappel Trois longueurs a, b et c forment un triangle si chacune est strictement inférieure à la somme des deux autres. |
Exercice 10 — Impôt simplifié
Calculer un impôt selon un revenu : 0 % sous 30 000, 10 % entre 30 000 et 59 999, 20 % entre 60 000 et 99 999, et 30 % à partir de 100 000. Dans cet exercice simplifié, le taux est appliqué à la totalité du revenu.
Corrigé indicatif des travaux dirigés
Corrigé de l’exercice 1
Situation | Structure adaptée |
|---|---|
| Avertissement si stock < 5 | Si simple |
| Nombre positif ou non positif | Si…Sinon |
| Quatre intervalles d’âge | Chaîne de Sinon Si |
| Nom d’un mois à partir de son numéro | Selon |
| Pénalité uniquement si délai dépassé | Si simple |
Corrigé de l’exercice 2
| Si note >= 0 ET note <= 20 Alors Écrire("Note valide") FinSi Si age < 18 OU age >= 60 Alors Écrire("Tarif réduit") FinSi Si nombre MOD 2 = 0 Alors Écrire("Pair") FinSi |
Corrigé de l’exercice 3
| Si nombre > 0 Alors Écrire("Positif") Sinon Si nombre < 0 Alors Écrire("Négatif") Sinon Écrire("Nul") FinSi |
Corrigé de l’exercice 4
| maximum ← a Si b > maximum Alors maximum ← b FinSi Si c > maximum Alors maximum ← c FinSi compteur ← 0 Si a = maximum Alors compteur ← compteur + 1 FinSi Si b = maximum Alors compteur ← compteur + 1 FinSi Si c = maximum Alors compteur ← compteur + 1 FinSi Écrire("Maximum : ", maximum) Si compteur > 1 Alors Écrire("Le maximum est partagé") FinSi |
Corrigé de l’exercice 5
Le corrigé correspond à l’application « Classer une note par mention ». L’ordre décroissant des seuils évite qu’une note élevée soit capturée par une catégorie plus générale.
Corrigé de l’exercice 6
| bissextile ← (annee MOD 400 = 0) OU ((annee MOD 4 = 0) ET (annee MOD 100 ≠ 0)) Si bissextile Alors Écrire("Année bissextile") Sinon Écrire("Année non bissextile") FinSi |
Année | Résultat |
|---|---|
| 2000 | Bissextile : divisible par 400 |
| 1900 | Non bissextile : divisible par 100 mais pas par 400 |
| 2024 | Bissextile : divisible par 4 et non par 100 |
| 2025 | Non bissextile |
Corrigé de l’exercice 7
| Si montant < 0 Alors Écrire("Montant invalide") Sinon Si montant >= 500 Alors livraison ← 0 Sinon Si montant >= 200 Alors livraison ← 15 Sinon livraison ← 30 FinSi Écrire("Frais de livraison : ", livraison) |
Corrigé de l’exercice 8
| Selon operateur Faire Cas "+" : Écrire(a + b) Cas "-" : Écrire(a - b) Cas "*" : Écrire(a * b) Cas "/" : Si b ≠ 0 Alors Écrire(a / b) Sinon Écrire("Division par zéro impossible") FinSi Sinon : Écrire("Opérateur invalide") FinSelon |
Corrigé de l’exercice 9
| Si a <= 0 OU b <= 0 OU c <= 0 Alors Écrire("Longueurs invalides") Sinon Si a >= b + c OU b >= a + c OU c >= a + b Alors Écrire("Ces longueurs ne forment pas un triangle") Sinon Si a = b ET b = c Alors Écrire("Triangle équilatéral") Sinon Si a = b OU a = c OU b = c Alors Écrire("Triangle isocèle") Sinon Écrire("Triangle scalène") FinSi |
Corrigé de l’exercice 10
| Si revenu < 0 Alors Écrire("Revenu invalide") Sinon Si revenu >= 100000 Alors taux ← 0,30 Sinon Si revenu >= 60000 Alors taux ← 0,20 Sinon Si revenu >= 30000 Alors taux ← 0,10 Sinon taux ← 0 FinSi impot ← revenu * taux Écrire("Impôt : ", impot) |
Glossaire
Terme | Définition |
|---|---|
| Condition | Expression logique évaluée en Vrai ou Faux. |
| Branche | Bloc d’instructions associé à un résultat de condition. |
| Alternative | Traitement exécuté lorsque la condition principale est fausse. |
| Imbrication | Placement d’une structure conditionnelle dans une autre. |
| Cas limite | Valeur située à la frontière d’une règle ou d’un intervalle. |
| Choix multiple | Sélection d’un cas parmi plusieurs valeurs distinctes. |
| Branche par défaut | Traitement utilisé lorsqu’aucun cas explicite ne correspond. |
| Chemin d’exécution | Suite des instructions effectivement exécutées pour un jeu de données. |
Auto-évaluation
L’étudiant peut considérer le chapitre acquis s’il sait répondre positivement aux questions suivantes :
- Puis-je choisir entre Si simple et Si…Sinon ?
- Puis-je traduire une règle en expression logique ?
- Puis-je ordonner correctement plusieurs seuils ?
- Puis-je traiter les valeurs invalides et les cas d’égalité ?
- Puis-je expliquer le chemin suivi par une condition imbriquée ?
- Puis-je utiliser Selon pour un menu ou une valeur discrète ?
- Puis-je réduire une condition trop complexe ?
- Puis-je construire des jeux d’essai couvrant toutes les branches ?
- Puis-je résoudre un problème complet avec plusieurs décisions ?
Conclusion Les structures conditionnelles donnent à l’algorithme la capacité de décider. Leur correction dépend autant de la syntaxe que de la qualité des conditions, de l’ordre des tests et du traitement des cas limites. |