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

Download Report

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

8PRO100
É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, 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 vrai
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 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.
É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
É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
sinon
retourner c
É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
Que se passe-t-il si
retourner c
a=3, b=3
et c=0
???
É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
É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
É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
É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:
Après cette ligne, a contient
si (a > b) alors echanger(a, b)
la plus petite valeur des 3
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:
Après cette ligne, a contient
si (a > b) alors echanger(a, b)
la plus petite valeur des 3
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)
Remarquez
l’absence
de sinon
É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 suivies 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, suivit d’un nombre réel
représentant la note de l’étudiant.
Sortie: Une des quatres 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
É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”
É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: " suivit 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: " suivit 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
É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é
Instructions conditionnelles: forme 1
si (condition) alors instructions
En résumé
Instructions conditionnelles: forme 2
si (condition) alors
instructions
sinon
instructions
En résumé
Instructions conditionnelles: forme 3
si (condition) alors
instructions
sinon si (condition) alors
instructions
sinon
instructions
Comment le faire en C
Les instructions
En 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;
}
3 instructions simples
1 bloc d’instructions
Comment le faire en 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
Forme 2
if (expression)
instruction
else
instruction
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
Forme 3
if (expression)
instruction
else if (expression)
instruction
else
instruction
Comment le faire en 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.
Comment le faire en 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
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
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
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éee. 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
• 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.