abcdAlgos

abcdAlgosCollectif d'auteurs [x]

Un tutoriel pour découvrir l'instruction conditionnelle..

Objectif

Le but de ce tutoriel est de découvrir l'instruction conditionnelle. Il faut déjà savoir utiliser l'interface, et savoir se servir de variables.

Introduction

  1. Comment programmer le fait de faire des choix.

    A ce stade, nous savons programmer une liste d'instruction, qui ... font toujours la même chose ! Voilà qui est bien limité. Un vrai programme doit pouvoir exécuter des instructions différentes selon certaines conditions et il existe une structure universelle pour implémenter ce mécanisme. Par exemple :
    if(temperature < 15) {
        println("allumer chauffage");
    }
    où la construction permet de n'allumer le chauffage qu'en cas de besoin. Tandis que :
    if(temperature < 15) {
        println("allumer chauffage");
    } else {
        println("ne rien faire");
    }
    montre comment se traduit la construction si la température est en dessous de 15 degrés alors allumer le chauffage sinon ne rien faire. Ou encore :
    if(temperature < 15) {
        println("allumer chauffage");
    } else if(temperature > 100) {
        println("appeler les pompiers");
    } else {
        println("ne rien faire");
    }
    montre comment emboiter les instructions conditionnelles.
  2. Définir des conditions à tester.

    Pour définir le test à effectuer nous avons vu que nous pouvions comparer deux valeurs numériques, voici une liste de tests possibles pour des nombres a et b et des chaînes de caratères s et c:

    // Vrai si et seulement si le nombre a est strictement plus petit que le nombre b:

                a < b

    // Vrai si et seulement si le nombre a est strictement plus petit ou égal au nombre b:

                a <= b

    // Vrai si et seulement si le nombre a est égal1 au nombre b:

                a == b

    // avec bien sûr les symboles similares pour > et >= (strictement plus grand et plus grand ou égal) et != (pas égal).

    // Vrai si et seulement si la chaîne s est égale à la chaîne c

                equal(s, c)
    Nous pouvons ensuite combiner ces conditions :

    // Vrai si et seulement si une_condition ET autre_condition sont vraies :

                une_condition && autre_condition

    // Vrai si et seulement si une_condition OU autre_condition, ou les deux, sont vraies2 (Voir2 pour "trouver" la touche |):

                une_condition || autre_condition

    // Vrai si et seulement si une_condition n'est PAS vraie :

                (!une_condition)
    ce qui nous permet de définir des expressions aussi complexes que nous avons besoin, par exemple :

    // Vrai si et seulement si x est plus grand que a et plus petit que b donc dans l'intervale ]a, b[:

                a < x && x < b

    // Vrai si et seulement si la reponse égale oui en minuscule ou majuscule :

                equal(reponse, "oui") || equal(reponse, "OUI")

    // Vrai si et seulement si l'age est plus que 10 et le nom n'est pas Jean:

                age > 10 && (! equal(nom, "Jean"))
    en utilisant des parenthèses pour ne pas mélanger les termes de ces expressions.
  3. Un nouveau type de variable.

    Les variables qui ne prennent que les valeurs true et false. Ce sont des variables booléennes. La valeur true veut dire vrai et la valeur false veut dire faux, par exemple true && true donne true puisque si deux choses sont vraies alors on peut dire que l'une ET l'autre sont vraies. De même true && false donne false puisque si une chose est vraie et l'autre fausse on ne peut dire que l'une ET l'autre sont vraies. Le code :
    boolean x = readBoolean();
    if (x) { println("OK"); } else { println("KO"); }
    nous permet de lire la variable boolénne x et va imprimer OK/KO selon que sa valeur est Vraie/Fausse. Nous allons l'utiliser.

Travail proposé

  1. Ajouter des tests à un code.

    Reprendre le code proposé pour apprendre à se servir de variables qui demandent le nom et l'âge de l'utilisateur et ajouter au bon endroit :
    if(equal(whoisit, "Toto")) {
        println("Eh : Toto est pas un vrai nom, dis donc !");
    }
    puis tester ce code pour vérifier le mécanisme conditionnel. Ajouter ensuite des conditions pour signaler que :
    • Si l'âge est inférieur à 3 ans ou supérieur à 120 ans, ce n'est pas sérieux
    • Si le nom est Dieu ou Toto, ce n'est pas crédible
    • Si le nom est, par exemple, Nadia, alors c'est super, imprimons un message sympa !
  2. Deviner des conditions.

    Essayez de deviner ce qui va être imprimé, puis testez dans un petit code et expliquez le résultat en traduisant en mot (par une phrase) ce qui a été calculé.
    1. Vrai pour x ?
      int x = 12;
      if (x >= 12 && (x < 0 || x > 10)) { println("OK"); } else { println("KO"); }
      Votre commentaire commencera par : Comme x vaut 12 alors x < 0 est [vrai?faux?], et x > 10 est [vrai?faux?], donc (x < 0 || x > 10) etc..
    2. Que va donner le code suivant ?
      String nom = readString();
      if (equal(nom, "John") && equal(nom, "Joan")) { println("OK"); } else { println("KO"); }
    3. Deviner puis vérifier ces 8 réponses:
      println("Réponse 1 = " + (false || false));
      println("Réponse 2 = " + (true || false));
      println("Réponse 3 = " + (false || true));
      println("Réponse 4 = " + (true || true));
      println("Réponse 5 = " + (true && (!false)));
      println("Réponse 6 = " + (!(!false)));
      println("Réponse 6 = " + (!(true && false)));
      println("Réponse 7 = " + (!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!false)))))))))))))))))))));
      println("Réponse 8 = " + (equal("toto", "titi") || 14 > 13));
      et donner une phrase explicative pour chaque réponse.
    Pour approfondir le sujet, on peut travailler sur des mécanismes logiques.

Remarques

  1. A propos de l'égalité.

    Notez que le signe = veut dire "affecter une valeur" tandis que être égal s'écrit == pour les nombres et equal(s, c) pour les chaines de caractères : voici quelque chose d'un peu compliqué.
  2. A propos de la touche |.

    Sur les claviers français des PC, il faut taper Alt Gr + 6: Alt Gr est la touche à droite de la barre espace qu'il faut enfoncer en même temps que la touche du chiffre 6. Sur les Macs il faut enfoncer simultanément les trois touches Alt+Shift+L.