TP 5: Booléens

boolean is a primitive type

"Datatype for the Boolean values true and false. It is common to use boolean values with control statements to determine the flow of a program. The first time a variable is written, it must be declared with a statement expressing its datatype. "(Reference)

Que ce soit pour les tests ou les conditions d'arrêt du while on utilise entre parenthèses une expression du type booléen

Il existe des opérations pour les booléens comme il existe des opérations bien connues pour les nombres. Pour les booléens ce sont le ET, symbolisé par &&, puis le OU symbolisé par ||

Ces opérations nous permettra d'écrire des tests plus complexes

Par exemple reprenons le jeu du Chevalier de Méré

Le connecteur ET (&&)

On lance 4 dés : On gagne si on a au moins un six autrement dit on perd si aucun des dés n'affiche six

 
 
void setup(){ 
  int de1,de2,de3,de4;
  
  de1 = int(random(6)+ 1;
  de2 = int(random(6)+ 1;
  de3 = int(random(6)+ 1;
  de4 = int(random(6)+ 1;
  	
  if((de1 != 6) && (de2 != 6) && (de3 != 6) && (de4 != 6)){
  	println("dé 1 vaut "+de1);
        println("dé 2 vaut "+de2);
        println("dé 3 vaut "+de3);
        println("dé 4 vaut "+de4);
        println("*************");
  		println("Perdu");
  else{
  	println("dé 1 vaut "+de1);
        println("dé 2 vaut "+de2);
        println("dé 3 vaut "+de3);
        println("dé 4 vaut "+de4);
        println("*************");
  		println("Gagné");
  }
  
}


 

(de1 != 6) && (de2 != 6) && (de3 != 6) && (de4 != 6) est une expression composée de 4 booléens connectés avec &&. Chaque booléen est soit vrai ou faux. a && b est vrai uniquement lorsque à la fois a et b sont vrais

Exercices

  1. Faire un programme qui lance 1000 fois les 4 dés et qui va calculer la fréquence du gain
  2. Problème: Un chemin de fer sur une portion rectiligne où il y a un tunnel est modélisé par une demi-droite muni d'un repère. La fin de la portion a pour abscisse 1000. Le début du tunnel a pour abscisse 400 et la fin 600.

    Un train est repéré par une abscisse variable f = la fin du train et une variable l = la longueur du train. Le train se déplace de la gauche vers la droite.

    Faire un programme qui prend en entrées deux entiers générés aléatoirement:

    • f , la position de la fin du train, compris entre 1 et 980
    • l , la longueur du train compris entre 5 et 20

    et qui affiche à l'écran les messages suivant, selon la position du train sur la voie :

    "Pas entré", "Entre ", "A l'intérieur","Sort","Est sorti"

    Exemples :

    • si f = 100 et l = 15 alors on affiche "Pas entré"
    • si f = 390 et l = 20 alors on affiche "Entre"
    • si f = 700 et l = 18 alors on affiche "Est sorti"

Le connecteur OU (||)

Le jeu du Crap

On lance deux dés et on considère la somme S des nombres sortis. Si S = 7 ou 11 on a gagné si S = 2 ou 3 ou 12 on a perdu. Pour tout autre résultat P on rejoue autant de fois qu'il est nécessaire jusqu'à ce que S = 7 ou S = P

Faire un programme qui réalise 1000 parties et qui calcule la fréquence de gain ainsi que le nombre moyen de lancers nécessaire pour gagner une partie

Mini-projet personnel ( à rendre avant J+7)

  1. Superposition d'images (/5 points)

    Une fenêtre graphique est repérée par deux axes rectangulaires Ox et Oy (voir dessin ci-dessous). Les dimensions de la fenêtre en pixels sont largeur = 800 et hauteur = 600. Autrement dit l'axe Ox vaut 800 pixels Une image dans cette fenêtre est repérée par les coordonnées du coin supérieur gauche et celles du coin inférieur droit. Sur le dessin l'image 1 est repérée donc par (x1,y1,x2,y2)

    Faire un programme qui affiche à l'écran si deux images se superposent ou pas

    Exemples :

    • si (x1,y1,x2,y2) = (100,100,400,500) et (x1,y1,x2,y2) = (200,50,500,300) alors on affiche "Superposition"
    • si (x1,y1,x2,y2) = (100,100,400,500) et (x1,y1,x2,y2) = (200,50,500,80) alors on affiche " Pas de Superposition"
  2. Bataille navale simplifiée(/5 points)

    Une fenêtre graphique 400 x 400 est découpée en petits carrés de 50 x 50. Un unique bateau est placé aléatoirement sur la grille

    Le joueur clique sur la grille dans une case. Si c'est la case où se trouve le bateau on affiche le message "Coulé", si la case est dans la même ligne ou la même colonne on affiche "En vue", sinon on affiche "Perdu"

    Aide : Chaque case est repérée par son coin supérieur gauche, autrement dit chaque case est repérée par (x,y) avec x et y entiers entre 0 et 7 inclus. Lorsque l'utilisateur clique dans une case, mouseX et mouseY valent un certain nombre de fois 50. Pour trouver les coordonnées (x,y) du coin supérieur gauche de la case où on a cliqué il suffit de faire :

    x = mouseX/50;

    y = mouseY/50;