2. Expressions relationnelles et alternatives Joan S. Morales - Introduction à l'algo. et la programmation
L’expression relationnelle (une condition) Appartient à la famille des expressions booléennes Est soit vraie ou fausse Permet de représenter une condition Met en relation deux expressions arithmétiques AgeClient >= AgeAdulte DimensionVoilure / 4 == AgeDuCapitaine NbHeures * TauxHoraire >= SalaireAnnuel / NbSemainesAnnée AgeClient < AgeRetraite Joan S. Morales - Introduction à l'algo. et la programmation
Les opérateurs relationnels Priorité Opérateur Description Associativité Catégorie 1 < plus petit que Inégalité > plus grand que <= plus petit ou égal à >= plus grand ou égal à 2 == égal à Égalité != différent de http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B Joan S. Morales - Introduction à l'algo. et la programmation 3
Expression relationnelle et variable booléenne const int AgeAdulte = 18; int AgeClient; bool ClientEstAdulte; cin >> AgeClient; ClientEstAdulte = AgeClient >= AgeAdulte; Joan S. Morales - Introduction à l'algo. et la programmation 4
Exemples Séquence #1 Séquence #2 const int AgeAdulte = 18; int AgePersonne = 17; bool EstAdulte; EstAdulte = AgePersonne >= AgeAdulte; Séquence #2 bool EstAdo; EstAdo = AgePersonne < AgeAdulte; Joan S. Morales - Introduction à l'algo. et la programmation 5
Exemples (suite) Séquence #3 int NbNotes = 3; Séquence #3 int NbNotes = 3; const int NoteDePassage = 60; int Note1 = 75; int Note2 = 45; int Note3 = 60; bool CoursEstReussi; CoursEstReussi = (Note1+Note2+Note3)/ NbNotes >= NoteDePassage; Joan S. Morales - Introduction à l'algo. et la programmation 6
L’alternative simple Forme complète Forme incomplète La condition est une expression booléenne qui donne soit vrai soit faux. Forme complète if (Condition) { Instructions si VRAI } else Instructions si FAUX Forme incomplète Joan S. Morales - Introduction à l'algo. et la programmation 7
Exemple Un de vos clients, un gérant de salles de cinéma, vous demande de lui produire une application qui lui permettra de mieux gérer les rabais offerts aux clients en fonction de leur âge. Un client a droit à un rabais de 3 dollars s’il est âgé de moins de 12 ans. Le prix normal du billet est fixé à 8 dollars. Joan S. Morales - Introduction à l'algo. et la programmation
Exemple (suite) Intrant Extrant Constantes AgeClient PrixBillet PrixDeBase = 8 Rabais = 3 Joan S. Morales - Introduction à l'algo. et la programmation
Exemple (suite) Jeu de tests Intrant(s) Extrant(s) AgeClient PrixBillet -5 Erreur 2 5$ 11 12 8$ 20 89 Valeur limite Joan S. Morales - Introduction à l'algo. et la programmation
Solution 1 Forme complète, test si jeune cin >> AgeClient; if (AgeClient < 12) { PrixBillet = 5; } else PrixBillet = 8; cout << PrixBillet; Faire des constantes! Joan S. Morales - Introduction à l'algo. et la programmation
Solution 2 Forme complète, test si vieux cin >> AgeClient; if (AgeClient >= 12) { PrixBillet = 8; } else PrixBillet = 5; cout << PrixBillet; Joan S. Morales - Introduction à l'algo. et la programmation
Solution 3 Forme incomplète, test si jeune cin >> AgeClient; PrixBillet = 8; if (AgeClient < 12) { PrixBillet = 5; // ou PrixBillet = PrixBillet - 3; } cout << PrixBillet; Joan S. Morales - Introduction à l'algo. et la programmation
Solution 4 Forme incomplète, test si vieux cin >> AgeClient; PrixBillet = 5; if (AgeClient >= 12) { PrixBillet = 8; } cout << PrixBillet; Joan S. Morales - Introduction à l'algo. et la programmation
Solution 5 Forme incomplète, test si jeune avec variable booléenne ... cin >> AgeClient; PrixBillet = 8; bool EstJeune = AgeClient < 12 if (EstJeune) { PrixBillet = 5; } cout << PrixBillet; Joan S. Morales - Introduction à l'algo. et la programmation
Les alternatives imbriquées if (Condition_1) { if (Condition_2) Instructions si VRAI 1 et VRAI 2; } else Instructions si VRAI 1 et FAUX 2; if (Condition_3) Instructions si FAUX 1 et VRAI 3; Instructions si FAUX 1 et FAUX 3; Joan S. Morales - Introduction à l'algo. et la programmation
Les alternatives empilées if (Condition_1) { Instructions si VRAI 1; } else Instructions si FAUX 1; if (Condition_2) Instructions si VRAI 2; Instructions si FAUX 2; Joan S. Morales - Introduction à l'algo. et la programmation
Exemple Un de vos clients, un gérant de salles de cinéma, vous demande de lui produire une application qui lui permettra de mieux gérer les rabais offerts aux clients en fonction de leur âge. Un client a droit à un rabais de 4 dollars s’il est âgé de moins de 12 ans. S’il est âgé de 65 et plus, il obtient alors un rabais de 3 dollars. Le prix normal du billet est fixé à 8 dollars. Joan S. Morales - Introduction à l'algo. et la programmation
Compréhension du problème Intrant AgeClient Extrant PrixBillet Constantes ÂgeAdo = 12 ÂgeRetraite = 65 PrixBilletMax = 8$ RabaisEnfant = 4$ RabaisRetraite = 3$ Joan S. Morales - Introduction à l'algo. et la programmation
Jeu de tests Intrants Extrants AgeClient PrixBillet 5 4$ 11 12 8$ 30 64 65 5$ 90 Joan S. Morales - Introduction à l'algo. et la programmation
Initialisation… const int AgeAdo = 12; const int AgeRetraite = 65; const int PrixBilletMax = 8; const int RabaisEnfant = 4; const int RabaisRetraite = 3; int AgeClient; int PrixBillet; cin >> AgeClient; … Joan S. Morales - Introduction à l'algo. et la programmation
Forme imbriquée et variantes … if (AgeClient < AgeAdo) { PrixBillet = PrixBilletMax - RabaisEnfant; } else if (AgeClient >= AgeRetraite) PrixBillet = PrixBilletMax - RabaisRetraite; PrixBillet = PrixBilletMax; Joan S. Morales - Introduction à l'algo. et la programmation
Forme empilée et variantes … PrixBillet = PrixBilletMax; if(AgeClient < AgeAdo) { PrixBillet = PrixBillet - RabaisEnfant; } if(AgeClient >= AgeRetraite) PrixBillet = PrixBillet - RabaisRetraite; Joan S. Morales - Introduction à l'algo. et la programmation
Est-ce que la forme empilée est toujours la meilleure? Le prix normal du billet est de 10$ pour les clients âgés de moins de 18 ans et de 16$ s’il est âgé de 18 ans et plus. De plus, un étudiant paye 6$ s’il est âgé de moins de 18 ans et 9$ s’il est âgé de 18 ans et plus. Joan S. Morales - Introduction à l'algo. et la programmation
Le switch On peut remplacer les alternatives imbriquées suivantes: if(choix == 1) { // instructions pour le choix 1 } else if(Choix == 2) { // instructions pour le choix 2 else if(Choix == 3) { // instructions pour le choix 3 else { // Erreur Joan S. Morales - Introduction à l'algo. et la programmation
Le switch (suite) Par: switch(Choix) { case 1: // instructions pour le choix 1 break; case 2: // instructions pour le choix 2 case 3: // instructions pour le choix 3 default: // Erreur } Joan S. Morales - Introduction à l'algo. et la programmation