Aller au contenu

Algorithmique · Chapitre 13 · Conditions et boucles

Combiner des décisions

Lisez des conditions imbriquées, déterminez quels tests sont exécutés et simplifiez une règle de tarif sans changer son résultat.

Par · Cours gratuit

Ce que vous allez apprendre

  • Identifier la condition qui autorise l'entrée dans un sous-bloc.
  • Tracer une décision à deux niveaux.
  • Comparer une imbrication et une chaîne de conditions.

Prérequis. Savoir lire des conditions simples et plusieurs branches.

Une règle de tarif fictive

Pour cet exercice, le tarif est de 5 unités avant 12 ans. À partir de 12 ans, il est de 7 unités pour les étudiants et de 10 pour les autres. L'âge est un entier non négatif et student est un booléen. Le statut étudiant n'intervient donc pas pour une personne de 11 ans.

Définir une condition imbriquée et ses entrées

Une condition imbriquée est un choix situé à l'intérieur d'une branche d'un autre choix. Pour l'atteindre, l'exécution doit d'abord entrer dans cette branche. Le programme reçoit ici age, un âge entier non négatif, et student, un booléen indiquant le statut étudiant. Le mot anglais student est un nom de variable ; il ne réalise pas lui-même une vérification administrative.

La règle fictive choisie pour l'exercice est entièrement précisée : avant 12 ans, le tarif vaut 5 unités monétaires ; à partir de 12 ans, il vaut 7 pour un étudiant et 10 sinon. Ces montants servent uniquement d'exemple. Pour un enfant de 8 ans, la réponse ne dépend pas du statut étudiant : le test intérieur n'est pas exécuté.

Un chemin d'exécution est la succession des instructions réellement parcourues pour une entrée. Avec 16 ans et student = true, on évite la première branche, on entre dans la seconde, puis on choisit 7. Avec 16 ans et faux, le même premier choix conduit au test intérieur, mais celui-ci choisit 10.

Le diagramme de ce chapitre représente seulement la seconde partie : il suppose déjà que l'âge est au moins 12 ans. Un schéma partiel doit annoncer cette hypothèse. Sinon, le lecteur pourrait appliquer le tarif étudiant à un enfant et croire que la représentation contredit le code complet.

Lire un bloc dans son contexte

On choisit d'abord le groupe d'âge. Dans la branche "12 ans ou plus", on effectue ensuite le test du statut étudiant. La condition extérieure constitue le contexte du test intérieur : ce dernier n'est pas exécuté pour toutes les entrées.

Ce sous-diagramme s'applique seulement après avoir établi que l'âge est au moins 12 ans.
Ce sous-diagramme s'applique seulement après avoir établi que l'âge est au moins 12 ans. Début, puis décision student == true. Si vrai : price <- 7. Si faux : price <- 10. Une seule branche est suivie, puis fusion et fin. Début student == true true false price <- 7 price <- 10 Fin

Début du parcours avec age = 16, student = true. Les données sont déjà disponibles.

Le surlignage montre une étape à la fois. Choisissez une entrée, prévoyez le prochain test ou la prochaine action, puis avancez pour vérifier votre lecture.

Lire les parcours sans animation

age = 16, student = true

  1. Début du parcours avec age = 16, student = true. Les données sont déjà disponibles.
  2. Test 1 : student == true donne true (vrai).
  3. Action choisie : price <- 7.
  4. Les chemins alternatifs se rejoignent. Une seule branche a été exécutée ; il n’y a pas deux tâches à attendre.
  5. Fin du parcours. Résultat observable : price = 7.

age = 16, student = false

  1. Début du parcours avec age = 16, student = false. Les données sont déjà disponibles.
  2. Test 1 : student == true donne false (faux).
  3. Action choisie : price <- 10.
  4. Les chemins alternatifs se rejoignent. Une seule branche a été exécutée ; il n’y a pas deux tâches à attendre.
  5. Fin du parcours. Résultat observable : price = 10.

Deux niveaux d’indentation

// example.pseudo
// choose_price
age <- 16
student <- TRUE
IF age < 12 THEN
    price <- 5
ELSE
    IF student THEN
        price <- 7
    ELSE
        price <- 10
    END IF
END IF
PRINT price

Chaque SINON doit être associé au bon SI. L'indentation Python matérialise ces niveaux ; les deux end MATLAB ferment successivement le test intérieur et le test extérieur. Le commentaire sur les tarifs fictifs rappelle que nous étudions une règle choisie pour l'exercice.

Construire les chemins

Quatre entrées pour distinguer les deux niveaux
agestudentTest intérieur ?price
11fauxNon5
11vraiNon5
12vraiOui7
12fauxOui10

Suivez une ligne du tableau sans sauter directement au tarif attendu. Dites d'abord quelle branche extérieure est prise, puis si un second test est nécessaire. Cette verbalisation révèle souvent une mauvaise association entre SI et SINON.

Réduire l’imbrication

Peut-on exprimer cette règle avec SI / SINON SI / SINON ?

Oui : SI age < 12, tarif 5 ; SINON SI student, tarif 7 ; SINON, tarif 10. Le second test est toujours atteint seulement pour un âge d'au moins 12 ans. Les deux écritures peuvent donc conserver le même comportement.

Pourquoi ne pas commencer par tester student ?

Un étudiant de 11 ans pourrait recevoir le tarif 7 au lieu de 5 si l'on n'exprime pas correctement la priorité du critère d'âge. La simplification doit préserver la règle, pas seulement raccourcir le texte.

Garder peu de niveaux à la fois

Une imbrication n'est pas une erreur : elle peut rendre visible un contexte. Lorsqu'elle devient difficile à suivre, cherchez une condition plus claire ou une sous-tâche à isoler. Le cours sur les fonctions fournira un autre outil pour cette décomposition.

À retenir - fiche mémo

Imbrication
Un choix intérieur est exécuté seulement si la branche qui le contient est atteinte.
Chemin
Pour moins de 12 ans, le tarif est 5 sans consulter le statut étudiant.
Contrat
À partir de 12 ans, le statut étudiant distingue les tarifs 7 et 10.
Pseudo-code
// example.pseudo
// choose_price
IF age < 12 THEN
    price <- 5
ELSE IF student THEN
    price <- 7
ELSE
    price <- 10
END IF

Point de vigilance. Un schéma partiel doit annoncer l’hypothèse qui permet d’y entrer.

Consulter la cheatsheet : Conditions et boucles · Télécharger la fiche du thème en PDF