La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Fonctions & procédures

Présentations similaires


Présentation au sujet: "Fonctions & procédures"— Transcription de la présentation:

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

2 Ce qui a été vu Fonctions Procédures 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

3 Plan Quelques algorithmes sur les fonctions et les procédures
Récursivité Fonctions récursives Procédures récursives

4 Exo1 Que va afficher la procédure d ? Procédure a(i: entier) Début
i  i+3 Fin Procédure Procédure b(val i: entier) i  i+5 Ecrire(i) Procédure c(i: entier) a(i) b(i) Procédure d() Variable i:entier i  2 c(i) ecrire(i)

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

6 Algorithme 1 On déclare dans la procédure AfficherC une variable T1 de type Tableau On affecte à T1 les éléments du tableau T On trie T1 en faisant appel à la procédure Trier(T1) 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

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: entier Début Pour i = 1 à 10 T1(i)  T(i) FinPour FinProcédure

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: entier Début Pour i = 1 à 10 Ecrire(T(i)) FinPour FinProcédure

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’entiers Début Affecter(T, T1) Trier(T1) Afficher(T1) FinProcédure

10 Algorithme 1 Que pensez-vous de la formulation suivante ?
Procédure AfficherC(Val T: Tableau[10] d’entiers) Début Trier(T) Afficher(T) FinProcédure

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

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

13 Algorithme 2 Idée Il suffit de trier T, ensuite
Afficher la valeur se trouvant dans la dernière case

14 Algorithme 2 Fonction ValMax(t : tablea[10] d’entiers) Début Trier(t)
Fin Fonction

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

16 Exemple de fonction récursive
Ecrire une fonction fact(n) qui prend un enteir n puis retourne n! Fonction fact(n: entier) : entier Variable i, j : entier Début j  1 pour i = 1 à n j  j * i FinPour fact  j FinFonction

17 Factorielle On sait que On a défini n! en fonction de (n-1)!
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)

18 Factorielle Fonction fact(n : entier) : entier Variable i : entier
Début Si n = 0 ou n = 1 Alors i  1 FinSi Sinon i  n * fact(n-1) FinSinon fact  i Finfonction

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

20 Les suites Fonction U(n : entier) : entier Variable i : entier Début
Si n = 1 Alors i  2 FinSi Sinon i  * U(n-1) FinSinon U  i Fin Fonction

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)

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

23 La fonction S(n) Fonction S(n : entier) : entier variable i : entier
Début Si n = 1 alors i  U(1) FinSi Sinon i  U(n) + S(n-1) FinSinon S  i Fin Fonction

24 Version non récursive Fonction S(n : entier) : entier
Variable i, j : entier Début i  U(1) Pour j = 2 à n i  i + U(j) FinPour S  j Fin Fonction

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] a b c b a c

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

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

28 Forme non récursive Fonction S(a, b : réel): réel Variable m : entier
Début Tant que (b-a) > 0,00001 Faire m  (a+b)/2 Si f(a) * f(m) < 0 Alors b  m finsi Sinon a  m FinSinon FinTantQue S  (a+b) / 2 FinFonction

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) Calculer S(m,b)

30 Forme récursive (suite)
Fonction S(a,b : réel) : réel Variable c : réel Début Si (b-a) < 0,0001 Alors c  (a+b)/2 FinSi Sinon Si f(a) * f( (a+b)/2) < 0 Alors c  S(a, (a+b)/2) c  S( (a+b)/2, b) FinSinon S  c Fin fonction

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

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é

33 Fonction Ind(T, V) Fonction Ind(T: Tableau[10] d’entiers, V: entier)
Variable a, b : entier Début a 1 b 11 Tant que T((a+b) Div 2) <> V Faire Si T((a+b) Div 2) > V Alors b  (a+b) Div 2 FinSi Sinon a  (a+b) Div 2 FinSinon FinTantque Ind  (a+b) Div 2 Fin fonction

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

35 Procédure Afficher Procé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

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


Télécharger ppt "Fonctions & procédures"

Présentations similaires


Annonces Google