36
1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

Embed Size (px)

Citation preview

Page 1: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

1

Fonctions & procédures

DEUG 2Sciences économiques

2004/2005

Page 2: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

2

Ce qui a été vu

• Fonctions– Définition et déclaration

• Retourne une valeur

– Utilisation dans un algorithme– Définition et utilisation en VBA

• Procédures– Définition & déclaration

• Ne retourne pas de valeur

– Utilisation dans un algorithme– Définition et utilisation en VBA

Page 3: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

3

Plan

• Quelques algorithmes sur les fonctions et les procédures

• Récursivité– Fonctions récursives– Procédures récursives

Page 4: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

4

Exo1• Que va afficher la procédure d ?

Procédure a(i: entier)Début

i i+3Fin Procédure

Procédure b(val i: entier)Début

i i+5Ecrire(i)

Fin Procédure

Procédure c(i: entier)Début a(i) b(i)Fin Procédure

Procédure d()Variable i:entierDébut i 2 c(i) b(i) ecrire(i)Fin Procédure

Page 5: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

5

Algorithme 1

• Soit T un tableau de 10 entiers• Supposons que l’on dispose d’une

procédure Trier(T) qui– Trie par ordre croissant le tableau T qui lui

est donné comme paramètre

• Ecrire une procédure AfficherC(T) qui – affiche les éléments de T dans l’ordre

croissant– Sans trier le tableau T

Page 6: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

6

Algorithme 1

1. On déclare dans la procédure AfficherC une variable T1 de type Tableau

2. On affecte à T1 les éléments du tableau T

3. On trie T1 en faisant appel à la procédure Trier(T1)

4. On affiche les éléments de T1 à partir du premier élément

– Noter que les étapes 2 et 4 peuvent être définies par des procédures

Page 7: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

7

Algorithme 1

• On écrit la procédure Affecter(T,T1) qui affecte les éléments de T à T1

Procédure Affecter(T, T1 : Tableau[10] d’entiers)

Variable i: entierDébut

Pour i = 1 à 10T1(i) T(i)

FinPourFinProcédure

Page 8: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

8

Algorithme 1

• On écrit la procédure Afficher(T) qui affiche les éléments d’un tableau

Procédure Afficher(T: Tableau[10] d’entiers)Variable i: entierDébut

Pour i = 1 à 10Ecrire(T(i))

FinPourFinProcédure

Page 9: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

9

Algorithme 1

• Maintenant, on peut définir AfficherC(T) plus facilement en utilisant les procédures dont on dispose

Procédure AfficherC(T: Tableau[10] d’entiers)Variable T1: Tableau[10] d’entiersDébut

Affecter(T, T1)Trier(T1)Afficher(T1)

FinProcédure

Page 10: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

10

Algorithme 1

• Que pensez-vous de la formulation suivante ?

Procédure AfficherC(Val T: Tableau[10] d’entiers)

DébutTrier(T)Afficher(T)

FinProcédure

Page 11: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

11

Algorithme 1

• Malheureusement en VBA, quand le paramètre est un tableau, on ne peut pas l’appeler par valeur

Page 12: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

12

Algorithme 2

• En utilisant la procédure Trier(T), écrire une fonction ValMax(T) qui– Retourne la valeur maximale de T

Page 13: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

13

Algorithme 2

• Idée– Il suffit de trier T, ensuite– Afficher la valeur se trouvant dans la

dernière case

Page 14: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

14

Algorithme 2

Fonction ValMax(t : tablea[10] d’entiers)Début

Trier(t)ValMax T(10)

Fin Fonction

Page 15: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

15

Récursivité

• On dit qu’une fonction est récursive quand dans sa définition on fait appel à cette même fonction

Page 16: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

16

Exemple de fonction récursive

• Ecrire une fonction fact(n) qui prend un enteir n puis retourne n!

Fonction fact(n: entier) : entierVariable i, j : entierDébut

j 1pour i = 1 à n

j j * iFinPourfact j

FinFonction

Page 17: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

17

Factorielle

• On sait que– n! = 1 si n=0 ou n=1– n! = n * (n-1) ! Si n > 1

• On a défini n! en fonction de (n-1)!

• Cette définition peut être utilisée dans la fonction fact(n)

Page 18: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

18

Factorielle

Fonction fact(n : entier) : entierVariable i : entierDébut

Si n = 0 ou n = 1 Alorsi 1

FinSiSinon

i n * fact(n-1)FinSinonfact i

Finfonction

Page 19: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

19

Exemple : les suites récursives

• Soit la suite (Un) n >0 avec

– U1 = 2

– Un = 3 * Un-1 + 2

• Ecrire une fonction U(n) qui prend un entier n puis retourne la valeur de Un

Page 20: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

20

Les suites

Fonction U(n : entier) : entierVariable i : entierDébut

Si n = 1 Alorsi 2

FinSiSinon

i 2 + 3 * U(n-1)FinSinonU i

Fin Fonction

Page 21: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

21

Toujours les suites

• En utilisant la suite précédente, écrire une fonction récursive S(n) qui– Prend un entier n puis– Retourne la somme des n premiers

