Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
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
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.