Décisions

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 y (100)
y (100) est plus grand, plus lourd, que x (1)

Comparaison en AlgoTouch

En AlgoTouch, pour comparer deux valeurs :

  • cliquer sur l’icône représentant une bascule
  • faire glisser la première valeur sur un plateau
  • faire glisser la seconde valeur sur l’autre plateau
  • clic gauche sur le triangle de la bascule pour activer la “pesée”

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.

Comparaison de l'âge avec 14

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 correction du programme

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

Define PrixBillet
Do
if (age <= quatorze) {
prix = trente ;
}
else {
// age > quatorze
prix = cinquante ;
}
End

Exemple détaillé

Etape 1 : comparer la variable age et 14

La première étape consiste à comparer la variable age à 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 double clic sur le triangle
  4. choisir le cas qui correspond parmi les trois choix proposés :
    1. age > quatorze
    2. age != quatorze
    3. age >= quatorze
  5. cliquer sur ok

Dans la console le code suivant s’inscrit:

if (age <= quatorze){

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

  1. sélectionner la variable billet qui reçoit le résultat
  2. faire glisser la valeur 30 dans la variable prix
  3. cliquer sur l’icône au centre de la balance pour terminer le cas

Dans la console le code est complété :

if (age <= quatorze){ 
prix = trente ;
}
else {
// TODO 11
// age > quatorze }

Etape 3 : enregistrer la séquence d'instructions

La séquence d’instructions étant maintenant connue, il est possible de l’enregistrer pour la rejouer ensuite :

  • cliquer sur le bouton illustré par un microphone « enregistrer les prochaines instructions »
  • effectuer les opérations à enregistrer, en l’occurrence celles effectuées lors de l’étape précédente
  • cliquer sur le bouton représentant un stop « Arrêter l’enregistrement de la séquence»

L’enregistrement est alors terminé, le code s’est ajouté dans la partie droite de l’écran d’AlgoTouch :

if ( age <= quatorze) { 
prix = trente;
} else {
// TODO 1
// age > quatorze }

Etape 4 : rejouer la séquence d’instructions

Cette étape consiste à vérifier que les actions enregistrées sont correctes, c’est-à-dire que le résultat est bien celui attendu.

Dans notre cas, comme age vaut 12, la valeur de prix doit valoir 30 à l’issue de l’exécution du programme.

L’exécution s’effectue en cliquant sur la roue dentelée.

Il est possible d’effectuer plusieurs fois le test.

Etape 5 : rejouer avec age supérieur à 14

Le cas age inférieur ou égal à 14 est enregistré et vérifié. Que doit faire notre programme quand age est supérieur à 14 ?

La seule manière de le définir est d’exécuter le programme avec age supérieur à 14, par exemple 20.

  1. affecter 20 à age
  2. lancer le programme avec la roue dentelée
  3. le programme s’interrompt pour demander les actions à effectuer dans ce cas. AlgoTouch passe en mode enregistrement.
  4. dans ce cas, prix est affecté à 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 <= quatorze) { 
prix = trente;
} else {
// age > quatorze
prix = cinquante; }

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

Etape 6 : rejouer le code complet

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

Exercice : maximum de deux variables

Soit deux variables x et y. Le programme à réaliser doit :
  • saisir le contenu des deux variables x et y,
  • afficher le contenu de la variable contenant la plus grande valeur. Par exemple, si x contient la valeur 1 et y la valeur 5 alors la valeur 5 est affichée.
Le fichier AlgoTouch contenant les deux variables est disponible sur ce lien.
[embedyt] https://youtu.be/JvchsVJxqQ0[/embedyt]
Define Maximum
  Do
    Read "Read x" x ;
    Read "Read y" y ;
    if (x > y) {
      Write "Maximum" x ;
    }
    else {
      // x <= y
      Write "Maximum" y ;
    }
    // ...
End
Le fichier AlgoTouch Solution est disponible sur ce lien

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 :

if (note > vingt){ 
  note = vingt; 
} else { 
  // TODO 1 
  // note <= vingt 
}
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
  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 :
if (note > vingt) {
    note = vingt;
}

Exercice : rendre une valeur positive

Soit une variable v. Cette variable doit être supérieure à 0. Le programme AlgoTouch à réaliser doit :
  • saisir une valeur dans v
  • passer la valeur de v à 0, si sa valeur est inférieure à 0.
Par exemple, si la valeur saisie de v est -3, elle devient 0. Le fichier AlgoTouch contenant la variable v est disponible sur ce lien
[embedyt] https://youtu.be/QKc9tjVWHbs[/embedyt]
Define Zero
  Do
    Read "Read v" v ;
    if (v < 0) {
      v = 0 ;
    }
    // ...
End
Le programme Algotouch contenant la solution est disponible sur ce lien.

Décisions complexes

Pour le moment, nous avons étudié des cas assez simples de décisions. Tous les cas ne le sont pas.

Imaginons la variable mois. Le contenu de mois n’est valide que si mois est compris entre 1 et 12.

Nous aurons donc à étudier les trois cas suivants :

  • mois < 1
  • mois >12
  • mois compris entre 1 et 12

Quand mois est correct ou incorrect un message est affiché.

Les étapes sont les suivantes :
  1. enregistrer les actions correspondant à mois entre 1 et 12
  2. enregistrer les actions correspondant à mois plus petit que 1, par exemple mois vaut 0
  3. enregistrer les actions correspondant à mois plus grand que 12, par exemple, mois vaut 13.

Cas mois est correcte

  1. mettre manuellement une valeur correcte, de 1 à 12, dans mois
  2. débuter l’enregistrement
  3. comparer mois et 1, en sélectionnant le cas mois >= 1
  4. comparer mois et 12, en sélectionnant mois <= 12
  5. afficher le message “La valeur de mois est correcte”
  6. fermer les deux décisions
  7. tester le cas

Le code produit est :

if (mois >= 1){
    if (mois <= douze){ 
Write "La valeur de mois est correcte" mois;
} else {
// TODO
// mois > douze } } else { // TODO // mois < 1 }

Cas mois inférieur à 1

Il reste deux cas à étudier :
  1. le mois est trop petit, inférieur à 1
  2. le mois est trop grand supérieur à 12.
Prenons le premier des deux cas :
  1. mettre manuellement 0 dans mois
  2. lancer l’exécution
  3. le programme s’arrête en indiquant que le cas mois < 1 est à compléter
  4. compléter le cas, ici en affichant que le mois est incorrect
  5. terminer le cas en cliquant sur la porte de sortie
  6. tester le cas

Le code devient :

if (mois >= 1){
    if (mois <= douze){ 
Write "La valeur de mois est correcte" mois
} else {
// TODO
// mois > douze } } else { // mois < 1 Write "La valeur de mois est incorrecte" mois }

Cas mois supérieur à 12

Il reste à étudier le cas où le mois est trop grand supérieur à 12.

  1. mettre manuellement 13 dans mois
  2. lancer l’exécution
  3. le programme s’arrête en indiquant que le cas mois > 12 est à compléter
  4. compléter le cas, ici en affichant que le mois est incorrect
  5. terminer le cas en cliquant sur la porte de sortie
  6. tester le cas

Le code devient :

if (mois >= 1){
    if (mois <= douze){ 
Write "La valeur de mois est correcte" mois
} else {
// mois > douze Write "La valeur de mois est incorrecte" mois } } else { // mois < 1 Write "La valeur de mois est incorrecte" mois }

Exercice : déterminer si trois valeurs sont ordonnées

Soient trois variables var1, var2, var3. Écrire un programme
  1. qui demande à l'utilisateur de saisir les valeurs de ces trois variables
  2. puis détermine si elles sont strictement croissantes, en positionnant une variable croissant à 1 ou 0 sinon.
La programme AlgoTouch à réaliser doit donc :
  • saisir les trois valeurs de var1, var2, var3
  • mettre croissant à 1 si var1 est plus petit que var2 et var2 est plus petit que var3
  • mettre croissant à 0 dans tous les autres cas.
Le fichier AlgoTouch contenant les variables est disponible sur ce  lien.
[embedyt]https://youtu.be/Qpz5EGeEXHs[/embedyt]
Define OrdreCroissant
  Do
    Read "Read var1" var1 ;
    Read "Read var2" var2 ;
    Read "Read var3" var3 ;
    if (var1 < var2) {
      if (var2 < var3) {
        croissant = 1 ;
      }
      else {
        // var2 >= var3
        croissant = 0 ;
      }
    }
    else {
      // var1 >= var2
      croissant = 0 ;
    }
End
Le programme Algotouch contenant la solution est disponible sur ce lien.
Défiler vers le haut