Décisions

Vidéo du tutoriel

Exercice d’application : maximum de deux variables

Retour sur la notion d’alternative

Notions de base

Tests et Conditions

La machine peut comparer des valeurs :

  • comparaison x (1) et y (100)
  • comparaison y (100) et tmp (100)

et prendre des décisions.

 

 

Comparaison de x (1) et de y (100). x est plus petit, plus léger, que y.
Comparaison de x (1) et de 50. x est plus petit, plus léger, que 50.

Comparaison en AlgoTouch

En AlgoTouch, pour comparer deux valeurs :

  • cliquer sur l’icône représentant une bascule dans la barre d’outils
  • faire glisser la première valeur sur un plateau
  • faire glisser la seconde valeur sur l’autre plateau

Automatiquement AlgoTouch active la bascule et détermine quelle valeur est la plus grande, quelle valeur est la plus petite.

Choix de la condition

Lors de la comparaison de variables et/ou de valeurs, 6 cas sont possibles :

    1. les deux sont égales :
      x == y
    2. les deux sont différentes :
      x != y
    3. la première est strictement supérieure à la seconde :
      x > y
    4. la première est supérieure ou égale à la seconde :
      x >= y
    5. La première est inférieure strictement à la seconde :
      x < y
    6. La première est inférieure ou égale à la seconde :
      x <= y
Les choix proposés par AlgoTouch

Associer des actions à une condition

La comparaison des variables ou des valeurs permet de prendre des décisions. En fonction du résultat de la comparaison, une séquence d’actions ou une autre est à exécuter.

Par exemple, si l’âge est inférieur ou égal à 14 ans, le prix du billet est mis à 30 euros, dans le cas contraire, le prix du billet est  mis à 50 euros.

Quand age est inférieur ou égal à LIMIT, le cout est 50, la constante PRIX.

Pour mettre en place une décision :

  1. effectuer la comparaison
  2. choisir parmi les trois cas la décision qui correspond
  3. effectuer l’opération correspondant au cas

Si l’opération est conforme aux attentes :

  1. se placer en mode enregistrement
  2. effectuer la comparaison
  3. choisir parmi les trois cas la décision qui correspond
  4. effectuer l’opération correspondant au cas
  5. arrêter l’enregistrement
  6. exécuter le code enregistré pour vérifier la validité du programme

Toutes ces étapes sont détaillées dans la suite de cette page.

Quand age est supérieur strictement à LIMIT, le cout est 30, la constante REDUIT.
Define PrixBillet
Do
Read "Quel age " age ;
if (age <= LIMIT) {
cout = REDUIT ;
}
else {
// age > LIMIT
cout = PRIX ;
}
Write "Prix du billet " cout ;
// ...
End

Alternative complète

Nous allons traiter l’alternative à travers un exemple de calcul du prix d’un billet en fonction de l’âge de la personne. Le prix du billet est de

  • 30 euros jusqu’à 14 ans inclus,
  • 50 euros au-delà.

L’âge de la personne n’est connu qu’au moment de l’exécution du programme et donc il est nécessaire d’effectuer la comparaison avec la valeur 14. Il y aura donc deux cas à prendre en compte avec, par exemple, des âges de 6 ans et 20 ans.

 

Les valeurs numériques LIMIT (14), REDUIT (30) et PRIX (50) ont été créées comme des constantes afin de pouvoir éventuellement modifier les coûts ou l’âge limite. C’est une bonne pratique en programmation.

 

Les données du programmes sont accessibles sur https://algotouch.irisa.fr/agt/

Etape 1 : comparer la variable age et LIMIT

La première étape consiste à comparer la variable age à LIMIT (14) :

  1. cliquer sur le comparateur (la balance)
  2. faire glisser age et 14 sur les deux plateaux de la balance
  3. activer la balance par un clic sur le triangle qui est devenu vert
  4. choisir le cas qui correspond parmi les trois choix proposés :
    1. age > LIMIT
    2. age != LIMIT
    3. age >= LIMIT
  5. choisir un des cas, en l’occurrence le dernier
  6. cliquer sur “Valider”

Dans la partie “Instructions” le code suivant s’inscrit:

if (age <= LIMIT) {
}
else {
  // age > LIMIT
  // TO DO
}

Etape 2 : effectuer l'opération associée au cas

  1. faire glisser la constante REDUIT, la valeur 30, dans la variable cout
  2. cliquer sur l’icône, une porte de sortie, au centre de la balance pour terminer le cas.
Dans la console le code est complété :
if (age <= LIMIT) {
 cout = REDUIT ; 
}else {
  // age > LIMIT
  // TO DO
}

Etape 3 : rejouer avec age supérieur à LIMIT

Le cas age inférieur ou égal à LIMIT (14) est enregistré et vérifié. Que doit faire notre programme quand age est supérieur à LIMIT ? La seule manière de le définir est d’exécuter le programme avec age supérieur à 14, par exemple 20.
  1. lancer le programme avec la roue dentelée de la barre d’outils
  2. saisir 20 pour la variable age
  3. le programme s’interrompt pour demander les actions à effectuer dans ce cas. AlgoTouch passe en mode enregistrement.
  4. dans ce cas, cout est affecté à PRIX (50). C’est la seule action à effectuer. Il faut terminer le cas en cliquant sur l’icône au centre de la balance.

Le code enregistré devient :

if (age <= LIMIT) {
cout = REDUIT ;
}
else {
// age > LIMIT
cout = PRIX ;
}

Remarquons que le commentaire “TO DO” a disparu. C’est pour indiquer au programmeur que son code est complet.

Etape 4 : rejouer le code complet

Le code étant maintenant complet, il est possible de la rejouer avec d’autres valeurs.

Le programme complet est sur https://algotouch.irisa.fr/agt/.

Alternative sans action dans la section “else”

Pour finir nous allons étudier le cas ou aucune instructions n’est nécessaire dans la section “else”.

Par exemple, une note d’un élève supérieure à 20 est ramenée à 20 et conservée sinon.

Les étapes à effectuer :

  1. placer une valeur supérieure à 20 dans la variable note
  2. passer en mode enregistrement
  3. comparer note avec 20
  4. produire le code correspondant au cas note > 20 : affecter note à 20
  5. terminer ce cas en cliquant sur l’icône du comparateur
  6. terminer l’enregistrement.

Le code produit est :

Define SaisirNote
Do
  Read "Note " note ;
  if (note > 20) {
    note = 20 ;
  }
  else {
    // note <= 20
    // TO DO
  }
  Write "Note " note ;
  // ...
End

Le programme AlgoTouch incomplet est sur https://algotouch.irisa.fr/agt/.

Provoquer l’autre cas en plaçant une valeur inférieure à 20 dans la variable note, par exemple 15 :

  1. lancer l’exécution avec la roue dentelée de la barre d’outils
  2. après l’ouverture de la fenêtre “Enregistrement des instructions manquantes”, quitter directement car aucune instruction n’est nécessaire dans ce cas.

Comme la section “else” ne contient aucune instruction, le code produit devient :

Define SaisirNote
Do
  Read "Note " note ;
  if (note > 20) {
    note = 20 ;
  }
  Write "Note " note ;
  // ...
End

Le programme AlgoTouch complet est sur https://algotouch.irisa.fr/agt/.

Exercice : rendre une valeur positive