Title: 8PRO100
18PRO100
Éléments de programmation
Comment faire prendre une décision à un
ordinateur?
2É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.
3Étude de cas 5.1
Ce que lon sait Si a et b sont deux entiers, on
sait comment comparer a et b Lordinateur peut
en effet évaluer lexpression a gt b La valeur
à afficher est b si cette expression est
vrai sinon on doit afficher a.
4Étude de cas 5.1
On peut faire lire a b afficher (agtb)a
(altb)b Problème 1 Difficile de comprendre
lintention du programmeur. Problème 2 Peu de
langages permettent cela.
5Étude de cas 5.1
Instruction conditionnelle Il est possible de
demander à lordinateur dexécuter une
instruction (ou une série dinstructions)
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
6É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
7Étude de cas 5.1
Fonction max En-tête max(entier a, entier b)
retourne un entier Corps si (a gt b) alors
retourner a sinon retourner b
8Étude de cas 5.1
Fonction max En-tête max(entier a, entier b)
retourne un entier Corps si (a gt b) alors
retourner a sinon retourner b
Ex. Lorsque a5 et b15 alors (a gt b) est faux et
la fonction retourne b.
9Étude de cas 5.1
Fonction max En-tête max(entier a, entier b)
retourne un entier Corps si (a gt b) alors
retourner a sinon retourner b
Ex. Lorsque a5 et b5 alors (a gt b) est faux et
la fonction retourne b.
10É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
11É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
12É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 nest pas la plus grande
valeur
13É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
14É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
15Étude de cas 5.2
Fonction max3 En-tête max3(entier a, entier
b, entier c) retourne un entier Corps si ((a
gtb) et (a gt c)) alors retourner a sinon si (b
est la plus grande des trois valeurs) alors
retourner b sinon retourner c
16Étude de cas 5.2
Fonction max3 En-tête max3(entier a, entier
b, entier c) retourne un entier Corps si ((a
gtb) et (a gt c)) alors retourner a sinon si
((b gt a) et (b gt c)) alors retourner
b sinon retourner c
17Étude de cas 5.2
Fonction max3 En-tête max3(entier a, entier
b, entier c) retourne un entier Corps si ((a
gtb) et (a gt c)) alors retourner a sinon si
((b gt a) et (b gt c)) alors retourner
b sinon retourner c
Que se passe-t-il si a3, b3 et c0 ???
18É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
19É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 gt maximum) alors maximum b si (c gt maximum)
alors maximum c retourner maximum
Remarquez labsence de sinon
20É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
21É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
22É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 dentrée contenant
trois entiers. Sortie Une ligne contenant les
trois entiers en ordre croissant.
23É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.
24É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 gt b) alors echanger(a, b) si (a
gt c) alors echanger(a, c) si (b gt 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)
25É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 gt b) alors echanger(a, b) si (a
gt c) alors echanger(a, c) si (b gt 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
26É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 gt b) alors echanger(a, b) si (a
gt c) alors echanger(a, c) si (b gt 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 labsence de sinon
27É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 dun étudiant. Le
problème consiste à afficher la lettre
correspondant à la note de létudiant. Entrée
Dabord, 4 nombres réels représentant les bornes
inférieures pour obtenir A, B, C ou D, suivit
dun nombre réel représentant la note de
létudiant. Sortie Une des quatres lettre
A,B,C,D ou E.
28É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
29É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
30Étude de cas 5.5
Calculer le prix des billets de
hockey Description du problème Concevoir un
programme pour le comptoir de vente dun 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.
31É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
32É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
33É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
34Étude de cas 5.5
Fonction principale Trois entiers code nb
temp lire code nb temp ? prix(code, nb) si
(temp gt 0) afficher Montant total
prix(code, nb) sinon afficher Erreur dans
lentré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
35En résumé
Instructions conditionnelles forme 1 si
(condition) alors instructions
36En résumé
Instructions conditionnelles forme 2 si
(condition) alors instructions sinon instructio
ns
37En résumé
Instructions conditionnelles forme 3 si
(condition) alors instructions sinon si
(condition) alors instructions sinon instruction
s
38En résumé
Instructions conditionnelles forme 4 dans le
cas où (expression) est valeur
instructions valeur instructions .
. . valeur instructions
autre instructions Lexpression est dabord
évaluée puis le résultat est comparé aux
différentes valeurs (qui doivent être
distinctes). Finalement, le bloc dinstruction
correspondant à la valeur de lexpression est
exécuté.
39Comment le faire en C
Les instructions En C, une instruction est
simple ou composée (dans ce dernier cas on parle
aussi dun bloc dinstructions). Instructions
simples Ex. x x 1 y cos(x)
x cos(x / y - 8) 2 Blocs
dinstructions Ex. x x 1
y cos(x) x cos(x / y - 8) 2
3 instructions simples
1 bloc dinstructions
40Comment le faire en C
Forme 1 if (expression) instruction Linstructi
on est évaluée si et seulement si la valeur de
lexpression est différente de 0.
41Comment le faire en C
Forme 2 if (expression) instruction else instru
ction La première instruction (simple ou
composée) est évaluée si la valeur de
lexpression est différente de 0, sinon, la
seconde instruction est évaluée.
42Comment le faire en C
Forme 3 if (expression) instruction else if
(expression) instruction else instruction
43Comment le faire en C
Forme 4 switch (expression) case
expression-constante instruction case
expression-constante instruction default
instructions Lexpression doit être de type
entier. Elle est dabord évaluée puis
linstruction correspondante est évaluée ainsi
que les instructions suivantes.
44Comment le faire en C
Exemple switch (n) case 0 cout ltlt 0 case 1
cout ltlt 1 case 2 cout ltlt 2 default cout ltlt
3 Si n vaut 1 alors le programme affichera
123
45Comment le faire en C
Linstruction break Pour sortir dun switch sans
exécuter toutes les instructions, on peut
utiliser linstruction break. Nous verrons plus
tard les autres usages que nous pouvons faire de
cette instruction.
46Comment le faire en C
Exemple switch (n) case 0 cout ltlt
0break case 1 cout ltlt 1break case 2
cout ltlt 2break default cout ltlt 3 Si n
vaut 1 alors le programme affichera simplement 1
47Comment le faire en C
Lopérateur conditionnel ? expression1 ?
expression2 expresion3 expression1 est dabord
évaluée. Si sa valeur est différente de 0 alors
expression2 est évaluéee. Sinon, expression3 est
évaluée. La valeur dune expression
conditionnelle est égale à la valeur de
lexpression qui est évaluée (expression2 ou
expression3). Le type dune 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.
48Exercices
- Faites un pas-à-pas pour chacune des cinq
études de cas que nous avons discutées. - Traduisez les algorithmes en C
- Utilisez linstruction switch à lintérieur dun
petit programme. Étudiez le comportement de votre
programme dans différentes situations avec ou
sans break, aucune instruction, utilisation dune
variable au lieu dune instruction constante, etc.