Joan S. Morales - Introduction à l'algo. et la programmation 1 3. Expressions logiques et répétitives –Les expressions logiques –La répétitive –La variante do..while –La variante for –Opérateurs d’incrémentation
Joan S. Morales - Introduction à l'algo. et la programmation 2 L’expression logique Appartient à la famille des expressions booléennes Est soit vraie ou fausse Permet de représenter une condition Met en relation deux expressions relationnelles !(Age < AgeAdulte) (Age >= AgeAdulte) && (Age < AgeRetraite) (Age = AgeRetraite)
L’opérateur logique NON p! p VraiFaux Vrai Joan S. Morales - Introduction à l'algo. et la programmation 3
L’opérateur logique ET pqp && q Vrai Faux VraiFaux Joan S. Morales - Introduction à l'algo. et la programmation 4
L’opérateur logique OU pqp || q Vrai FauxVrai FauxVrai Faux Joan S. Morales - Introduction à l'algo. et la programmation 5
Priorité Opérateur AssociativitéOpérateur PseudocodeC++ 1NON! Unaire 2ET&& Binaire 3OU|| Binaire Joan S. Morales - Introduction à l'algo. et la programmation 6 Opérateurs logiques 6 N.E.O!
Exemple Le prix normal du billet est de 10$ Un rabais de 3$ est accordé si le client a moins de 18 ans ou 65 ans et plus Le client doit présenter sa carte d’identité. Calculer le prix du billet. Joan S. Morales - Introduction à l'algo. et la programmation 7
Exemple (suite) int PrixDuBillet = 10; int Age; bool Carte; cin >> Age; cin >> Carte; if( ) { PrixDuBillet = PrixDuBillet -3; } Joan S. Morales - Introduction à l'algo. et la programmation 8
Exercice 1 a) ( 12 > 8) && (14 < 12) b) (12 > 8) && ! (14 < 12) c) ! ((12 > 8) && (14 < 12)) d) (3 8) && (14 < 12) e) (12 > 8) && ! (14 < 12) || (3 <= 3) f) (12 > 8) && (14 < 12) || ! (3 <= 3) g) (12 > 8) && ! (14 < 12) || ! (3 <= 3) h) !((12 > 8) && ! (14 < 12) || ! (3 <= 3)) i) !(!(12 > 8) && ! (14 < 12) || ! (3 <= 3)) j) !(!(12 > 8) && ! (14 = 0) Joan S. Morales - Introduction à l'algo. et la programmation 9
Exercice 2 a) p || q b) p && q c) ! (p && q) d) ! ((p || q) && q) e) (p || q) && ! (p) f) p || q && ! (p) g) p && q || !(p && q) h) p && q || !(p || q) i) !(p && q) && !(p || q) j) !(p || q) && !(p && q) k) p || !(q) && !(p) && q Joan S. Morales - Introduction à l'algo. et la programmation 10 pq vrai faux vrai faux
Exercice 1 - Solution a) Faux b) Vrai c) Vrai d) Vrai e) Vrai f) Faux g) Vrai h) Faux i) Vrai j) Vrai Joan S. Morales - Introduction à l'algo. et la programmation 11
Exercice 2 - Solution a) 1,2,3 b) 1 c) 2,3,4 d) 2,4 e) 3 f) 1,2,3 g) 1,2,3,4 h) 1,4 i) 4 j) 4 k) 1,2 Joan S. Morales - Introduction à l'algo. et la programmation 12
Les erreurs de logique La Tautologie: expression logique qui est toujours vraie! Age > 18 || Age < 65 La contradiction: expression logique qui est toujours fausse Age 65 Joan S. Morales - Introduction à l'algo. et la programmation 13
Les lois de De Morgan ! (p && q) = ! p || ! q –NON(il fait beau ET il fait chaud) = il ne fait pas beau OU il ne fait pas chaud ! (p || q) = ! p && ! q –NON(il pleut OU il neige) = il ne pleut pas ET il ne neige pas Joan S. Morales - Introduction à l'algo. et la programmation 14
Joan S. Morales - Introduction à l'algo. et la programmation 15 La répétitive Contexte –Vous devez afficher à l’écran les nombres entiers de 1 à 5 inclusivement Solution 1 - Représentation linéaire cout << "1"; cout << "2"; cout << "3"; cout << "4"; cout << "5"; Et si on veut compter jusqu’à 50?? 15
Joan S. Morales - Introduction à l'algo. et la programmation 16 La répétitive (suite) Solution 2 - Représentation de transition Compteur = 1; cout << Compteur;// Permet d'écrire 1 Compteur = Compteur + 1; cout << Compteur; // Permet d'écrire 2 Compteur = Compteur + 1; cout << Compteur; // Permet d'écrire 3 Compteur = Compteur + 1;... cout << Compteur; // Permet d'écrire 50 Compteur = Compteur + 1; 16
Joan S. Morales - Introduction à l'algo. et la programmation 17 La répétitive (suite) Solution 3 - Représentation itérative Les instructions qui se répètent sont cout << Compteur; Compteur = Compteur + 1 Voici la structure répétitive const int Max = 50; int Compteur = 1; while (Compteur <= Max) { cout << Compteur; Compteur = Compteur + 1; } 17 Notez l’absence de ;
Joan S. Morales - Introduction à l'algo. et la programmation 18 Les composants d’une répétitive classique const int Max = 50; int Compteur = 1; while (Compteur <= Max) { cout << Compteur; Compteur = Compteur + 1; } 18 Initialisation de la variable de contrôle Condition de poursuite Modification de la variable de contrôle Traitement
Joan S. Morales - Introduction à l'algo. et la programmation 19 Remarques Il faut correctement initialiser la variable de contrôle Vérifiez la condition de poursuite Le traitement ne devrait pas modifier la valeur de la variable de contrôle Il ne faut pas oublier de modifier la variable de contrôle après le traitement Attention aux boucles infinies!! Les opérations de cette forme de répétitives ne seront pas exécutées si la condition est fausse au départ 19
Joan S. Morales - Introduction à l'algo. et la programmation 20 Morphogramme de la répétitive 20
Joan S. Morales - Introduction à l'algo. et la programmation 21 Boucle à compteur const int Min = 20; const int Max = 30; int Compteur = Min; while (Compteur <= Max) { cout << Compteur; Compteur = Compteur + 1; } Boucle conditionnelle const int Fin = 0; int Nombre; cin >> Nombre; while (Nombre != Fin) { cout << Nombre << endl; cin >> Nombre; } 21
Préparation Exercice 3.14 Écrire un programme qui demande à l’utilisateur un nombre entier entre 1 et 100 et qui trouve si ce nombre est premier ou non. Les nombres premiers inférieurs à 100 sont 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89 et 97. Joan S. Morales - Introduction à l'algo. et la programmation 22
Préparation Exercice 3.14 (suite) Lire Nombre Premier = vrai Compteur = 2 Tant que Compteur <= Nombre -1 { Si Nombre est divisible par Compteur sans reste { Premier = faux } Joan S. Morales - Introduction à l'algo. et la programmation 23
Le développement graduel (Exercice 3.15) Écrire un programme qui demande un nombre entre 1 et 40 et qui affiche un motif. Par exemple, voici les motifs avec N=10: o oo ooo oooo ooooo oooooo ooooooo oooooooo ooooooooo oooooooooo Joan S. Morales - Introduction à l'algo. et la programmation 24
Le développement graduel (suite) Lire Nombre Ligne = 1 Tant que Ligne <= Nombre Afficher_une_ligne Ligne = Ligne + 1 Afficher_une_ligne: Colonne = 1 Tant que Colonne <= Ligne Afficher un “o” Colonne = Colonne +1 Changer de ligne Joan S. Morales - Introduction à l'algo. et la programmation 25
La variante do … while On utilise une boucle do...while lorsqu’on désire une répétitive dont le bloc d’instructions doit nécessairement s’exécuter au moins une fois. Initialisation de la VC do { Traitement Modification de la VC } while(condition); Joan S. Morales - Introduction à l'algo. et la programmation 26 Notez la présence du ;
Morphogramme d’un do…while Joan S. Morales - Introduction à l'algo. et la programmation 27
Exemple d’un do…while en C++ Le menu const int Quitter = 0; int Choix; do { cout << ″Menu...″ << endl; cin >> Choix; } while (Choix!=Quitter); Joan S. Morales - Introduction à l'algo. et la programmation 28
La variante for for (initialisation de la VC ; condition ; modification de la VC) { // Traitement } Joan S. Morales - Introduction à l'algo. et la programmation 29
Exemple d’un while en C++ Cpt = Min; while (Cpt <= Max) { cout << Cpt << endl; ++Cpt; } Exemple d’un for en C++ for (Cpt = Min; Cpt <= Max; ++Cpt) { cout << Cpt << endl; } Joan S. Morales - Introduction à l'algo. et la programmation 30
Autre exemple d’un for… Joan S. Morales - Introduction à l'algo. et la programmation 31 Vieille façon de faire un cout <<...
Opérateurs arithmétiques d’affectation OpérateurExempleÉquivalent +=Nombre += 1 ;Nombre = Nombre + 1; -=Nombre -= 1 ;Nombre = Nombre – 1; *=Nombre *= 2 ;Nombre = Nombre * 2; /=Nombre /= 2 ;Nombre = Nombre / 2; %=Nombre %= 2 ;Nombre = Nombre % 2; Joan S. Morales - Introduction à l'algo. et la programmation 32 OpérateurExempleÉquivalent ++++Nombre ;Nombre = Nombre + 1; ----Nombre ;Nombre = Nombre – 1; Opérateurs d’incrémentation
Exemple d’utilisation en C++ const int Min = 20; const int Max = 30; int Compteur; Compteur = Min; while (Compteur <= Max) { cout << Compteur << endl; ++Compteur; // ou Compteur += 1 } Joan S. Morales - Introduction à l'algo. et la programmation 33
Tous (presque) les opérateurs et leurs priorités 1 (x)(x) x++ x-- 2 +x+x -x-x !x!x ++x --x 3 x * y x / y x % y 4 x + y x - y Joan S. Morales - Introduction à l'algo. et la programmation 34 6 x < y x > y x <= y x >= y 7 x == y x != y 8&& 9|| 10 x = y x += y x -= y x *= y x /= y x %= y