TD — Séance 2 — Les conditions

Décider, combiner, choisir entre plusieurs cas

TD de la séance 2 d’Algorithmique : décider, combiner, choisir entre plusieurs cas.
Auteur

Dr. El Hadji Bassirou TOURÉ · DMI/FST/UCAD

ImportantObjectif

Dérouler à la main des Si à un et deux cas, des conditions composées, des Si imbriqués, des chaînes SinonSi et un Selon ; compter les tests évalués ; repérer et corriger une condition fausse ; puis écrire et vérifier ses propres décisions, sur un cas ordinaire et sur un cas limite. Une trace se remplit comme dans le CM : une ligne par pas, le numéro de la ligne exécutée, l’instruction, l’état des variables après le pas (mettre en gras la variable affectée), le résultat du test quand la ligne en contient un, et ce qu’écrit Écrire ; un arrêt sur erreur s’écrit « arrêt » avec sa cause. Les règles de tarif et les seuils des énoncés sont illustratifs.

Exercice 1 : une décision à un cas

À l’aéroport Blaise-Diagne, une compagnie accepte un bagage de 23 kg en soute ; chaque kilogramme au-delà coûte 2000 F. Le poids est un entier.

Lire poids
supp ← 0
Si poids > 23 Alors
  supp ← (poids - 23) × 2000
FinSi
Écrire "supplément :", supp
  1. Dérouler l’algorithme pour l’entrée 27 dans le tableau ci-dessous.

    Pas Ligne Instruction poids supp Test Écrit
  2. Qu’écrit l’algorithme pour 19, puis pour 23 ? Quelles lignes sont exécutées dans ces deux cas ?

  3. Réécrire l’algorithme avec un Si … Sinon, sans la ligne 2. Vérifier par une trace l’entrée 23.

  4. La ligne 3 devient Si poids \(\geq\) 23 Alors. Qu’écrit l’algorithme pour 23 ? Quelles lignes exécute-t-il ? Une vérification qui ne regarde que ce qui est écrit peut-elle détecter ce changement ?

Exercice 2 : conditions composées et tables de vérité

Une fondation de Saint-Louis attribue une bourse selon la moyenne moy sur 20 et l’âge age du candidat.

Lire moy
Lire age
ok ← moy ≥ 12 ET age ≤ 25 OU moy ≥ 16
Si NON ok Alors
  Écrire "dossier refusé"
Sinon
  Écrire "dossier retenu"
FinSi
  1. On note \(p\), \(q\), \(r\) trois conditions. Compléter leur table de vérité.

    \(p\) \(q\) \(r\) \(p\) ET \(q\) (\(p\) ET \(q\)) OU \(r\) \(p\) ET (\(q\) OU \(r\))
    vrai vrai vrai
    vrai vrai faux
    vrai faux vrai
    vrai faux faux
    faux vrai vrai
    faux vrai faux
    faux faux vrai
    faux faux faux

    Pour quelles lignes les deux dernières colonnes diffèrent-elles ?

  2. Récrire la ligne 3 avec toutes ses parenthèses, en suivant les priorités du cours.

  3. Pour les entrées (13, 24), (13, 27), (17, 30) et (11, 20), donner la valeur de chaque comparaison, du ET, de ok et ce qu’écrit l’algorithme.

    (moy, age) moy ≥ 12 age ≤ 25 ET moy ≥ 16 ok Écrit
    (13, 24)
    (13, 27)
    (17, 30)
    (11, 20)
  4. Écrire, sans NON et sans la variable ok, la condition d’un dossier refusé, puis l’algorithme qui la teste à la ligne 3. Le tracer pour (17, 30).

  5. On écrit la ligne 3 ok \(\leftarrow\) moy ≥ 12 ET (age ≤ 25 OU moy ≥ 16). Existe-t-il une entrée pour laquelle l’algorithme écrit autre chose qu’avec la ligne de départ ? Justifier à l’aide de la question (a).

Exercice 3 : Si imbriqués et chaîne SinonSi

À Kaolack, la pluie d’une journée, en millimètres (un entier \(p\geq0\)), est classée en quatre catégories.

Lire p
Si p = 0 Alors
  Écrire "sec"
Sinon
  Si p < 10 Alors
    Écrire "faible"
  Sinon
    Si p < 30 Alors
      Écrire "modérée"
    Sinon
      Écrire "forte"
    FinSi
  FinSi
