language de Programmation structuree
Transcript of language de Programmation structuree
-
8/10/2019 language de Programmation structuree
1/11
1
Programmation structure
Universit de Nice - Sophia Antipolis
Richard GrinVersion 1.1.3 1/10/11
Richard Grin Programmation structure page 2
Plan
Algorithme Principe de base de la programmation structure
Les structures
Traduction en Java
Richard Grin Programmation structure page 3
Objectif
Matriser la complexit lors de lcriture de
programmes/algorithmes comportant de
nombreuses instructions
Richard Grin Programmation structure 4
Algorithme
Richard Grin Programmation structure 5
Algorithme
Lenchanement des oprations lmentaires qui
permettent de rsoudre un problme sappelle un
algorithme
Nimporte quelle machine ou individu qui suit la
lettre lalgorithme obtiendra le bon rsultat, mme sil
ne comprend pas ce quil fait
Programme et algorithme
Un programme est crit dans un langage qui peut
tre excut par une machine
Un algorithme est crit dans un pseudo-langage,
souvent proche dun langage informatique mais
dbarrass de dtails techniques lis aux
langages informatiques ou la machine, qui
gnent la comprhension du cheminement
logique
Richard Grin Programmation structure page 6
-
8/10/2019 language de Programmation structuree
2/11
2
Exemple : algorithme dEuclide
On cherche le PGCD de deux entiers naturels aet b (a > b)
Description informelle de lalgorithme :
1. Si b = 0, le PGCD est a ; FIN
2. sinon,
calculer r le reste de la division de a par b,
puis remplacer a par b, puis b par r,
puis recommencer ltape prcdente
Richard Grin Programmation structure page 7
Exemple de calcul de PGCD
PGCD de 18 et de 14 (a = 18 et b = 14) b 0 ; r = 18 modulo 14 = 4 ; a = 14 ; b = 4
b 0 ; r = 14 modulo 4 = 2 ; a = 4 ; b = 2
b 0 ; r = 4 modulo 2 = 0 ; a = 2 ; b = 0
b = 0 donc on sarrte
2 est le PGCD de 18 et de 14
Richard Grin Programmation structure page 8
Transcription plus formelle
Il faut maintenant transcrire cette description
informelle dans les termes de la programmation
structure
a nest pas toujours vident
Il peut exister plusieurs transcriptions possibles
Richard Grin Programmation structure page 9
Exemple de pseudo-langage
Entrer a, b
tant que (b 0) rpter {
r := a modulo b
a := b
b := r
}Afficher a
Richard Grin Programmation structure page 10
Preuve de programme/dalgorithme
Pour les programmes les plus simples il est
possible de dmontrer que le rsultat de
lalgorithme est correct
Le plus souvent la preuve est trop complexe et on
se contente deffectuer des tests sur le
programme crit dans le langage informatique
La preuve de programme sappuie
essentiellement sur les invariants de boucle (voir
section dans la suite de ce cours)
Richard Grin Programmation structure page 11
Complexit dun algorithme
Il existe le plus souvent plusieurs algorithmes
pour rsoudre un problme
La complexit dun algorithme mesure lefficacit
dun algorithme en temps de calcul ou en quantit
de mmoire
On recherche des algorithmes qui ncessitent
moins de temps de calcul ou (souvent
incompatible) moins despace mmoire
Richard Grin Programmation structure page 12
-
8/10/2019 language de Programmation structuree
3/11
3
Calcul de la complexit
La complexit dpend le plus souvent de la taillen des donnes traiter
Le calcul de la complexit dun algorithme donne
une valuation du nombre doprations
significatives en fonction de la taille n
Par exemple, on dira quen moyenne (notion
probabiliste car dpend des donnes) le tri par
insertion de n lments ncessite (n - n) / 4
oprations de comparaison entre lments trier
Richard Grin Programmation structure page 13
Notation O()
La complexit est surtout importante pour lesgrands nombres (toujours rapide si petit nombre)
Pour les grands nombres n est trs petit par
rapport n
On dit que le tri par insertion est en O(n), ce qui
donne un ordre de grandeur pour lefficacit du tri
par insertion
Les meilleurs algorithmes de tri sont en O(n log n)
Richard Grin Programmation structure page 14
Classes de complexit
Les algorithmes les plus rapides sont en O(1) : ne
dpend pas de la taille des donnes traiter
Algorithme linaire : O(n)
Logarithmique : O(log n), meilleur que O(n)
Moins bons :
Polynomial : en O(np) pour un certain p
Exponentiel : en O(exp n) (catastrophique !)
Richard Grin Programmation structure page 15
Exemple
Pour trier 30.000 lments, il faudra environ
900.000.000 comparaisons avec le tri par
insertion qui est en O(n)
1.600.000 comparaisons avec un tri
quicksort qui est en O(n log n)
Richard Grin Programmation structure page 16
Richard Grin Programmation structure page 17
Principe de laprogrammation structure
Principe gnral de base
Un programme peut comporter des milliers, et
mme des millions dinstructions
Impossible pour un dveloppeur davoir une vision
densemble et de grer cette complexit
Il faut dcomposer le programme en lments plus
simples apprhender
Le discours de la mthode de Descartes : Diviser
chacune des difficults que jexaminerai en autant
de parcelles quil se pourrait, et quil serait requis
pour les rsoudre.
Richard Grin Programmation structure page 18
-
8/10/2019 language de Programmation structuree
4/11
4
Programmation structure
Une mauvaise dcomposition peut rendre leproblme encore plus difficile rsoudre
La programmation structure permet de bien
dcomposer un programme complexe en parties
plus simples comprendre
Richard Grin Programmation structure page 19
Principe
Un programme est dcompos en modules Chaque module a une des structures de la
programmation structure
En plus de permettre une bonne dcomposition,
ce principe offre un bon guide lors de lcriture du
programme puisque les structures de la
programmation structure sont simples et peu
nombreuses
Richard Grin Programmation structure page 20
Spcification des modules
Lorsquon introduit un nouveau module dans la
dcomposition, il faut le dfinir de faon prcise
En effet, lorsquon cherchera le dcomposer
son tour, il ne faut pas avoir regarder ce qui
lentoure
Il faut donner une spcification du module qui
dcrit la situation de dpart (les pr-conditions)
ce qui sera obtenu la fin de lexcution du
module (les post-conditions)
Richard Grin Programmation structure page 21
Spcification des modules
La spcification dit ce que lon veut obtenir mais
pas comment lobtenir
Le comment sera donn lorsque le module
sera dcompos son tour
Richard Grin Programmation structure page 22
Programmation par contrat
Le contrat du module est le suivant :
si on fournit au module des donnes qui satisfont
aux pr-conditions, le module assure quil rendra
un rsultat qui satisfera aux post-conditions
Richard Grin Programmation structure page 23
Exemple de spcification
Pour une mthode qui insre un nombre entier n
dans une liste de nombres entiers l dj trie par
ordre croissantvoid inserer(Liste l, int n)
Pr-condition :la liste dentiers l est trie par ordre croissant
Post-condition :le nombre n est ajout la liste l
la liste l est trie par ordre croissant
Richard Grin Programmation structure page 24
-
8/10/2019 language de Programmation structuree
5/11
5
Richard Grin Programmation structure page 25
Les structures de laprogrammation structure
Structures de laprogrammation structure
Chaque module a une des ces 3 structures :
suite de modules
alternative
rptition
Richard Grin Programmation structure page 26
Suite
Richard Grin Programmation structure page 27
Faire Traitement 1 puis Traitement 2
Chaque module a lui-mme une des
structures de la programmation
structure
Cest le systme des poupes
russes qui sembotent les unes
dans les autres Se gnralise en une suite de n
traitements (n > 2)
Exemple
Saisir une fraction (x / y)
Rduire la fraction (on obtient a / b)
m = a * b
Richard Grin Programmation structure page 28
Alternative
Richard Grin Programmation structure page 29
Si la condition est vraie,
faire Traitement 1,
sinon, faire Traitement 2
Exemple si (x > y) {
max = x;
}
sinon {
max = y;
}
Variante (pour les cas o on ne fait rien si la
condition est fausse) :
si (x > max) {
max = x;
}
Richard Grin Programmation structure page 30
-
8/10/2019 language de Programmation structuree
6/11
6
Rptition jusqu
Richard Grin Programmation structure page 31
Rpter Traitement
jusqu ce que la condition ( de fin ) soit vraie
Lordre naturel dexcution est
de haut en bas et de gauche droite ;
on ajoute une flche pour indiquer
un autre ordre
Exemple
rpter {x = x + 10;
} jusqu (x < y)
Richard Grin Programmation structure page 32
Rptition tant que
Richard Grin Programmation structure page 33
Tant que condition est vraie,
rpter Traitement
Exemple
tant que (x < y) rpter {
x = x + 10;
}
Richard Grin Programmation structure page 34
Diffrence importanteentre jusqu et tant que
Richard Grin Programmation structure page 35
Avec jusqu, le traitement est excut au
moins une fois
Exemple
rpter {
x = x + 10;
} jusqu (x >= y)
Richard Grin Programmation structure page 36
On commence par augmenter
x de 10, mme si x >= y
au dbut
-
8/10/2019 language de Programmation structuree
7/11
7
Rptition pour
Cas particulier de la boucle tant que Utilis quand on sait au moment de lcriture de
lalgorithme combien de fois la boucle va tre
parcourue
Pour i de 1 n rpter Traitement
i sappelle la variable de boucle
Richard Grin Programmation structure page 37
Exemple
pour i de 1 20 rpter {s = s + i;
}
Richard Grin Programmation structure page 38
Richard Grin Programmation structure page 39
Complment sur lesinvariants de boucle
Cette section est rserve aux curieux qui
souhaiteraient avoir une ide de la faon de
prouver un algorithme en utilisant des invariants
de boucle
Il peut tre intressant de prouver des parties de
programmes si on veut tre certain davoir bien
pris en compte tous les cas de figure
Richard Grin Programmation structure page 40
Rappel sur les boucles Essentiellement 2 types de boucle :
Tant que (condition) rpter traitement
Rpter traitement jusqu (condition_de_fin)
On peut se passer du 2me type qui peut tre
remplac par :
traitement suivi de tant que(non condition_de_fin)
rpter traitement
La suite de cette section ne considrera que les
boucles tant que
Appelons condition de rptition la condition
dune boucle tant que Richard Grin Programmation structure page 41
Invariant de boucle Un invariant de boucle est une expression
boolenne toujours vraie au dbut et la fin dune
certaine boucle
Pour dmontrer quune expression boolenne est
un invariant de boucle, il suffit de dmontrer que
linvariant est vrai juste avant la boucle et que
si lexpression est vraie au dbut de la boucle,
et si la condition de rptition est vraie,
alors lexpression est vraie la fin de la boucle
Richard Grin Programmation structure page 42
-
8/10/2019 language de Programmation structuree
8/11
8
Invariant de boucle
Entrer a, b
a0 = a; b0 = b
tant que (b 0) rpter {
r := a modulo b
a := b
b := r
}
Afficher a
Richard Grin Programmation structure page 43
Invariant de boucle :
les diviseurs de a0
et de b0 sont les
mmes que ceux de
a et de b.
a0 et b0 ont t
introduits pour
faciliter lexpression
de linvariant de
boucle
Preuve de la boucle
Il faut prouver que la boucle se terminera, ce quiest vident puisque b est un entier positif qui
dcrot (dfinition du reste de la division entire :
a = bq + r avec r < b)
A la fin on doit trouver que a est bien le PGCD des
2 nombres du dpart, compte tenu de linvariant
de boucle et que la condition de rptition est
fausse (puisquon est sorti de la boucle)
Cest vrai car lensemble des diviseurs du a final
est lensemble des diviseurs des a et b du dpart
Richard Grin Programmation structure page 44
Richard Grin Programmation structure page 45
Traduction en Java
Suite de traitements
Suite dinstructions lmentaires :int x = 3;
int y = x + 8;
Bloc avec des accolades
Un traitement peut tre reprsent en Java par un
appel de mthode (tudi plus loin dans le cours)
Richard Grin Programmation structure page 46
Alternative if (x >= 0) {
x = x + 1;
}
else {
x = -x + 1;
y++;
}
Variante :if (x >= 0) {
x = x + 1;
}
Richard Grin Programmation structure page 47
Alternative
Possible de ne pas mettre daccolades sil ny a
quune seule instruction dans le if ou le else
if (x >= 0)
x = x + 1;
else
x = -x + 1;
if (x >= 0)
x = x + 1;
Pas recommand, car source derreurs !
Richard Grin Programmation structure page 48
-
8/10/2019 language de Programmation structuree
9/11
9
Alternative
Lorsque plusieurs if sont embots les uns dansles autres, un bloc else se rattache au dernier
if qui na pas de else
Richard Grin Programmation structure page 49
Exemple
x = 3;y = 8;
if (x == y)
if (x > 10)
x = x + 1;
else
x = x + 2;
Richard Grin Programmation structure 50
Quelle valeur pour x
la fin de ce code ?
Facile de se tromper
si on ne met pas
daccolades,
surtout si on indente
mal son code !
Exemple
x = 3;
y = 8;
if (x == y) {
if (x > 10) {
x = x + 1;
}
}else {
x = x + 2;
}
Richard Grin Programmation structure 51
Mettre des accolades
vite de se tromper !
Expressions boolennes
Ce sont des expressions dont le type Java estboolean ; elles peuvent avoir 2 valeurs : true
(vrai) ou false (faux)
Elles sont utilises par if ou par les rptitions
(comme condition pour refaire une boucle)
Oprateurs et , ou , non ; en Java
&& , || , !
Richard Grin Programmation structure page 52
Exemples x >= 0
(x != 0) && (y / x > 2.3) // raccourci
(x == 0) || (y / x > 2.3) // raccourci
! ((x == 0) || (y / x > 2.3))
Richard Grin Programmation structure page 53
Distinction de cas suivant une valeur
Java a une instruction qui permet de simplifier du
code avec des if embots dans le cas o la
condition dpend de la valeur dune expression
Richard Grin Programmation structure page 54
-
8/10/2019 language de Programmation structuree
10/11
10
Richard Grin Programmation structure 55
switch
switch(expression) {
case val1: instructions;break;
...
case valn: instructions;break;
default: instructions;}
expression est de type char,byte, short, ou int
(ou String depuis le JDK 7)
Sil ny a pas de clause default, rien nest excut
si expression ne correspond aucun case
Attention, sans break, les
instructions du cas suivant
sont excutes !
Richard Grin Programmation structure 56
Exemple de switchchar lettre;
int nbVoyelles = 0, nbA = 0,nbT = 0, nbAutre = 0;
. . .
switch (lettre) {
case 'a' : nbA++;
case 'e' : // pas dinstruction !
case 'i' : nbVoyelles++;
break;
case 't' : nbT++;
break;
default : nbAutre++;
}
Rptition jusqu
do {
x++;
} while (x < 8)
Quelle valeur aura x aprs ce code ?
Richard Grin Programmation structure page 57
Exemples en Java tant que
while (x < 8) {
x++;
}
Quelle valeur aura x aprs ce code ?
Richard Grin Programmation structure page 58
Rptition pour
Richard Grin Programmation structure page 59
En Java :for (initialisations ; test ; modifications) {
instructions dans la boucle
}
Rptition pour
La boucle for de Java est plus gnrale que
pour ; la boucle for peut faire tout autre chose
que dincrmenter la variable de boucle
Le plus souvent la variable de boucle est
dclare lintrieur de linstruction dinitialisation
de for (sa porte est alors limite la boucle) :for (int i = 0; ; )
Richard Grin Programmation structure page 60
-
8/10/2019 language de Programmation structuree
11/11
11
Exemple typique de rptition pour
Richard Grin Programmation structure page 61
for (int i = 0; i < 3; i++) {
instructions dans la boucle
}
Question : combien de fois les instructions dans la
boucle seront-elles excutes ?
initialisations test modifications
Exercice
Reconstituer la structure pour laide desautres structures de la programmation structure
Utiliser les poupes russes en donnant
plusieurs tapes, chaque tape nutilisant quune
seule structure de la programmation structure
Richard Grin Programmation structure page 62
Saut depuis une boucle en Java
Pas prvu dans la programmation structure ; il
faut jouer sur la condition de sortie pour sortir
dune sortie en son milieu
Prvu dans la plupart des langages informatique
car bien pratique
En Java, 2 instructions :break et continue
break fait sortir de la boucle ; lexcution se
poursuit juste aprs la fin de la boucle
continue reste dans la boucle mais saute la fin
de la boucle en cours
Richard Grin Programmation structure page 63 Richard Grin Programmation structure 64
Exemple de continue etbreak
int somme = 0;
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) continue;
if (somme > 4) break;
somme = somme + i;
}
System.out.println(somme);
Quaffiche ce code ?