Академический Документы
Профессиональный Документы
Культура Документы
Algorithme
Principe de base de la programmation structure
Programmation structure Les structures
Traduction en Java
Objectif
Matriser la complexit lors de lcriture de
programmes/algorithmes comportant de
nombreuses instructions
Algorithme
1
Exemple : algorithme dEuclide Exemple de calcul de PGCD
On cherche le PGCD de deux entiers naturels a PGCD de 18 et de 14 (a = 18 et b = 14)
et b (a > b) b 0 ; r = 18 modulo 14 = 4 ; a = 14 ; b = 4
Description informelle de lalgorithme : b 0 ; r = 14 modulo 4 = 2 ; a = 4 ; b = 2
1. Si b = 0, le PGCD est a ; FIN b 0 ; r = 4 modulo 2 = 0 ; a = 2 ; b = 0
2. sinon, b = 0 donc on sarrte
calculer r le reste de la division de a par b, 2 est le PGCD de 18 et de 14
puis remplacer a par b, puis b par r,
puis recommencer ltape prcdente
Richard Grin Programmation structure page 7 Richard Grin Programmation structure page 8
Richard Grin Programmation structure page 9 Richard Grin Programmation structure page 10
Richard Grin Programmation structure page 11 Richard Grin Programmation structure page 12
2
Calcul de la complexit Notation O()
La complexit dpend le plus souvent de la taille La complexit est surtout importante pour les
n des donnes traiter grands nombres (toujours rapide si petit nombre)
Le calcul de la complexit dun algorithme donne Pour les grands nombres n est trs petit par
une valuation du nombre doprations rapport n
significatives en fonction de la taille n On dit que le tri par insertion est en O(n), ce qui
Par exemple, on dira quen moyenne (notion donne un ordre de grandeur pour lefficacit du tri
probabiliste car dpend des donnes) le tri par par insertion
insertion de n lments ncessite (n - n) / 4 Les meilleurs algorithmes de tri sont en O(n log n)
oprations de comparaison entre lments trier
Richard Grin Programmation structure page 13 Richard Grin Programmation structure page 14
Richard Grin Programmation structure page 15 Richard Grin Programmation structure page 16
3
Programmation structure Principe
Une mauvaise dcomposition peut rendre le Un programme est dcompos en modules
problme encore plus difficile rsoudre Chaque module a une des structures de la
La programmation structure permet de bien programmation structure
dcomposer un programme complexe en parties En plus de permettre une bonne dcomposition,
plus simples comprendre 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 19 Richard Grin Programmation structure page 20
Richard Grin Programmation structure page 23 Richard Grin Programmation structure page 24
4
Structures de la
programmation structure
Chaque module a une des ces 3 structures :
suite de modules
Les structures de la alternative
programmation structure rptition
Richard Grin Programmation structure page 25 Richard Grin Programmation structure page 26
Suite Exemple
Faire Traitement 1 puis Traitement 2 Saisir une fraction (x / y)
Chaque module a lui-mme une des Rduire la fraction (on obtient a / b)
structures de la programmation m=a*b
structure
Cest le systme des poupes
russes qui sembotent les unes
dans les autres
Se gnralise en une suite de n
traitements (n > 2)
Richard Grin Programmation structure page 27 Richard Grin Programmation structure page 28
Alternative Exemple
si (x > y) {
max = x;
}
sinon {
max = y;
}
Variante (pour les cas o on ne fait rien si la
Si la condition est vraie, condition est fausse) :
faire Traitement 1, si (x > max) {
sinon, faire Traitement 2 max = x;
}
Richard Grin Programmation structure page 29 Richard Grin Programmation structure page 30
5
Rptition jusqu Exemple
Rpter Traitement
jusqu ce que la condition ( de fin ) soit vraie
Richard Grin Programmation structure page 31 Richard Grin Programmation structure page 32
Richard Grin Programmation structure page 33 Richard Grin Programmation structure page 34
Diffrence importante
Exemple
entre jusqu et tant que
rpter {
x = x + 10;
} jusqu (x >= y)
On commence par augmenter
x de 10, mme si x >= y
au dbut
Richard Grin Programmation structure page 35 Richard Grin Programmation structure page 36
6
Rptition pour Exemple
Cas particulier de la boucle tant que pour i de 1 20 rpter {
Utilis quand on sait au moment de lcriture de s = s + i;
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 Richard Grin Programmation structure page 38
Richard Grin Programmation structure page 39 Richard Grin Programmation structure page 40
7
Invariant de boucle Preuve de la boucle
Invariant de boucle :
Il faut prouver que la boucle se terminera, ce qui
Entrer a, b est vident puisque b est un entier positif qui
les diviseurs de a0
a0 = a; b0 = b et de b0 sont les dcrot (dfinition du reste de la division entire :
tant que (b 0) rpter { mmes que ceux de a = bq + r avec r < b)
a et de b.
r := a modulo b A la fin on doit trouver que a est bien le PGCD des
a0 et b0 ont t
a := b introduits pour 2 nombres du dpart, compte tenu de linvariant
faciliter lexpression de boucle et que la condition de rptition est
b := r
de linvariant de fausse (puisquon est sorti de la boucle)
} boucle Cest vrai car lensemble des diviseurs du a final
Afficher a est lensemble des diviseurs des a et b du dpart
Richard Grin Programmation structure page 43 Richard Grin Programmation structure page 44
Suite de traitements
Suite dinstructions lmentaires :
int x = 3;
int y = x + 8;
Bloc avec des accolades
Traduction en Java Un traitement peut tre reprsent en Java par un
appel de mthode (tudi plus loin dans le cours)
Richard Grin Programmation structure page 45 Richard Grin Programmation structure page 46
Alternative Alternative
if (x >= 0) { Possible de ne pas mettre daccolades sil ny a
x = x + 1; quune seule instruction dans le if ou le else
}
if (x >= 0)
else {
x = x + 1;
x = -x + 1;
else
y++;
x = -x + 1;
}
if (x >= 0)
Variante : x = x + 1;
if (x >= 0) {
x = x + 1; Pas recommand, car source derreurs !
}
Richard Grin Programmation structure page 47 Richard Grin Programmation structure page 48
8
Alternative Exemple
Lorsque plusieurs if sont embots les uns dans x = 3;
les autres, un bloc else se rattache au dernier y = 8; Quelle valeur pour x
if qui na pas de else if (x == y) la fin de ce code ?
if (x > 10)
x = x + 1;
else Facile de se tromper
x = x + 2; si on ne met pas
daccolades,
surtout si on indente
mal son code !
Richard Grin Programmation structure page 53 Richard Grin Programmation structure page 54
9
switch Exemple de switch
switch(expression) { char lettre;
case val1: instructions; int nbVoyelles = 0, nbA = 0,
break; Attention, sans break, les nbT = 0, nbAutre = 0;
... instructions du cas suivant . . .
sont excutes ! switch (lettre) {
case valn: instructions;
case 'a' : nbA++;
break;
case 'e' : // pas dinstruction !
default: instructions;
case 'i' : nbVoyelles++;
}
break;
expression est de type char, byte, short, ou int case 't' : nbT++;
(ou String depuis le JDK 7) break;
default : nbAutre++;
Sil ny a pas de clause default, rien nest excut }
si expression ne correspond aucun case
Richard Grin Programmation structure 55 Richard Grin Programmation structure 56
Richard Grin Programmation structure page 57 Richard Grin Programmation structure page 58
10
Exemple typique de rptition pour Exercice
initialisations test modifications
for (int i = 0; i < 3; i++) { Reconstituer la structure pour laide des
instructions dans la boucle autres structures de la programmation structure
} Utiliser les poupes russes en donnant
Question : combien de fois les instructions dans la plusieurs tapes, chaque tape nutilisant quune
boucle seront-elles excutes ? seule structure de la programmation structure
Richard Grin Programmation structure page 61 Richard Grin Programmation structure page 62
11