FinSi
  1. Dérouler l’algorithme pour l’entrée 10.

    Pas Ligne Instruction p Test Écrit
  2. Réécrire l’algorithme avec une chaîne SinonSi et un seul FinSi.

  3. Réécrire la chaîne en testant d’abord la catégorie « forte », puis « modérée », puis « faible », avec les opérateurs \(\geq\) et \(>\).

  4. Pour 0, 4, 10, 30 et 45, donner ce qu’écrit l’algorithme, le nombre de tests évalués par l’algorithme de départ et par la chaîne de la question (c), puis ce qu’écrit l’algorithme de départ si sa ligne 5 devient Si p \(\leq\) 10 Alors.

    p Écrit Tests (l. 2 à 13) Tests (ordre inverse) Écrit avec \(\leq\) 10
    0
    4
    10
    30
    45

Exercice 4 : trouver et corriger l’erreur

Partie A. L’algorithme suivant doit vérifier une heure saisie en heures h (de 0 à 23) et minutes mn (de 0 à 59).

Lire h
Lire mn
Si h ≥ 0 OU h ≤ 23 ET mn ≥ 0 OU mn ≤ 59 Alors
  Écrire "heure valide"
Sinon
  Écrire "heure invalide"
FinSi
  1. Dérouler l’algorithme pour l’entrée 25 puis 70.

    Pas Ligne Instruction h mn Test Écrit
  2. Récrire la condition de la ligne 3 avec ses parenthèses. Montrer qu’elle est vraie pour toute entrée.

  3. Corriger la ligne 3. Qu’écrit l’algorithme corrigé pour (25, 70), (23, 59), (24, 0) et (0, 0) ?

Partie B. Une compagnie de bus de Thiès transporte gratuitement les enfants de moins de 5 ans et applique un tarif jeune avant 18 ans.

Lire age
Si age < 18 Alors
  Écrire "tarif jeune"
SinonSi age < 5 Alors
  Écrire "gratuit"
Sinon
  Écrire "plein tarif"
FinSi
  1. Qu’écrit l’algorithme pour 3, 12 et 18 ? Comparer au résultat attendu.

    age Écrit Résultat attendu
    3
    12
    18
  2. Quelle ligne n’est jamais exécutée ? Pourquoi ? Corriger l’algorithme et le tracer pour le cas limite 5.

  3. Un étudiant écrit la ligne 2 Si age \(\leftarrow\) 18 Alors. Que lui répondre ?

Exercice 5 : conception

Partie A. Au foirail de Dakar, avant la Tabaski, Amadou relève les prix de trois moutons.

  1. Écrire un algorithme qui lit les trois prix p1, p2, p3 et écrit le plus bas, sans boucle, avec une variable m qui retient le plus bas des prix déjà examinés. Numéroter les lignes ; une instruction par ligne.

    Algorithme :

  2. Tracer l’algorithme pour 125000, 95000 et 110000. Les colonnes de variables sont à nommer.

    Pas Ligne Instruction Test Écrit
  3. Tracer le cas limite de deux prix égaux : 90000, 140000 et 90000. Le résultat change-t-il si les comparaisons sont écrites avec \(\leq\) ?

    Pas Ligne Instruction Test Écrit

Partie B. Le nombre de jours d’un mois dépend du mois et, pour février, de l’année : 29 jours si l’année est bissextile, 28 sinon.

  1. Écrire un algorithme qui lit mois (de 1 à 12) et an, et écrit le nombre de jours du mois, à l’aide d’un Selon.

    Algorithme :

  2. Tracer l’algorithme pour février 2024, puis pour le cas limite février 2100.

    Pas Ligne Instruction Test Écrit
    Pas Ligne Instruction Test Écrit
  3. Combien de lignes Cas sont examinées, et combien de comparaisons de mois sont évaluées, pour avril, pour février, pour janvier ?

Exercice 6 : comparer deux dates

Pour départager deux candidats, on compare leurs dates de naissance \((j_1, m_1, a_1)\) et \((j_2, m_2, a_2)\) : une date est antérieure à une autre si son année est plus petite, ou si les années sont égales et son mois plus petit, ou si années et mois sont égaux et son jour plus petit.

  1. Écrire un algorithme qui lit les six entiers, calcule une variable booléenne avant par une seule condition composée et une variable booléenne egal, puis écrit date 1 avant date 2, même date ou date 2 avant date 1.

    Algorithme :

  2. Tracer l’algorithme pour (14, 7, 2003) et (3, 11, 2003).

    Pas Ligne Instruction Test Écrit
  3. Tracer le cas limite de deux dates identiques, (5, 3, 2001) et (5, 3, 2001).

    Pas Ligne Instruction Test Écrit
  4. Combien de comparaisons la condition de avant et celle de egal évaluent-elles, quelles que soient les dates ? Écrire une version de avant par une chaîne SinonSi qui compare d’abord les années, puis les mois, puis les jours, et compléter le tableau.

    Date 1 Date 2 Écrit Comparaisons, version (a) Comparaisons, version (d)
    14/7/2003 3/11/2003
    5/3/2001 5/3/2001
    20/1/2004 20/1/2002

Pour cette séance

Le cours

Les slides

Retour au sommet