Documente Academic
Documente Profesional
Documente Cultură
FinProcdure
Algorithme exepmleAppelProcdure
Dbut
exempleProcedure ()
Fin
Remarque : contrairement l'appel d'une fonction, on ne peut pas
affecter la procdure appele ou l'utiliser dans une expression.
L'appel d'une procdure est une instruction autonome
2007/2008 Info2, 1re anne SM/SMI 26
Paramtres d'une procdure
Les paramtres servent changer des donnes entre le programme
principale (ou la procdure appelante) et la procdure appele
Les paramtres placs dans la dclaration d'une procdure sont
appels paramtres formels. Ils sont des variables locales la
procdure.
Les paramtres placs dans l'appel d'une procdure sont appels
paramtres effectifs. ils contiennent les valeurs pour effectuer le
traitement
Le nombre de paramtres effectifs doit tre gal au nombre de
paramtres formels. L'ordre et le type des paramtres doivent
correspondre
2007/2008 Info2, 1re anne SM/SMI 27
Transmission des paramtres
Il existe deux modes de transmission de paramtres dans les langages
de programmation :
La transmission par valeur : les valeurs des paramtres effectifs sont
affectes aux paramtres formels correspondants au moment de
l'appel de la procdure. Dans ce mode le paramtre effectif ne subit
aucune modification
La transmission par adresse (ou par rfrence) : les adresses des
paramtres effectifs sont transmises la procdure appelante. Dans
ce mode, le paramtre effectif subit les mmes modifications que le
paramtre formel lors de l'excution de la procdure
Remarque : le paramtre effectif doit tre une variable (et non une
valeur) lorsqu'il s'agit d'une transmission par adresse
En pseudo-code, on va prciser explicitement le mode de transmission
dans la dclaration de la procdure
2007/2008 Info2, 1re anne SM/SMI 28
Transmission des paramtres :
exemples
Procdure incrementer1 (x : entier par valeur, y : entier par adresse)
x x+1
y y+1
FinProcdure
Algorithme Test_incrementer1
variables n, m : entier
Dbut
n 3
m 3
incrementer1(n, m) rsultat :
crire (" n= ", n, " et m= ", m) n=3 et m=4
Fin
Remarque : l'instruction x x+1 n'a pas de sens avec un passage par
valeur
2007/2008 Info2, 1re anne SM/SMI 29
Transmission par valeur, par
adresse : exemples
Procdure qui calcule la somme et le produit de deux entiers :
Procdure SommeProduit (x, y: entier par valeur, som, prod : entier par
adresse)
som x+y
prod x*y
FinProcdure
Procdure qui change le contenu de deux variables :
Procdure Echange (x : rel par adresse, y : rel par adresse)
variables z : rel
z x
x y
y z
FinProcdure
2007/2008 Info2, 1re anne SM/SMI 30
Variables locales et globales
On peut manipuler 2 types de variables dans un module
(procdure ou fonction) : des variables locales et des
variables globales. Elles se distinguent par ce qu'on appelle
leur porte (leur "champ de dfinition", leur "dure de vie")
Une variable locale n'est connue qu' l'intrieur du module ou
elle a t dfinie. Elle est cre l'appel du module et dtruite
la fin de son excution
Une variable globale est connue par l'ensemble des modules
et le programme principale. Elle est dfinie durant toute
lapplication et peut tre utilise et modifie par les diffrents
modules du programme
2007/2008 Info2, 1re anne SM/SMI 31
Variables locales et globales
La manire de distinguer la dclaration des variables locales et
globales diffre selon le langage
En gnral, les variables dclares l'intrieur d'une fonction ou
procdure sont considres comme variables locales
En pseudo-code, on va adopter cette rgle pour les variables
locales et on dclarera les variables globales dans le
programme principale
Conseil : Il faut utiliser autant que possible des variables
locales plutt que des variables globales. Ceci permet
d'conomiser la mmoire et d'assurer l'indpendance de la
procdure ou de la fonction
2007/2008 Info2, 1re anne SM/SMI 32
Fonctions et procdures en langage C
En C, une fonction prends N arguments et retourne une valeur de
type.
Syntaxe : type arg_ret nom_f(type arg1, type arg2, type argn)
{ ensemble instructions
}
- arg_ret est l'argument renvoy par la fonction (instruction return)
- nom_f est le nom de la fonction
- arg1 argn sont les arguments envoys la fonction.
Une procdure est une fonction renvoyant void, dans ce cas return
est appel sans paramtre.
2007/2008 Info2, 1re anne SM/SMI 33
Fonctions et procdures en C
L'ordre, le type et le nombre des arguments doivent
tre respects lors de l'appel de la fonction
L'appel d'une fonction doit tre situe aprs sa
dclaration ou celle de son prototype
Si la fonction ne renvoie rien alors prciser le type void void
(cette fonction est consid (cette fonction est consid r r e comme une proc e comme une proc dure) dure)
2007/2008 Info2, 1re anne SM/SMI 34
Fonctions en C : exemple
int min(int a, int b);
void main()
{ int c;
/* entrez les valeurs de a et b */
c= min(a, b) ;
printf("le min de %d et %d est : %d \n", a, b, c);
}
int min(int a, int b)
{
if (a <b) return a;
else return b;
}
2007/2008 Info2, 1re anne SM/SMI 35
Rcursivit
Un module (fonction ou procdure) peut s'appeler lui-mme: on
dit que c'est un module rcursif
Tout module rcursif doit possder un cas limite (cas trivial) qui
arrte la rcursivit
Exemple : Calcul du factorielle
Fonction fact (n : entier ) : entier
Si (n=0) alors
retourne (1)
Sinon
retourne (n*fact(n-1))
Finsi
FinFonction
2007/2008 Info2, 1re anne SM/SMI 36
Fonctions rcursives : exercice
crivez une fonction rcursive (puis itrative) qui calcule le terme n
de la suite de Fibonacci dfinie par : U(0)=U(1)=1
U(n)=U(n-1)+U(n-2)
Fonction Fib (n : entier ) : entier
Variable res : entier
Si (n=1 OU n=0) alors
res 1
Sinon
res Fib(n-1)+Fib(n-2)
Finsi
retourne (res)
FinFonction
2007/2008 Info2, 1re anne SM/SMI 37
Fonctions rcursives : exercice
Une fonction itrative pour le calcul de la suite de Fibonacci :
Fonction Fib (n : entier ) : entier
Variables i, AvantDernier, Dernier, Nouveau : entier
Si (n=1 OU n=0) alors retourne (1)
Finsi
AvantDernier 1, Dernier 1
Pour i allant de 2 n
NouveauDernier+ AvantDernier
AvantDernier Dernier
Dernier Nouveau
FinPour
retourne (Nouveau)
FinFonction
Remarque: la solution rcursive est plus facile crire
2007/2008 Info2, 1re anne SM/SMI 38
Procdures rcursives : exemple
Une procdure rcursive qui permet d'afficher la
valeur binaire d'un entier n
Procdure binaire (n : entier )
Si (n<>0) alors
binaire (n/2)
crire (n mod 2)
Finsi
FinProcdure
2007/2008 Info2, 1re anne SM/SMI 39
Les fonctions rcursives
Le processus rcursif remplace en quelque sorte la
boucle, cest--dire un processus itratif.
Il est noter que l'on traite le problme lenvers : on part
du nombre, et on remonte rebours jusqu 1, pour
pouvoir calculer la factorielle par exemple.
Cet effet de rebours est caractristique de la
programmation rcursive.
2007/2008 Info2, 1re anne SM/SMI 40
Les fonctions rcursives : remarques
la programmation rcursive, pour traiter certains problmes,
peut tre trs conomique, elle permet de faire les choses
correctement, en trs peu de lignes de programmation.
en revanche, elle est trs coteuse de ressources machine.
Car il faut crer autant de variable temporaires que de "tours"
de fonction en attente.
toute fonction rcursive peut galement tre formule en
termes itratifs ! Donc, si elles facilitent la vie du
programmeur, elle ne sont pas indispensable.
2007/2008 Info2, 1re anne SM/SMI 41
Les tableaux Les tableaux Les tableaux Les tableaux
2007/2008 Info2, 1re anne SM/SMI 42
Tableaux : introduction
Supposons que l'on veut calculer le nombre dtudiants ayant une note
suprieure 10 pour une classe de 20 tudiants.
Jusqu prsent, le seul moyen pour le faire, cest de dclarer 20
variables dsignant les notes N1, , N20:
La saisie de ces notes ncessite 20 instructions lire.
Le calcul du nombre des notes>10 se fait par une suite de tests de 20
instructions Si :
nbre 0
Si (N1 >10) alors nbre nbre+1 FinSi
asymptotique
asymptotique
Supposons que l Supposons que l on dispose de 7 algorithmes dont les complexit on dispose de 7 algorithmes dont les complexit s dans le s dans le
pire des cas sont d pire des cas sont d ordre de grandeur 1, log ordre de grandeur 1, log
2 2
n, n, nlg n, n, nlg
2 2
n, n n, n
2 2
, n , n
3 3
, 2 , 2
n n
et un et un
ordinateur capable d ordinateur capable d effectuer 10 effectuer 10
6 6
op op rations par seconde. Le tableau suivant rations par seconde. Le tableau suivant
montre l montre l cart entre ces algorithmes lorsque la taille des donn cart entre ces algorithmes lorsque la taille des donn es croit : es croit :
! 31.710
3
a 11.5j 19.9s 1s 19.9s 1s N= 10
6
! 31.7a 2.7h 1.6s 0.1s 16.6s 1s N= 10
5
! 11.5j 100s 0.1s 10ms 13.3s 1s N=10
4
! (>10
100
) 16.6mn 1s 9.9ms 1ms 9.9s 1s N= 10
3
4.10
16
a 1s 10ms 0.6ms 0.1ms 6.6s 1s N=10
2
2
n
n
3
n
2
n
log
2
n
n log
2
n 1 Complexit
2007/2008 Info2, 1re anne SM/SMI 67
Tableaux : recherche dun lment
Pour effectuer la recherche dun lment dans un tableau, deux
mthodes de recherche sont considres selon que le tableau est tri
ou non :
La recherche squentielle pour un tableau non tri
La recherche dichotomique pour un tableau tri
La recherche squentielle
Consiste parcourir un tableau non tri partir du dbut et
sarrter ds quune premire occurrence de llment sera
trouve. Le tableau sera parcouru du dbut la fin si llment ny
figure pas.
2007/2008 Info2, 1re anne SM/SMI 68
Recherche squentielle : algorithme
Recherche de la valeur x dans un tableau T de N lments :
Variables i: entier, Trouve : boolen
i0 , Trouve Faux
TantQue (i < N) ET (not Trouve)
Si (T[i]=x) alors
Trouve Vrai
Sinon
ii+1
FinSi
FinTantQue
Si Trouve alors // c'est quivalent crire Si Trouve=Vrai alors
crire ("x est situ dans la "+i+ "eme position du
tableau ")
Sinon crire ("x n'appartient pas au tableau")
FinSi
2007/2008 Info2, 1re anne SM/SMI 69
Recherche squentielle : complexit
Dans le pire des cas on doit parcourir tout le tableau.
Ainsi, la complexit est de lordre de O(n).
Si le te tableau est tri la recherche squentielle peut
sarrter ds quon rencontre un lment du tableau
strictement suprieur llment recherch.
Si tous les lments sont plus petits que llment
recherch lensemble du tableau est parcouru. Ainsi la
complexit reste dordre O(n)
2007/2008 Info2, 1re anne SM/SMI 70
Recherche dichotomique
Dans le cas o le tableau est tri (ordonn), on peut amliorer
l'efficacit de la recherche en utilisant la mthode de recherche
dichotomique
Principe : diviser par 2 le nombre d'lments dans lesquels on
cherche la valeur x chaque tape de la recherche. Pour cela on
compare x avec T[milieu] :
Si x < T[milieu], il suffit de chercher x dans la 1re moiti du
tableau entre (T[0] et T[milieu-1])
Si x > T[milieu], il suffit de chercher x dans la 2me moiti du
tableau entre (T[milieu+1] et T[N-1])
On continue le dcoupage jusqu un sous tableau de taille 1
2007/2008 Info2, 1re anne SM/SMI 71
Recherche dichotomique
On utilise lordre pour
anticiper labandon dans une recherche linaire,
guider la recherche : recherche par dichotomie.
petit petit
grand grand
moyen moyen
0 0 n n- -1 1 (n (n- -1)/2 1)/2
X X
X < moyen X < moyen
Oui ! Oui !
Chercher X dans Chercher X dans
[ 0 .. (n [ 0 .. (n- -1)/2 1)/2- - 1 ] 1 ]
Non ! Non !
Chercher X dans Chercher X dans
[ (n [ (n- -1)/2 .. n 1)/2 .. n- -1 ] 1 ]
2007/2008 Info2, 1re anne SM/SMI 72
Recherche dichotomique :
algorithme
inf0 , supN-1, Trouve Faux
TantQue (inf <=sup) ET (not Trouv)
milieu(inf+sup) div 2
Si (x<T[milieu]) alors supmilieu-1
Sinon Si (x>T[milieu]) alors infmilieu+1
Sinon Trouve Vrai
FinSi
FinSi
FinTantQue
Si Trouve alors crire ("x appartient au tableau")
Sinon crire ("x n'appartient pas au tableau")
FinSi
2007/2008 Info2, 1re anne SM/SMI 73
Recherche dichotomique : exemple
Considrons le tableau T :
Si la valeur cherch est 16 alors les indices inf, sup et milieu vont voluer
comme suit :
Si la valeur cherch est 9 alors les indices inf, sup et milieu vont voluer
comme suit :
37 29 27 17 15 12 9 7 3
5 6 4 milieu
5 5 8 8 sup
6 5 5 0 inf
2 1 4 milieu
3 3 8 sup
2 0 0 inf
2007/2008 Info2, 1re anne SM/SMI 74
Recherche dichotomique : complexit
A chaque itration, on divise les indices en 3 intervalles :
[inf, milieu-1]
milieu
[milieu+1, sup]
Cas 1 : milieu-inf (inf+sup)/2 - inf (sup-inf)/2
Cas 3 : sup-milieu sup -(inf+sup)/2 (sup-inf)/2
On passe dons successivement un intervalle dont le nombre
dlments n/2, puis n/4, puis n/8, A la fin on obtient un intervalle
rduit 1 ou 2 lments.
Le nombre dlments la k ime itration est : ()
k-1
n donc 2
k
n soit
k log
2
n
Il y a au plus log
2
n itrations comportant 3 comparaisons chacune.
La recherche dichotomique dans un tableau tri est dordre O(log
2
n)
2007/2008 Info2, 1re anne SM/SMI 75
Tri d'un tableau
Le tri consiste ordonner les lments du tableau
dans lordre croissant ou dcroissant
Il existe plusieurs algorithmes connus pour trier les
lments dun tableau :
Le tri par slection-change
Le tri par insertion
Le tri rapide
Nous verrons dans la suite les trois algorithmes de
tri. Le tri sera effectu dans l'ordre croissant
2007/2008 Info2, 1re anne SM/SMI 76
Tri par slection-change
Principe : Cest daller chercher le plus petit lment du tableau pour le mettre
en premier, puis de repartir du second, daller chercher le plus petit lment
pour le mettre en second etc
Au i-me passage, on slectionne le plus petit lment parmi les positions i..n
et on l'change ensuite avec T[i].
Exemple :
tape 1: on cherche le plus petit parmi les 5 lments du tableau. On lidentifie en
troisime position, et on lchange alors avec llment 1 :
tape 2: on cherche le plus petit lment, mais cette fois partir du deuxime
lment. On le trouve en dernire position, on l'change avec le deuxime:
tape 3:
5 8 2 6 9
5 8 9 6 2
6 8 9 5 2
9 8 6 5 2
2007/2008 Info2, 1re anne SM/SMI 77
Tri par slection-change : algorithme
Supposons que le tableau est not T et sa taille N
Pour i allant de 0 N-2
indice_ppe i
Pour j allant de i + 1 N-1
Si T[j] <T[indice_ppe] alors
indice_ppe j
Finsi
FinPour
temp T[indice_ppe]
T[indice_ppe] T[i]
T[i] temp
FinPour
Fin Fin n n- -2 ! 2 !
Chercher l Chercher l indice du indice du
plus petit plus petit partir de i. partir de i.
Echange, mme si i = Echange, mme si i = indice_ppe indice_ppe. .
2007/2008 Info2, 1re anne SM/SMI 78
Tri par s
Tri par s
lection
lection
-
-
change : complexit
change : complexit
(n (n- -i) = 0 (n i) = 0 (n
2 2
) )
i=0..n i=0..n- -2 2
Tri en complexit Tri en complexit quadratique. quadratique.
2007/2008 Info2, 1re anne SM/SMI 79
Tri par insertion
Tri par insertion
la ime tape :
Cette mthode de tri insre le ime lment T[i-1] la bonne
place parmi T[0], T[2]T[i-2].
Aprs ltape i, tous les lments entre les positions 0 i-1
sont tris.
Les lments partir de la position i ne sont pas tris.
Pour ins Pour ins rer l rer l l l ment T[i ment T[i- -1] : 1] :
Si T[i-1] T[i-2] : insrer T[i-1] la ime position !
Si T[i-1] <T[i-2] : dplacer T[i-1] vers le dbut du tableau
jusqu la position j i-1 telle que T[i-1] T[j-1] et linsrer en
position j.
2007/2008 Info2, 1re anne SM/SMI 80
Tri par insertion
Tri par insertion
Valeurs Valeurs
0 1 2 3 0 1 2 3 n n- -1 1
Tri Tri es es
i i- -1 1
Plus grand : Plus grand :
ins ins r r en position i ! en position i !
Non tri Non tri es et es et
quelconques quelconques
2007/2008 Info2, 1re anne SM/SMI 81
Tri par insertion
Valeurs Valeurs
0 1 2 3 0 1 2 3 n n- -1 1
Tri Tri es es
i i- -1 1
Non tri Non tri es et es et
quelconques quelconques
Plus petit : Plus petit :
L L ins ins rer rer gauche. gauche.
2007/2008 Info2, 1re anne SM/SMI 82
3 7 1 9 4
Tri par insertion : exemple
tape 1: on commence partir du 2 ime lment du tableau
(lment 4). On cherche linsrer la bonne position par
rapport au sous tableau dj tri (form de llment 9) :
tape 2: on considre llment suivant (1) et on cherche
linsrer dans une bonne position par rapport au sous tableau
tri jusqu ici (form de 4 et 9):
tape 3:
tape 4:
3 7 1 4 9 3 7 1 9 4
3 9 7 4 1
9 7 4 3 1
3 7 9 4 1
2007/2008 Info2, 1re anne SM/SMI 83
Tri par insertion : algorithme
Supposons que le tableau est not T et sa taille N
Pour i allant de 1 N-1
decaler vraie; j i
Tantque ((j >0) et (decaler))
Si T[j] <T[j-1] alors temp T[j]
T[j] T[j-1]
T[j-1] temp
sinon decaler faux
Finsi
jj-1;
FinTantque
FinPour
le premier le premier l l ment est ment est
forc forc ment ment sa place sa place
On On change aussi change aussi
longtemps que cela longtemps que cela
est possible est possible
2007/2008 Info2, 1re anne SM/SMI 84
Tri par insertion : la complexit
Tri par insertion : la complexit