Fonctions & procédures

Slides:



Advertisements
Présentations similaires
RAS 3,1 Modéliser des situations à l’aide de relations et les utiliser afin de résoudre des problèmes avec et sans l’aide de technologie.
Advertisements

LES NOMBRES PREMIERS ET COMPOSÉS
Le moteur
1. Résumé 2 Présentation du créateur 3 Présentation du projet 4.
A l’issue des conseils de classe de 3ème,
Tris.
Chapitre annexe. Récursivité
Licence pro MPCQ : Cours
Algorithmique (suite)
Portée des variables VBA & Excel
Calculs de complexité d'algorithmes
Est Ouest Sud 11 1 Nord 1 Laval Du Breuil, Adstock, Québec I-17-17ACBLScore S0417 Allez à 1 Est Allez à 4 Sud Allez à 3 Est Allez à 2 Ouest RndNE
Sud Ouest Est Nord Individuel 36 joueurs
ACTIVITES Le calcul littéral (3).
Les Prepositions.
Les Structures. Introduction : Imaginons que lon veuille afficher les notes dune classe délèves par ordre croissant avec les noms et prénoms de chaque.
Les Algorithmes de tri.
Problème de 8 dames: Sachant que dans un jeu des échecs, une dame peut pendre toute pièce se trouvant sur la colonne ou sur la ligne ou sur les diagonales.
Applications sur les algorithmes récurrents avec Les Matrices
Exercices Algorithmiques
1 Intégration numérique garantie de systèmes décrits par des équations différentielles non-linéaires Application à l'estimation garantie d'état et de paramètres.
et évaluation des compétences
La diapo suivante pour faire des algorithmes (colorier les ampoules …à varier pour éviter le « copiage ») et dénombrer (Entoure dans la bande numérique.
Chap. 1 Structures séquentielles : listes linéaires
Quelques algorithmes au lycée…
Initiation à la programmation et algorithmique cours 3
Mr: Lamloum Med LES NOMBRES PREMIERS ET COMPOSÉS Mr: Lamloum Med.
Continuité Introduction Continuité Théorème des valeurs intermédiaires
ALGORITHMES RECURSIFS
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Récursivité.
Les structures de données arborescentes
1.2 COMPOSANTES DES VECTEURS
ARITHMETIQUE : NOMBRES PREMIERS, PGCD
Algorithme de Bellman-Ford
Introduction à l’algorithmique
Représentation des systèmes dynamiques dans l’espace d’état
Représentation des systèmes dynamiques dans l’espace d’état
Courbes de Bézier.
1.1 LES VECTEURS GÉOMÉTRIQUES
Notre calendrier français MARS 2014
Annexe 1 VISITE SUR
Les Algorithmes de Tri Introduction Tri par Sélection
C'est pour bientôt.....
Veuillez trouver ci-joint
Résoudre une équation du 1er degré à une inconnue
Parcours d'une séquence de longueur fixe
Méthodes de prévision (STT-3220)
Programmation linéaire en nombres entiers : les méthodes de troncature
ASI 3 Méthodes numériques pour l’ingénieur
Elaboré par M. NUTH Sothan 1. 2 Soit x, y et z des coordonnées cartésiennes à 3 dimension. G un ensemble de points dans le plan (u, v). Déf. : On appelle.
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
Elaboré par M. NUTH Sothan
Equation différentielle
Equation différentielle de 2ème ordre
10 paires -. 9 séries de 3 étuis ( n° 1 à 27 ) 9 positions à jouer 5 tables Réalisé par M..Chardon.
CALENDRIER-PLAYBOY 2020.
USAM BRIDGE H O W E L L -CLASSIQUE
LES PILES ET FILES.
9 paires séries de 3 étuis ( n° 1 à 27 )
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Suites numériques Définitions.
Les Chiffres Prêts?
Rappels de statistiques descriptives
Les algorithmes recursifs
Introduction à la récursivité
CPI/BTS 2 Algorithmique & Programmation La récursivité Algo – Prog CPI/BTS2 – M. Dravet – 14/09/2003 Dernière modification: 14/09/2003.
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
Transcription de la présentation:

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

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

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

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)

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

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

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

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

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

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

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

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

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

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

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

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

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)

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

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

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

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)

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

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

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

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

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

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

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

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)

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

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

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é

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

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

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

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