termes de la suite (Un)

Page 22: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

22

La somme des n premiers termes

• Il nous faut donc trouver une définition récursive de S(n)

• S(n) = U1 si n = 1

• S(n) = Un + S(n-1) si n > 1

Page 23: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

23

La fonction S(n)

Fonction S(n : entier) : entiervariable i : entierDébut

Si n = 1 alorsi U(1)

FinSiSinon

i U(n) + S(n-1)FinSinonS i

Fin Fonction

Page 24: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

24

Version non récursive

Fonction S(n : entier) : entierVariable i, j : entierDébut

i U(1)Pour j = 2 à n

i i + U(j)FinPourS j

Fin Fonction

Page 25: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

25

Un dernier exemple pour la route

• Soit la fonction numérique f telle que – f est définie, continue sur [a, b], – f est strictement monotone sur [a, b]– f(a) * f(b) < 0

• Le théorème des valeurs intermédiaires nous dit que f(x)=0 admet une solution unique dans l’intervalle [a, b]

ab a

bc c

Page 26: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

26

Exemple (suite)

• Il nous est demandé d’écrire une fonction qui retourne une valeur approchée de c telle que f(c) = 0

Page 27: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

27

Principe de la méthode de dichotomie

• Soit m le milieu de l’intervalle [a, b],– m = (a + b)/2

• On teste le signe de f(a) * f(m)– Si f(a) * f(m) < 0 alors ceci veut dire que c se trouve

entre a et m• Nous pouvons donc rapprocher le b et le mettre au niveau de

m

– Si f(a) * f(m) > 0 alors ceci veut dire que c se trouve entre m et b

• Nous pouvons donc rapprocher le a et le mettre au niveau de m

• On va répéter ce processus jusqu’à ce que a et b soient très proches ( ex: b – a < 0,0001)– La valeur approchée de c sera alors (a+b)/2

Page 28: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

28

Forme non récursiveFonction S(a, b : réel): réelVariable m : entierDébut

Tant que (b-a) > 0,00001 Fairem (a+b)/2Si f(a) * f(m) < 0 Alors

b mfinsiSinon

a mFinSinon

FinTantQueS (a+b) / 2

FinFonction

Page 29: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

29

Forme récursive

• Comme toujours, il faut trouver une définition récursive de S

• Si (b-a) < 0,0001 alors – S(a,b) = (a+b)/2

• Sinon– Si f(a) * f(m) <0 alors

• Calculer S(a,m)

– Sinon• Calculer S(m,b)

Page 30: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

30

Forme récursive (suite)Fonction S(a,b : réel) : réelVariable c : réelDébut

Si (b-a) < 0,0001 Alorsc (a+b)/2

FinSiSinon

Si f(a) * f( (a+b)/2) < 0 Alorsc S(a, (a+b)/2)

FinSiSinon

c S( (a+b)/2, b)FinSinon

FinSinonS c

Fin fonction

Page 31: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

31

Dichotomie• La méthode précédente s’appelle

« dichotomie » car – Elle procède par étapes et– À chaque étape, l’intervalle de recherche

est divisé par 2.

• Ce principe peut être appliqué à plusieurs problèmes

Page 32: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

32

Application de la dichotomie

• Écrire une fonction Ind(T, V) qui retourne l’indice de la valeur V dans le tableau T trié par ordre croissant

• Principe: – On compare V par rapport à la valeur se

trouvant dans le milieu du tableau• Si V < T(milieu) alors il faut la chercher dans

la première moitié du tableau• Sinon, il faut la chercher dans la deuxième

moitié

Page 33: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

33

Fonction Ind(T, V)Fonction Ind(T: Tableau[10] d’entiers, V: entier)Variable a, b : entierDébut

a 1b 11Tant que T((a+b) Div 2) <> V Faire

Si T((a+b) Div 2) > V Alorsb (a+b) Div 2

FinSiSinon

a (a+b) Div 2FinSinon

FinTantqueInd (a+b) Div 2

Fin fonction

Page 34: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

34

Procédures récursives

• Les procédures peuvent elles aussi être définies d’une manière récursive.

• Exemple, écrire une procédure récursive qui permet d’afficher les éléments d’un tableau de 10 entiers.

• Idée:– si l’élément à afficher est le dernier dans le

tableau alors l’écrire et s’arrêter– Sinon, écrire l’élément courant et afficher à partir

du suivant

Page 35: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

35

Procédure AfficherProcédure Afficher(i: entier, T:Tableau[10] d’entiers)Début

Ecrire( T(i) )Si i < 10 Alors

Afficher( i+1, T)FinSi

FinProcédure

Quand on fait dans l’algorithme : Afficher(3, T)Cela veut dire qu’on veut afficher à partir de la 3ème

case

Page 36: 1 Fonctions & procédures DEUG 2 Sciences économiques 2004/2005

36

Que fait la procédure suivante ?

Procédure a(i: entier, T: Tableau[10] d’entiers)Début

Ecrire( T(i) )Si i > 1 Alors

a(i-1, T)FinSi

Fin Procédure