Leçon 5 sur 20

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

Cours3 hPrésenter les formes de décisions et leur fonctionnement.
Travaux dirigés3 hTraduire des règles en conditions et analyser des cas limites.
Travaux pratiques2 hImplé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

ConditionExpression qui produit Vrai ou Faux.age >= 18
BrancheEnsemble d’instructions associé à un résultat du test.Afficher « Majeur »
AlternativeTraitement exécuté lorsque la condition est fausse.Afficher « Mineur »
Cas particulierSituation 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.
2Si elle vaut Vrai, exécuter le bloc situé entre Alors et FinSi.
3Si elle vaut Faux, ignorer ce bloc.
4Continuer 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

8VraiAffichéExécutée
0FauxNon affichéExécutée
-3FauxNon 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

120VraiAlors : pair
71FauxSinon : impair
00VraiAlors : pair
-5Selon la convention du langageFaux pour le test = 0Sinon : 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 indisponibleSi stock <= 0 Alors indisponible Sinon disponible
Si mot_correct Alors accès Sinon refusSi 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 >= 16Une 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 >= 65Une 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 > 100La 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.SelonLecture directe des différents cas.
Tester des intervalles ou des seuils.Si…Sinon SiLes cas reposent sur des relations, pas uniquement sur l’égalité.
Combiner plusieurs variables.Si avec expression logiqueLa décision dépend de plusieurs conditions.
Traiter seulement un cas particulier.Si simpleUne 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 actifTout 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 >= 109,99 ; 10 ; 10,01
Âge compris entre 18 et 6517 ; 18 ; 65 ; 66
Résolution de ax + b = 0a = 0 et b = 0 ; a = 0 et b ≠ 0 ; a ≠ 0
Remise à partir de 1000999,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é

testnote_valide
okpaiement_accepte
xutilisateur_authentifie
condition2stock_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 AlorsSi est_connecte Alors
Si erreur = Faux AlorsSi 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

838 est le maximum
-255 est le maximum
44Les 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 = 0Une infinité de solutions
a = 0 et b ≠ 0Égalité impossibleAucune 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 = 0Le problème devient une équation du premier degré.Traiter bx + c = 0
a ≠ 0 et Δ > 0Deux solutions distinctesx1 = (-b - √Δ)/(2a), x2 = (-b + √Δ)/(2a)
a ≠ 0 et Δ = 0Une solution doublex0 = -b/(2a)
a ≠ 0 et Δ < 0Aucune solution réellePas 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 >= 200015 %
1000 <= montant < 200010 %
500 <= montant < 10005 %
montant < 5000 %

 

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

4000 %0400
5005 %25475
150010 %1501350
250015 %3752125

 

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

1a ← 1212Affectation
2b ← 7127Affectation
3maximum ← a12712Maximum initial
4b > maximum12712Faux : branche ignorée
5Écrire(maximum)12712Affiche 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 <= 65Cette écriture n’est pas valide dans tous les langages.(age >= 18) ET (age <= 65)
age < 18 ET age >= 60Les deux conditions ne peuvent pas être vraies simultanément.(age < 18) OU (age >= 60)
nombre / 2 = 0Teste une division, pas la parité.nombre MOD 2 = 0
note >= 10 OU note <= 20Presque toute valeur satisfait au moins une partie.(note >= 10) ET (note <= 20)
Si choix = 1 OU 2 AlorsLa 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 simpleUn bloc facultatifExécuter une action dans un seul cas.Afficher un avertissement.
Si…SinonDeux chemins exclusifsChoisir entre deux résultats.Pair ou impair.
Si imbriqués / Sinon SiPlusieurs cheminsTraiter des seuils ou décisions dépendantes.Attribuer une mention.
SelonPlusieurs cas discretsChoisir 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 simpleSi c Alors … FinSiif c: …if (c) { … }
AlternativeSinonelse:else { … }
Chaîne de testsSinon Sielifelse if
Choix multipleSelon / Casmatch / case selon la versionswitch / case
ETETand&&
OUOUor||
NONNONnot!

 

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 < 5Si simple
Nombre positif ou non positifSi…Sinon
Quatre intervalles d’âgeChaîne de Sinon Si
Nom d’un mois à partir de son numéroSelon
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

2000Bissextile : divisible par 400
1900Non bissextile : divisible par 100 mais pas par 400
2024Bissextile : divisible par 4 et non par 100
2025Non 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

ConditionExpression logique évaluée en Vrai ou Faux.
BrancheBloc d’instructions associé à un résultat de condition.
AlternativeTraitement exécuté lorsque la condition principale est fausse.
ImbricationPlacement d’une structure conditionnelle dans une autre.
Cas limiteValeur située à la frontière d’une règle ou d’un intervalle.
Choix multipleSélection d’un cas parmi plusieurs valeurs distinctes.
Branche par défautTraitement utilisé lorsqu’aucun cas explicite ne correspond.
Chemin d’exécutionSuite 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.