8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

46
8PRO107 Éléments de programmation ent faire prendre une décision à un ordinat

Transcript of 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

Page 1: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

8PRO107

Éléments de programmation

Comment faire prendre une décision à un ordinateur?

Page 2: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

Étude de cas 5.1

Trouver le maximum entre deux valeurs

Description du problème: Étant donné deux entiers, trouveret 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.

Page 3: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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 vraiesinon on doit afficher a.

Page 4: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

Étude de cas 5.1

On peut faire:LIRE a, bAFFICHER (a>b)*a + (a<=b)*b

Problème 1: Difficile de comprendre l’intention du programmeur.

Problème 2: Peu de langages permettent cela.

Page 5: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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}

Page 6: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

Étude de cas 5.1

Fonction principale

Deux entiers: a et b

LIRE a, bAFFICHER max(a,b)

où max est une fonction satisfaisant le prototype suivant:

max(entier, entier) retourne un entier

Page 7: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

Étude de cas 5.1

Fonction max

En-tête:max (entier a, entier b) retourne un entier

Corps:SI (a > b) ALORS

retourner aSINON

retourner b

Page 8: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

Étude de cas 5.1

Fonction max

En-tête:max (entier a, entier b) retourne un entier

Corps:SI (a > b) ALORS

retourner aSINON

retourner b

Ex. Lorsque a=5 et b=15 alors (a > b) est faux et la fonction retourne b.

Page 9: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

Étude de cas 5.1

Fonction max

En-tête:max (entier a, entier b) retourne un entier

Corps:SI (a > b) ALORS

retourner aSINON

retourner b

Ex. Lorsque a=5 et b=5 alors (a > b) est faux et la fonction retourne b.

Page 10: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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

Page 11: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

Étude de cas 5.2

Fonction principale

Trois entiers: a, b, c

LIRE a, b, cAFFICHER max3(a,b,c)

où max3 est une fonction satisfaisant le prototype suivant:

max3 (entier, entier, entier) retourne un entier

Page 12: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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 aSINON

Traiter le cas où a n’est pas la plus grande valeur

Page 13: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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 aSINON

SI (b est la plus grande des trois valeurs) ALORS retourner b

SINONretourner c

Page 14: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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 aSINON SI (b est la plus grande des trois valeurs) ALORS

retourner bSINON

retourner c

Page 15: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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 aSINON SI (b est la plus grande des trois valeurs) ALORS

retourner bSINON

retourner c

Page 16: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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 aSINON SI ((b > a) et (b > c)) ALORS

retourner bSINON

retourner c

Page 17: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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 aSINON SI ((b > a) et (b > c)) ALORS

retourner bSINON

retourner cQue se passe-t-il si

a=3, b=3 et c=0

???

Page 18: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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 aSINON SI ((b a) et (b c)) ALORS

retourner bSINON

retourner c

Page 19: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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 aSI (b > maximum) ALORS maximum bSI (c > maximum) ALORS maximum cretourner maximum

Remarquezl’absencede sinon

Page 20: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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

Page 21: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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

Page 22: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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.

Page 23: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

Étude de cas 5.3

Fonction principale

Trois entiers: a, b, c

LIRE a, b, ctrier3(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.

Page 24: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

Étude de cas 5.3Fonction 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)

Page 25: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

Étude de cas 5.3Fonction 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

Page 26: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

Étude de cas 5.3Fonction 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

Remarquezl’absence

de SINON

Page 27: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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.

Page 28: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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

Page 29: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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”

Page 30: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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.

Page 31: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

É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

Page 32: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

Étude de cas 5.5

Fonction prix

En-tête: entier prix (entier code , entier n)

Corps:SI (code =1) ALORS retourner 25 * nSI (code = 2) ALORS retourner 20 * nSI (code = 3) ALORS retourner 15 * nretourner -1

Indique une erreur

Page 33: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

Étude de cas 5.5Fonction 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

Page 34: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

En résumé

Instruction conditionnelle : forme 1

SI (condition) ALORS instructions

Page 35: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

En résumé

Instruction conditionnelle : forme 2

SI (condition) ALORS instructions

SINONinstructions

Page 36: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

En résumé

Instructions conditionnelle : forme 3

SI (condition) ALORS instructions

SINON SI (condition) ALORSinstructions

SINONinstructions

Page 37: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

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; y = cos(x); x = cos(x / y - 8) * 2; }

1 bloc d’instructions

3 instructions simples

Page 38: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

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.

Page 39: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

Comment le faire en C/C++

Forme 2

if (expression)instruction

elseinstruction

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.

Page 40: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

Comment le faire en C/C++

Forme 3

if (expression)instruction

else if (expression)instruction

else instruction

Page 41: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

Comment le faire en C/C++

Forme 4

switch (expression){ case expression-constante : instruction 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.

Page 42: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

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

Page 43: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

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.

Page 44: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

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

Page 45: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

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.

Page 46: 8PRO107 Éléments de programmation Comment faire prendre une décision à un ordinateur?

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.