8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?
Trouver le maximum entre deux valeurs Étude de cas 5.1 Trouver le maximum entre deux valeurs Description du problème: Étant donné deux entiers, trouver et afficher la plus grande des deux valeurs. Entrée: Deux entiers. Sortie: Un entier représentant le maximum entre les deux valeurs données en entrée.
Étude de cas 5.1 Ce que l’on sait: Si a et b sont deux entiers, on sait comment comparer a et b: L’ordinateur peut en effet évaluer l’expression a > b La valeur à afficher est b si cette expression est vraie sinon on doit afficher a.
Étude de cas 5.1 On peut faire: LIRE a, b AFFICHER (a>b)*a + (a<=b)*b Problème 1: Difficile de comprendre l’intention du programmeur. Problème 2: Peu de langages permettent cela.
Étude de cas 5.1 Instruction conditionnelle: Il est possible de demander à l’ordinateur d’exécuter une instruction (ou une série d’instructions) seulement si une certaine condition est satisfaite. Forme générale: SI (condition) ALORS {instructions exécutées si la condition est vrai} SINON {instructions exécutées si la condition est fausse}
Étude de cas 5.1 Fonction principale Deux entiers: a et b LIRE a, b AFFICHER max(a,b) où max est une fonction satisfaisant le prototype suivant: max(entier, entier) retourne un entier
Étude de cas 5.1 Fonction max En-tête: max (entier a, entier b) retourne un entier Corps: SI (a > b) ALORS retourner a SINON retourner b
Étude de cas 5.1 Fonction max En-tête: max (entier a, entier b) retourne un entier Corps: SI (a > b) ALORS retourner a SINON retourner b Ex. Lorsque a=5 et b=15 alors (a > b) est faux et la fonction retourne b.
Étude de cas 5.1 Fonction max En-tête: max (entier a, entier b) retourne un entier Corps: SI (a > b) ALORS retourner a SINON retourner b Ex. Lorsque a=5 et b=5 alors (a > b) est faux et la fonction retourne b.
Trouver le maximum entre 3 valeurs Étude de cas 5.2 Trouver le maximum entre 3 valeurs Description du problème: Étant donné trois entiers donnés en entrée, trouver et afficher la plus grande des trois valeurs. Entrée: Trois entiers. Sortie: Le maximum des trois entiers
Étude de cas 5.2 Fonction principale Trois entiers: a, b, c LIRE a, b, c AFFICHER max3(a,b,c) où max3 est une fonction satisfaisant le prototype suivant: max3 (entier, entier, entier) retourne un entier
Traiter le cas où a n’est pas Étude de cas 5.2 Fonction max3 En-tête: max3 (entier a, entier b, entier c) retourne un entier Corps: SI (a est la plus grande des trois valeurs) ALORS retourner a SINON Traiter le cas où a n’est pas la plus grande valeur
Étude de cas 5.2 Fonction max3 En-tête: max3 (entier a, entier b, entier c) retourne un entier Corps: SI (a est la plus grande des trois valeurs) ALORS retourner a SINON SI (b est la plus grande des trois valeurs) ALORS retourner b retourner c
Fonction max3: forme courante Étude de cas 5.2 Fonction max3: forme courante En-tête: max3 (entier a, entier b, entier c) retourne un entier Corps: SI (a est la plus grande des trois valeurs) ALORS retourner a SINON SI (b est la plus grande des trois valeurs) ALORS retourner b SINON retourner c
Étude de cas 5.2 Fonction max3 En-tête: max3 (entier a, entier b, entier c) retourne un entier Corps: SI ((a >b) ET (a > c)) ALORS retourner a SINON SI (b est la plus grande des trois valeurs) ALORS retourner b SINON retourner c
Étude de cas 5.2 Fonction max3 En-tête: max3 (entier a, entier b, entier c) retourne un entier Corps: SI ((a >b) et (a > c)) ALORS retourner a SINON SI ((b > a) et (b > c)) ALORS retourner b SINON retourner c
Étude de cas 5.2 Fonction max3 En-tête: max3 (entier a, entier b, entier c) retourne un entier Corps: SI ((a >b) et (a > c)) ALORS retourner a SINON SI ((b > a) et (b > c)) ALORS retourner b SINON retourner c Que se passe-t-il si a=3, b=3 et c=0 ???
Fonction max3: première solution Étude de cas 5.2 Fonction max3: première solution En-tête: max3 (entier a, entier b, entier c) retourne un entier Corps: SI ((a b) et (a c)) ALORS retourner a SINON SI ((b a) et (b c)) ALORS retourner b SINON retourner c
Fonction max3: seconde solution Étude de cas 5.2 Fonction max3: seconde solution En-tête: max3 (entier a, entier b, entier c) retourne un entier Corps: entier maximum maximum a SI (b > maximum) ALORS maximum b SI (c > maximum) ALORS maximum c retourner maximum Remarquez l’absence de sinon
Fonction max3: troisième solution Étude de cas 5.2 Fonction max3: troisième solution En-tête: max3 (entier a, entier b, entier c) retourne un entier Corps: entiers: maximum maximum max(a,b) maximum max(maximum, c) retourner maximum où max est la fonction définie dans l’étude de cas 5.1
Fonction max3: quatrième solution Étude de cas 5.2 Fonction max3: quatrième solution En-tête: max3 (entier a, entier b, entier c) retourne un entier Corps: retourner max(max(a, b), c) où max est la fonction définie dans l’étude de cas 5.1
Étude de cas 5.3 Trier trois entiers Description du problème: Afficher en ordre croissant trois entiers donnés en entrée. Entrée: Une ligne d’entrée contenant trois entiers. Sortie: Une ligne contenant les trois entiers en ordre croissant.
Étude de cas 5.3 Fonction principale Trois entiers: a, b, c LIRE a, b, c trier3(a, b, c) AFFICHER a, b, c où trier3 est une fonction satisfaisant le prototype suivant: trier3(entier référence, entier référence, entier référence) ne retourne rien.
Étude de cas 5.3 Fonction trier3 En-tête: trier3 (entier référence a, entier référence b, entier référence c) Corps: SI (a > b) ALORS echanger(a, b) SI (a > c) ALORS echanger(a, c) SI (b > c) ALORS echanger(b, c) où echanger est une fonction satisfaisant le prototype echanger(entier référence, entier référence) (Voir étude de cas 4.3)
Étude de cas 5.3 Fonction trier3 En-tête: trier3 (entier référence a, entier référence b, entier référence c) Corps: SI (a > b) ALORS echanger(a, b) SI (a > c) ALORS echanger(a, c) SI (b > c) ALORS echanger(b, c) où echanger est une fonction satisfaisant le prototype echanger(entier référence, entier référence) (Voir étude de cas 4.3) Après cette ligne, a contient la plus petite valeur des 3
Étude de cas 5.3 Fonction trier3 En-tête: trier3 (entier référence a, entier référence b, entier référence c) Corps: SI (a > b) ALORS echanger(a, b) SI (a > c) ALORS echanger(a, c) SI (b > c) ALORS echanger(b, c) où echanger est une fonction satisfaisant le prototype echanger(entier référence, entier référence) (Voir étude de cas 4.3) Après cette ligne, a contient la plus petite valeur des 3 Remarquez l’absence de SINON
Transformer des notes en lettres Étude de cas 5.4 Transformer des notes en lettres Description du problème: On donne en entrée 4 nombres représentant respectivement la plus petite note possibles pour obtenir un A, B, C, D ou E. Ces 4 nombres sont suivis de la note d’un étudiant. Le problème consiste à afficher la lettre correspondant à la note de l’étudiant. Entrée: D’abord, 4 nombres réels représentant les bornes inférieures pour obtenir A, B, C ou D, suivis d’un nombre réel représentant la note de l’étudiant. Sortie: Une des quatre lettre A, B, C, D ou E.
Étude de cas 5.4 Fonction principale Six entiers: borneA, borneB, borneC, borneD, note, tempo LIRE borneA, borneB, borneC, borneD, note afficher_note(borneA, borneB, borneC, borneD, note) où afficher_note est une fonction qui calcule et affiche la note alphabétique et qui satisfait le prototype suivant: afficher_note(réel, réel, réel, réel, réel) ne retourne rien
Fonction afficher_note Étude de cas 5.4 Fonction afficher_note En-tête: afficher_note(réel a, réel b, réel c, réel d, réel note) Corps: SI (note a) ALORS AFFICHER “A” SINON SI (note b) ALORS AFFICHER “B” SINON SI (note c) ALORS AFFICHER “C” SINON SI (note d) ALORS AFFICHER “D” SINON AFFICHER “E”
Calculer le prix des billets de hockey Étude de cas 5.5 Calculer le prix des billets de hockey Description du problème: Concevoir un programme pour le comptoir de vente d’un aréna. Le programme doit lire en entrée un code représentant le type de billets ($25, $20 ou $15) ainsi que le nombre de billets achetés. Le programme doit finalement afficher la phrase "Montant total: " suivi du coût total des billets. Entrée: Deux entiers. Le premier est le code des billets: 1 pour les billets à $25, 2 pour ceux à $20 et 3 pour ceux à $15. Le second entier représente le nombre de billets achetés. Ce dernier nombre doit être strictement plus grand que 0. Sortie: La phrase "Montant total: " suivi d'un entier.
Étude de cas 5.5 Fonction principale Deux entiers: code, nb LIRE code, nb AFFICHER "Montant total: ", prix(code, nb) où prix est une fonction qui calcule le montant total et qui satisfait le prototype suivant: prix(entier, entier) retourne un entier
Étude de cas 5.5 Fonction prix En-tête: entier prix (entier code , entier n) Corps: SI (code =1) ALORS retourner 25 * n SI (code = 2) ALORS retourner 20 * n SI (code = 3) ALORS retourner 15 * n retourner -1 Indique une erreur
Fonction prix: seconde solution Étude de cas 5.5 Fonction prix: seconde solution En-tête: entier prix (entier code , entier n) Corps: CHOIX multiple pour code : SI 1 : retourner 25 * n SI 2 : retourner 20 * n SI 3 : retourner 15 * n AUTRE : retourner -1
Étude de cas 5.5 Fonction principale Trois entiers: code, nb, temp LIRE code, nb temp prix(code, nb) SI (temp > 0) AFFICHER “Montant total: ” prix(code, nb) SINON AFFICHER “Erreur dans l’entrée des données” où prix est une fonction qui calcule le montant total et qui satisfait le prototype suivant: prix(entier, entier) retourne un entier
En résumé Instruction conditionnelle : forme 1 SI (condition) ALORS instructions
En résumé Instruction conditionnelle : forme 2 SI (condition) ALORS instructions SINON
En résumé Instructions conditionnelle : forme 3 SI (condition) ALORS SINON SI (condition) ALORS SINON
Instructions conditionnelle : forme 4 En résumé Instructions conditionnelle : forme 4 dans le cas où (expression) est : valeur : instructions . autre : instructions L’expression est d’abord évaluée puis le résultat est comparé aux différentes valeurs (qui doivent être distinctes). Finalement, le bloc d’instruction correspondant à la valeur de l’expression est exécuté.
Comment le faire en C/C++ Les instructions En C/C++, une instruction est simple ou composée (dans ce dernier cas on parle aussi d’un bloc d’instructions). Instructions simples: Ex. x = x + 1; y = cos(x); x = cos(x / y - 8) * 2; Blocs d’instructions: Ex. { x = x + 1; } 3 instructions simples 1 bloc d’instructions
Comment le faire en C/C++ Forme 1 if (expression) instruction L’instruction est évaluée si et seulement si la valeur de l’expression est différente de 0.
Comment le faire en C/C++ Forme 2 if (expression) instruction else La première instruction (simple ou composée) est évaluée si la valeur de l’expression est différente de 0, sinon, la seconde instruction est évaluée.
Comment le faire en C/C++ Forme 3 if (expression) instruction else if (expression) else
Comment le faire en C/C++ Forme 4 switch (expression) { case expression-constante : instruction default: instructions } L’expression doit être de type entier. Elle est d’abord évaluée puis l’instruction correspondante est évaluée ainsi que les instructions suivantes.
Comment le faire en C/C++ Exemple switch (n) { case 0 : cout << 0; case 1 : cout << 1; case 2 : cout << 2; default : cout << 3; } Si n vaut 1 alors le programme affichera: 123
Comment le faire en C/C++ L’instruction break Pour sortir d’un switch sans exécuter toutes les instructions, on peut utiliser l’instruction break. Nous verrons plus tard les autres usages que nous pouvons faire de cette instruction.
Comment le faire en C/C++ Exemple switch (n) { case 0 : { cout << 0; break; } case 1 : { cout << 1; break; } case 2 : { cout << 2; break; } default : cout << 3; } Si n vaut 1 alors le programme affichera simplement: 1
Comment le faire en C/C++ L’opérateur conditionnel “?:” expression1 ? expression2 : expresion3 expression1 est d’abord évaluée. Si sa valeur est différente de 0 alors expression2 est évaluée. Sinon, expression3 est évaluée. La valeur d’une expression conditionnelle est égale à la valeur de l’expression qui est évaluée (expression2 ou expression3). Le type d’une expression conditionnelle est le type le plus général entre celui de expression2 et expression3. Donc le type est double si une des deux expression est de type double.
Exercices Faites un pas-à-pas pour chacune des cinq études de cas que nous avons discutées. Traduisez les algorithmes en C/C++ Utilisez l’instruction switch à l’intérieur d’un petit programme. Étudiez le comportement de votre programme dans différentes situations: avec ou sans break, aucune instruction, utilisation d’une variable au lieu d’une instruction constante, etc.