Les fonctions 1 Pourquoi les fonctions Besoin de
![Les fonctions 1 Les fonctions 1](https://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-1.jpg)
Les fonctions 1
![Pourquoi les fonctions? • Besoin de regrouper un ensemble d’instructions pour décomposer la complexité Pourquoi les fonctions? • Besoin de regrouper un ensemble d’instructions pour décomposer la complexité](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-2.jpg)
Pourquoi les fonctions? • Besoin de regrouper un ensemble d’instructions pour décomposer la complexité d’un programme, • De même, il peut être nécessaire de décomposer ce programme en modules effectuant un travail une fois pour toute (par exemple la multiplication de deux matrices, un tri, un algorithme d’identification, . . . tc) • Il peut arriver aussi qu’un même traitement intervienne plusieurs fois dans un programme. 2
![Dans ce cas, il est intéressant de pouvoir faire appel plusieurs fois au même Dans ce cas, il est intéressant de pouvoir faire appel plusieurs fois au même](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-3.jpg)
Dans ce cas, il est intéressant de pouvoir faire appel plusieurs fois au même module. Ces notions sont le plus souvent recouvertes par le sous concept de sous-programmes. En C, ces sous-programmes sont appelés FONCTIONS. 3
![• Il existe deux types de fonctions: 1. Les fonctions pré-définies 2. Nos • Il existe deux types de fonctions: 1. Les fonctions pré-définies 2. Nos](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-4.jpg)
• Il existe deux types de fonctions: 1. Les fonctions pré-définies 2. Nos propres fonctions 4
![Les fonctions pré-definies • La plupart des environnements supportant le C standard disposent d'une Les fonctions pré-definies • La plupart des environnements supportant le C standard disposent d'une](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-5.jpg)
Les fonctions pré-definies • La plupart des environnements supportant le C standard disposent d'une large collection de fonctions appelée bibliothèque standard. Plusieurs fonctions mathématiques courantes font parties de la bibliothèque standard. Pour les utiliser, il suffit d'inclure au début du programme la ligne suivante: • #include <math. h> • Il est alors possible d'employer des fonctions telles que: 5
![• • cos(x) pow(x, y) sqrt(x) ldexp(x, n) cosinus de x x à • • cos(x) pow(x, y) sqrt(x) ldexp(x, n) cosinus de x x à](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-6.jpg)
• • cos(x) pow(x, y) sqrt(x) ldexp(x, n) cosinus de x x à la puissance y racine carrée de x …… et plusieurs autres. 6
![Exemple 1: cos(x) #include <iostream. h> #include <math. h> main(){ double x; cin >> Exemple 1: cos(x) #include <iostream. h> #include <math. h> main(){ double x; cin >>](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-7.jpg)
Exemple 1: cos(x) #include <iostream. h> #include <math. h> main(){ double x; cin >> x; cout << cos(x); } 7
![Exemple: sqrt(x) Il est bien connu que l'équation où a, b et c sont Exemple: sqrt(x) Il est bien connu que l'équation où a, b et c sont](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-8.jpg)
Exemple: sqrt(x) Il est bien connu que l'équation où a, b et c sont des constantes, possède deux solutions données par la formule Il est donc utile d'utiliser la fonction sqrt pour écrire un programme calculant les racines d'un polynôme. 8
![Exemple: sqrt(x) #include <iostream. h> #include <math. h> main(){ double a, b, c; double Exemple: sqrt(x) #include <iostream. h> #include <math. h> main(){ double a, b, c; double](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-9.jpg)
Exemple: sqrt(x) #include <iostream. h> #include <math. h> main(){ double a, b, c; double racine 1, racine 2; double delta; cin>>a>>b>>c; delta = sqrt(b*b - 4*a*c); if (delta >=0) { racine 1 = ( -b - delta) / (2*a); racine 2 = ( -b + delta) / (2*a); cout<<racine 1<<endl<<racine 2<<endl; } else cout << ‘’pas de solution dans les réels’’; return (0); } 9
![Exemple: ldexp(x, n) Examinons plus en détails la fonction ldexp. Rappelons que cette fonction Exemple: ldexp(x, n) Examinons plus en détails la fonction ldexp. Rappelons que cette fonction](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-10.jpg)
Exemple: ldexp(x, n) Examinons plus en détails la fonction ldexp. Rappelons que cette fonction retourne la valeur Considérons quelques exemples: ldexp(1, 1) retourne ldexp(1. 1, 1) retourne ldexp(1, 1. 1) retourne Pourquoi? ? ? 10
![Exemple: ldexp(x, n) Pour comprendre ce qui se passe il faut savoir que la Exemple: ldexp(x, n) Pour comprendre ce qui se passe il faut savoir que la](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-11.jpg)
Exemple: ldexp(x, n) Pour comprendre ce qui se passe il faut savoir que la fonction ldexp attend deux nombres en entrée: x et n. • x doit être un double • n doit être un entier • la fonction retourne un double Donc lorsque l'on exécute ldexp(1, 1. 1), la fonction reçoit en fait les valeurs 1 et 1 puisque la partie fractionnaire du second opérande est tronquée. 11
![Les prototypes de fonctions Morale: avant d'utiliser une fonction de la bibliothèque il faut Les prototypes de fonctions Morale: avant d'utiliser une fonction de la bibliothèque il faut](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-12.jpg)
Les prototypes de fonctions Morale: avant d'utiliser une fonction de la bibliothèque il faut connaître son prototype. Le prototype d'une fonction indique • le nom de la fonction • le type des paramètres • le type de la valeur de retour Exemple: double ldexp(double, int) indique ldexp est une fonction à deux paramètres (un double et un int) qui retourne un double. 12
![Exemple: pow(x, y) La fonction d'exponentiation a le prototype suivant: double pow(double x, double Exemple: pow(x, y) La fonction d'exponentiation a le prototype suivant: double pow(double x, double](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-13.jpg)
Exemple: pow(x, y) La fonction d'exponentiation a le prototype suivant: double pow(double x, double y) de sorte qu'on ne peut pas l'utiliser de la façon suivante: pow(2, 3) % 5 Pourquoi? 13
![Exemple: pow(x, y) Il faut plutôt écrire: (int) pow(2, 3) % 5 ou encore Exemple: pow(x, y) Il faut plutôt écrire: (int) pow(2, 3) % 5 ou encore](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-14.jpg)
Exemple: pow(x, y) Il faut plutôt écrire: (int) pow(2, 3) % 5 ou encore ( (int)pow(2, 3) ) % 5 L'opérateur cast permet de convertir le type d'une expression en un autre type. (type) expression 14
![Exemple: pow(x, y) Remarque On voit ici une différence fondamentale entre le pseudo-code et Exemple: pow(x, y) Remarque On voit ici une différence fondamentale entre le pseudo-code et](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-15.jpg)
Exemple: pow(x, y) Remarque On voit ici une différence fondamentale entre le pseudo-code et un vrai langage de programmation tel que le C. En pseudo-code, on n'a pas à se soucier des détails particuliers à un langage. Par exemple, on écrit: x modulo 5 sans que cela ne cause de problème. Cela permet de se concentrer sur l'algorithme plutôt que sur la syntaxe. 15
![Une liste de quelques de fonctions mathématiques • • ceil(x) retourne la valeur entiere Une liste de quelques de fonctions mathématiques • • ceil(x) retourne la valeur entiere](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-16.jpg)
Une liste de quelques de fonctions mathématiques • • ceil(x) retourne la valeur entiere par excès de x floor(x) retourne la valeur entiere par défaut de x fabs(x) retourne la valeur aboslue dun valeur réelle x log(x) retourne le logaritme népérein de x log 10(x) retourne le logaritme décimal de x sin(x) retourne le sinus de x sqrt(x) retourne la racine carrée x tan(x) retourne la tangente de x Vérifier à chaque fois leur prototype 16
![Structure d'un programme en C Un programme en C est une collection de fonctions Structure d'un programme en C Un programme en C est une collection de fonctions](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-17.jpg)
Structure d'un programme en C Un programme en C est une collection de fonctions qui interagissent entre elles afin d'exécuter un calcul. Une des fonctions doit porter le nom main: c'est la première fonction à être appelée lors de l'exécution du programme. Comme on l'a vu, on peut utiliser les fonctions de la bibliothèque standard ou encore, on peut définir nos propres fonctions 17
![Définition des fonctions Dans la plupart des langages de programmation, la définition d'une fonction Définition des fonctions Dans la plupart des langages de programmation, la définition d'une fonction](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-18.jpg)
Définition des fonctions Dans la plupart des langages de programmation, la définition d'une fonction comporte deux parties: l'entête et le corps. Entête Corps { Nom de la fonction Type de la valeur retournée Nom des paramètres Types des paramètres { Déclaration des variables Instructions 18
![Étude de cas Calcul de la moyenne Description du problème: Étant donné 3 entiers, Étude de cas Calcul de la moyenne Description du problème: Étant donné 3 entiers,](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-19.jpg)
Étude de cas Calcul de la moyenne Description du problème: Étant donné 3 entiers, calculer leur moyenne sous forme d'entier tronqué et afficher le résultat. Entrée: Trois entiers séparés par un ou plusieurs caractères d'espacement. Sortie: Un entier représentant la partie entière de la moyenne. 19
![Calcul de la moyenne Supposons l'existence d'une fonction ayant le prototype suivant: entier moyenne Calcul de la moyenne Supposons l'existence d'une fonction ayant le prototype suivant: entier moyenne](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-20.jpg)
Calcul de la moyenne Supposons l'existence d'une fonction ayant le prototype suivant: entier moyenne 3(entier, entier) 20
![Fonction principale entier nombre 1 nombre 2 nombre 3 entier moyenne lire nombre 1 Fonction principale entier nombre 1 nombre 2 nombre 3 entier moyenne lire nombre 1](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-21.jpg)
Fonction principale entier nombre 1 nombre 2 nombre 3 entier moyenne lire nombre 1 nombre 2 nombre 3 moyenne ¬ moyenne 3(nombre 1, nombre 2, nombre 3) écrire moyenne 21
![Définition de la fonction moyenne 3 Entête: entier moyenne 3( entier a, entier b, Définition de la fonction moyenne 3 Entête: entier moyenne 3( entier a, entier b,](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-22.jpg)
Définition de la fonction moyenne 3 Entête: entier moyenne 3( entier a, entier b, entier c) Corps: entier m m¬ (a + b + c) / 3 retourner m 22
![Définition de la fonction moyenne 3 Entête: entier moyenne 3(entier a, entier b, entier Définition de la fonction moyenne 3 Entête: entier moyenne 3(entier a, entier b, entier](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-23.jpg)
Définition de la fonction moyenne 3 Entête: entier moyenne 3(entier a, entier b, entier c) Corps: entier m m¬ (a + b + c) / 3 retourner m À l'appel de la fonction, les variables a, b et c sont déclarées puis initialisées avec la valeur des paramètres utilisés lors de l'appel. 23
![Pas-à-pas Vérifions le comportement de notre algorithme sur l'exemple suivant: 67 86 79 nombre Pas-à-pas Vérifions le comportement de notre algorithme sur l'exemple suivant: 67 86 79 nombre](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-24.jpg)
Pas-à-pas Vérifions le comportement de notre algorithme sur l'exemple suivant: 67 86 79 nombre 1 nombre 2 entier nombre 3 entier moyenne entier Après les déclaration suivantes: entier nombre 1 nombre 2 nombre 3 entier moyenne l'état de la mémoire correspond à la figure de droite. . . . 24
![67 86 79 nombre 1 nombre 2 nombre 3 entier moyenne entier lire nombre 67 86 79 nombre 1 nombre 2 nombre 3 entier moyenne entier lire nombre](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-25.jpg)
67 86 79 nombre 1 nombre 2 nombre 3 entier moyenne entier lire nombre 1 nombre 2 nombre 3 . . . 25
![L'analyse de l'instruction moyenne ¬ moyenne 3(nombre 1, nombre 2, nombre 3) est plus L'analyse de l'instruction moyenne ¬ moyenne 3(nombre 1, nombre 2, nombre 3) est plus](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-26.jpg)
L'analyse de l'instruction moyenne ¬ moyenne 3(nombre 1, nombre 2, nombre 3) est plus compliquée. On doit d'abord évaluer l'expression moyenne 3(nombre 1, nombre 2, nombre 3) Pour ce faire, il faut remplacer les variables par leur valeur respective: moyenne 3(67, 86, 79) Puis, la fonction moyenne 3 est appelée. 26
![Appel de moyenne 3 Lorsqu'une fonction est appelée, chacun de ses paramètres est copié Appel de moyenne 3 Lorsqu'une fonction est appelée, chacun de ses paramètres est copié](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-27.jpg)
Appel de moyenne 3 Lorsqu'une fonction est appelée, chacun de ses paramètres est copié dans une nouvelle variable. Le nom de ces nouvelles variables correspond au nom des paramètres tels qu'indiqué dans l'entête. moyenne 3(nombre 1, nombre 2, nombre 3) paramètres d’appel moyenne 3( 67 , 86 , 79 ) moyenne 3( a , b , c ) paramètres formels 27
![Ainsi après l'appel de moyenne 3(67, 86, 79) l'état de la mémoire devient: 67 Ainsi après l'appel de moyenne 3(67, 86, 79) l'état de la mémoire devient: 67](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-28.jpg)
Ainsi après l'appel de moyenne 3(67, 86, 79) l'état de la mémoire devient: 67 86 79 nombre 1 nombre 2 nombre 3 entier moyenne entier 67 86 79 a Remarquer que les variables formelles a, b et c sont créées et initialisées à 67, 86 et 79. entier b c . . . entier . . . 28
![Exécution du corps de moyenne 3 entier m m¬ (a + b + c) Exécution du corps de moyenne 3 entier m m¬ (a + b + c)](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-29.jpg)
Exécution du corps de moyenne 3 entier m m¬ (a + b + c) / 3 retourner m D 'abord, la déclaration entier m 67 86 79 nombre 1 nombre 2 nombre 3 entier moyenne entier 67 86 79 a b c entier m entier . . . 29
![Exécution du corps de moyenne 3 67 86 79 nombre 1 entier m m¬ Exécution du corps de moyenne 3 67 86 79 nombre 1 entier m m¬](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-30.jpg)
Exécution du corps de moyenne 3 67 86 79 nombre 1 entier m m¬ (a + b + c) / 3 retourner m nombre 2 nombre 3 entier moyenne entier 67 86 79 a Puis l'évaluation de l'expression (a + b + c) / 3 = (67 + 86 + 79) / 3 = (153 + 79) / 3 = 232 / 3 = 77. 33 entier b c entier m entier . . . 30
![Exécution du corps de moyenne 3 entier m m¬ (a + b + c) Exécution du corps de moyenne 3 entier m m¬ (a + b + c)](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-31.jpg)
Exécution du corps de moyenne 3 entier m m¬ (a + b + c) / 3 retourner m Et l'assignation m ¬ 77. 33 67 86 79 nombre 1 nombre 2 nombre 3 entier moyenne entier 67 86 79 77 a b c m Remarquez que 77 qui est mis dans m et non pas 77. 33. entier . . . 31
![Exécution du corps de moyenne 3 entier m m¬ (a + b + c) Exécution du corps de moyenne 3 entier m m¬ (a + b + c)](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-32.jpg)
Exécution du corps de moyenne 3 entier m m¬ (a + b + c) / 3 retourner m Finalement, la valeur souhaitée est retournée à l'aide de l'instruction spéciale: retourner m 67 86 79 nombre 1 nombre 2 nombre 3 entier moyenne entier 67 86 79 77 a b c m . . . entier . . . 32
![67 86 79 nombre 1 nombre 2 Au sortir d'une fonction, toutes les variables 67 86 79 nombre 1 nombre 2 Au sortir d'une fonction, toutes les variables](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-33.jpg)
67 86 79 nombre 1 nombre 2 Au sortir d'une fonction, toutes les variables qui y ont été déclarées ainsi que toutes les variables contenants les paramètres disparaissent. nombre 3 entier moyenne entier . . . 33
![Retour à la fonction principale: lire nombre 1 nombre 2 nombre 3 moyenne ¬ Retour à la fonction principale: lire nombre 1 nombre 2 nombre 3 moyenne ¬](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-34.jpg)
Retour à la fonction principale: lire nombre 1 nombre 2 nombre 3 moyenne ¬ moyenne 3(nombre 1, nombre 2, nombre 3) écrire moyenne Puisque la valeur retournée par moyenne 3 est 77, cela veut dire que moyenne 3(67, 86, 79) est une expression s'évaluant à 77. 34
![67 86 79 77 nombre 1 La prochaine instruction à être exécutée est donc 67 86 79 77 nombre 1 La prochaine instruction à être exécutée est donc](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-35.jpg)
67 86 79 77 nombre 1 La prochaine instruction à être exécutée est donc moyenne ¬ 77 Finalement, l'instruction écrire moyenne est exécutée nombre 2 nombre 3 moyenne . . . entier . . . 35
![Calcul de l'aire d'un rectangle Description du problème: Calculer et afficher • l'aire d'un Calcul de l'aire d'un rectangle Description du problème: Calculer et afficher • l'aire d'un](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-36.jpg)
Calcul de l'aire d'un rectangle Description du problème: Calculer et afficher • l'aire d'un rectangle. • Entrée: Deux nombres réels, le premier indique la longueur et le second indique la largeur du rectangle. • Sortie: Un nombre réel représentant l'aire du rectangle. 36
![Fonction principale réel longueur largeur lire longueur largeur écrire aire(longueur, largeur) où aire est Fonction principale réel longueur largeur lire longueur largeur écrire aire(longueur, largeur) où aire est](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-37.jpg)
Fonction principale réel longueur largeur lire longueur largeur écrire aire(longueur, largeur) où aire est une fonction dont le prototype est réel aire(réel, réel) 37
![• Définition de aire • Entête: • réel aire(réel longueur, réel largeur) • • Définition de aire • Entête: • réel aire(réel longueur, réel largeur) •](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-38.jpg)
• Définition de aire • Entête: • réel aire(réel longueur, réel largeur) • Corps: • retourner longueur * largeur 38
![Pas-à-pas Vérifions le comportement de notre algorithme sur l'exemple suivant: 7. 2 3. 5 Pas-à-pas Vérifions le comportement de notre algorithme sur l'exemple suivant: 7. 2 3. 5](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-39.jpg)
Pas-à-pas Vérifions le comportement de notre algorithme sur l'exemple suivant: 7. 2 3. 5 longueur réel largeur réel Après les déclaration suivantes: réel longueur largeur l'état de la mémoire correspond à la figure de droite. . . . 39
![longueur lire longueur largeur réel 7. 2 3. 5 largeur . . . réel longueur lire longueur largeur réel 7. 2 3. 5 largeur . . . réel](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-40.jpg)
longueur lire longueur largeur réel 7. 2 3. 5 largeur . . . réel . . . 40
![écrire aire(longueur, largeur) longueur D'abord il faut évaluer réel 7. 2 3. 5 largeur écrire aire(longueur, largeur) longueur D'abord il faut évaluer réel 7. 2 3. 5 largeur](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-41.jpg)
écrire aire(longueur, largeur) longueur D'abord il faut évaluer réel 7. 2 3. 5 largeur réel aire(longueur, largeur) On appelle donc la fonction aire. . . . 41
![Appel de la fonction aire Puisque l'entête de la fonction spécifie que les nom Appel de la fonction aire Puisque l'entête de la fonction spécifie que les nom](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-42.jpg)
Appel de la fonction aire Puisque l'entête de la fonction spécifie que les nom des paramètres sont longueur et largeur, cela veut dire que deux nouvelles variables portant ces noms et contenant les mêmes valeurs sont créées. longueur largeur . . . 7. 2 3. 5 réel . . . 42
![Les instructions du corps de l; a fonction sont ensuite exécutées. retourner longueur * Les instructions du corps de l; a fonction sont ensuite exécutées. retourner longueur *](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-43.jpg)
Les instructions du corps de l; a fonction sont ensuite exécutées. retourner longueur * largeur = retourner 7. 2 * 3. 5 = retourner 25. 2 longueur réel 7. 2 3. 5 largeur longueur largeur . . . réel . . . 43
![Les instructions du corps sont ensuite exécutées. retourner longueur * largeur = retourner 7. Les instructions du corps sont ensuite exécutées. retourner longueur * largeur = retourner 7.](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-44.jpg)
Les instructions du corps sont ensuite exécutées. retourner longueur * largeur = retourner 7. 2* 3. 5 = retourner 25. 2 longueur largeur . . Comment savoir à quelle case. réel 7. 2 3. 5 réel . . . mémoire longueur et largeur correspondent? 44
![Déclarés et visibles seulement dans la fonction principale longueur Déclarés et visibles seulement dans Déclarés et visibles seulement dans la fonction principale longueur Déclarés et visibles seulement dans](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-45.jpg)
Déclarés et visibles seulement dans la fonction principale longueur Déclarés et visibles seulement dans la fonction aire longueur Une variable déclarée dans une fonction n'est visible que dans cette fonction. réel 3. 5 7. 2 largeur . . . réel . . . 45
![Au retour de la fonction, les variables qui y ont été créées disparaissent. longueur Au retour de la fonction, les variables qui y ont été créées disparaissent. longueur](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-46.jpg)
Au retour de la fonction, les variables qui y ont été créées disparaissent. longueur réel 7. 2 3. 5 largeur réel L'expression aire(7. 2, 3. 5) vaut la valeur retournée, c'est-àdire 25. 2. . . . 46
![Retour dans la fonction principale réel longueur largeur lire longueur largeur écrire aire(longueur, largeur) Retour dans la fonction principale réel longueur largeur lire longueur largeur écrire aire(longueur, largeur)](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-47.jpg)
Retour dans la fonction principale réel longueur largeur lire longueur largeur écrire aire(longueur, largeur) longueur largeur L'instruction écrire aire(longueur, largeur) correspond à écrire 25. 2 Ce qui est bien ce que l'on voulait que notre programme fasse! réel 3. 5 7. 2 . . . réel . . . 47
![Échanger deux valeurs Description du problème: • Lire deux entiers, les afficher dans l'ordre Échanger deux valeurs Description du problème: • Lire deux entiers, les afficher dans l'ordre](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-48.jpg)
Échanger deux valeurs Description du problème: • Lire deux entiers, les afficher dans l'ordre où ils ont été lus puis, les afficher dans l'ordre inverse. • Utiliser une fonction pour inverser le contenu de deux variables. • Entrée: Deux entiers. • Sortie: Les deux même entiers, dans l'ordre inverse. 48
![Fonction principale 1 entier x y lire x y écrire y x Mais cela Fonction principale 1 entier x y lire x y écrire y x Mais cela](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-49.jpg)
Fonction principale 1 entier x y lire x y écrire y x Mais cela ne satisfait pas la description du problème 49
![• Fonction principale 2 • entier x y • • lire x y • Fonction principale 2 • entier x y • • lire x y](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-50.jpg)
• Fonction principale 2 • entier x y • • lire x y ecrire x y echanger(x, y) ecrire x y • où echanger est une fonction dont le prototype est: • echanger(entier, entier) • Remarque: la fonction echanger ne retourne aucune valeur. 50
![• Définition 1 de echanger • Entête: • echanger(entier a, entier b) • • Définition 1 de echanger • Entête: • echanger(entier a, entier b) •](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-51.jpg)
• Définition 1 de echanger • Entête: • echanger(entier a, entier b) • Corps: • a b • b a 51
![Pas-à-pas Entrée: 10 15 10 15 x y entier x y lire x y. Pas-à-pas Entrée: 10 15 10 15 x y entier x y lire x y.](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-52.jpg)
Pas-à-pas Entrée: 10 15 10 15 x y entier x y lire x y. . . 52
![10 15 x y écrire x y échanger(x, y) a b . . . 10 15 x y écrire x y échanger(x, y) a b . . .](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-53.jpg)
10 15 x y écrire x y échanger(x, y) a b . . . entier . . . 53
![échanger(entier a, entier b) a ¬ b b ¬ a On exécute d ’abord échanger(entier a, entier b) a ¬ b b ¬ a On exécute d ’abord](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-54.jpg)
échanger(entier a, entier b) a ¬ b b ¬ a On exécute d ’abord 10 15 15 15 x y a b . . . entier . . . a ¬ b 54
![échanger(entier a, entier b) a ¬ b b ¬ a Puis on exécute b échanger(entier a, entier b) a ¬ b b ¬ a Puis on exécute b](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-55.jpg)
échanger(entier a, entier b) a ¬ b b ¬ a Puis on exécute b ¬ a 10 15 15 15 x y a b . . . entier . . . Problème!!! 55
![Définition 2 de échanger Entête: échanger(entier a, entier b) Corps: entier tmp ¬ a Définition 2 de échanger Entête: échanger(entier a, entier b) Corps: entier tmp ¬ a](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-56.jpg)
Définition 2 de échanger Entête: échanger(entier a, entier b) Corps: entier tmp ¬ a a ¬ b b ¬ tmp 10 15 x y a b . . . entier . . . 56
![entier tmp ¬ a a ¬ b b ¬ tmp 10 15 x y entier tmp ¬ a a ¬ b b ¬ tmp 10 15 x y](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-57.jpg)
entier tmp ¬ a a ¬ b b ¬ tmp 10 15 x y a b entier entier tmp . . . 57
![entier tmp ¬a tmp ¬ a a ¬ b b ¬ tmp 10 15 entier tmp ¬a tmp ¬ a a ¬ b b ¬ tmp 10 15](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-58.jpg)
entier tmp ¬a tmp ¬ a a ¬ b b ¬ tmp 10 15 10 x y a b tmp . . . entier entier . . . 58
![entier tmp ¬ a aa ¬ b ¬b b ¬ tmp 10 15 15 entier tmp ¬ a aa ¬ b ¬b b ¬ tmp 10 15 15](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-59.jpg)
entier tmp ¬ a aa ¬ b ¬b b ¬ tmp 10 15 15 15 10 x y a b tmp . . . entier entier . . . 59
![entier tmp ¬ a a ¬ b b ¬ tmp 10 15 15 10 entier tmp ¬ a a ¬ b b ¬ tmp 10 15 15 10](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-60.jpg)
entier tmp ¬ a a ¬ b b ¬ tmp 10 15 15 10 10 x y a b tmp . . . entier entier . . . 60
![État de la mémoire au retour de la fonction echanger: On a échangé le État de la mémoire au retour de la fonction echanger: On a échangé le](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-61.jpg)
État de la mémoire au retour de la fonction echanger: On a échangé le contenu des variables a et b mais pas celui des variable x et y!!! 10 15 x y . . . entier . . . 61
![Définition 3 de échanger Entête: echanger(entier référence a, entier référence b) où a et Définition 3 de échanger Entête: echanger(entier référence a, entier référence b) où a et](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-62.jpg)
Définition 3 de échanger Entête: echanger(entier référence a, entier référence b) où a et b ne sont pas des copies mais des références aux paramètres d'appel. Corps: entier tmp ¬ a a ¬ b b ¬ tmp 62
![x paramètres passés par copie y a paramètres formels: a, b paramètres d'appel: x, x paramètres passés par copie y a paramètres formels: a, b paramètres d'appel: x,](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-63.jpg)
x paramètres passés par copie y a paramètres formels: a, b paramètres d'appel: x, y b . . . 63
![a º x paramètres passés par référence b º y paramètres formels: a, b a º x paramètres passés par référence b º y paramètres formels: a, b](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-64.jpg)
a º x paramètres passés par référence b º y paramètres formels: a, b paramètres d'appel: x, y . . . 64
![Pas-à-pas Entrée: 10 15 entier x y lire x y écrire x y échanger(x, Pas-à-pas Entrée: 10 15 entier x y lire x y écrire x y échanger(x,](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-65.jpg)
Pas-à-pas Entrée: 10 15 entier x y lire x y écrire x y échanger(x, y) écrire x y 10 15 x y . . . entier . . . 65
![entier x y lire x y écrire x y échanger(x, y) écrire x y entier x y lire x y écrire x y échanger(x, y) écrire x y](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-66.jpg)
entier x y lire x y écrire x y échanger(x, y) écrire x y 10 15 a º x b º y . . . entier . . . 66
![Dans echanger entier tmp tmp ¬ a a ¬ b b ¬ tmp 10 Dans echanger entier tmp tmp ¬ a a ¬ b b ¬ tmp 10](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-67.jpg)
Dans echanger entier tmp tmp ¬ a a ¬ b b ¬ tmp 10 15 a º x b º y entier tmp entier . . . 67
![Dans echanger entier tmp ¬a tmp ¬ a a ¬ b b ¬ tmp Dans echanger entier tmp ¬a tmp ¬ a a ¬ b b ¬ tmp](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-68.jpg)
Dans echanger entier tmp ¬a tmp ¬ a a ¬ b b ¬ tmp 10 15 10 a º x b º y tmp . . . entier . . . 68
![Dans echanger entier tmp ¬ a a ¬ b b ¬ tmp 15 15 Dans echanger entier tmp ¬ a a ¬ b b ¬ tmp 15 15](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-69.jpg)
Dans echanger entier tmp ¬ a a ¬ b b ¬ tmp 15 15 10 a º x b º y tmp . . . entier . . . 69
![Dans la fonction echanger entier tmp ¬ a a ¬ b b ¬ tmp Dans la fonction echanger entier tmp ¬ a a ¬ b b ¬ tmp](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-70.jpg)
Dans la fonction echanger entier tmp ¬ a a ¬ b b ¬ tmp 15 10 10 a º x b º y tmp . . . entier . . . 70
![Retour à la fonction principale entier x y lire x y écrire x y Retour à la fonction principale entier x y lire x y écrire x y](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-71.jpg)
Retour à la fonction principale entier x y lire x y écrire x y échanger(x, y) écrire x y 15 10 10 a º x b º y tmp . . . entier . . . Ce qui donne bien le résultat souhaité. 71
![Résumé Les trois études de cas précédents ont servi à illustrer les concepts suivants: Résumé Les trois études de cas précédents ont servi à illustrer les concepts suivants:](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-72.jpg)
Résumé Les trois études de cas précédents ont servi à illustrer les concepts suivants: • utilisation des fonctions pour étendre les possibilités de l'ordinateur. • prototype d'une fonction • définition d'une fonction. • les paramètres • l'appel d'une fonction • le retour d'une fonction • l'utilisation d'une variable tampon 72
![Définition des fonctions Dans la plupart des langage de programmation, la définition d'une fonction Définition des fonctions Dans la plupart des langage de programmation, la définition d'une fonction](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-73.jpg)
Définition des fonctions Dans la plupart des langage de programmation, la définition d'une fonction comporte deux parties: l'entête et le corps. Entête Corps { Nom de la fonction Type de la valeur retournée Nom des paramètres Types des paramètres { Déclaration des variables Instructions 73
![Les paramètres Paramètres formels: Ceux utilisés dans la définition. Paramètres d'appel: Ceux utilisés lors Les paramètres Paramètres formels: Ceux utilisés dans la définition. Paramètres d'appel: Ceux utilisés lors](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-74.jpg)
Les paramètres Paramètres formels: Ceux utilisés dans la définition. Paramètres d'appel: Ceux utilisés lors de l'appel. 74
![Les prototypes de fonctions Avant d'utiliser une fonction de la bibliothèque il faut connaître Les prototypes de fonctions Avant d'utiliser une fonction de la bibliothèque il faut connaître](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-75.jpg)
Les prototypes de fonctions Avant d'utiliser une fonction de la bibliothèque il faut connaître son prototype. Le prototype d'une fonction indique • le nom de la fonction • le type des paramètres • le type de la valeur de retour Bien sûr, pour utiliser une fonction il n'est pas nécessaire de connaître le nom de ses paramètres formels. 75
![Passage de paramètres Par copie: Les paramètres d'appel sont copiés dans les paramètres formels: Passage de paramètres Par copie: Les paramètres d'appel sont copiés dans les paramètres formels:](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-76.jpg)
Passage de paramètres Par copie: Les paramètres d'appel sont copiés dans les paramètres formels: création de nouvelles variables. Par référence: Les paramètre formels réfèrent aux paramètres d'appel: plusieurs noms pour une même case mémoire. 76
![Appel de fonctions • Création de nouvelles variables pour chacun des paramètres passés par Appel de fonctions • Création de nouvelles variables pour chacun des paramètres passés par](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-77.jpg)
Appel de fonctions • Création de nouvelles variables pour chacun des paramètres passés par copie. • Le contrôle est donné à la fonction: la première ligne du corps de la fonction est d'abord exécutée. Remarques: Le nom des variables déclaré dans une fonctions est local à cette fonction et il est invisible aux autres fonctions. Deux fonctions distinctes peuvent utiliser le même identificateur pour nommer deux cases mémoire distinctes. 77
![Retour d'une fonction À l'intérieur d'une fonction, l'instruction retourner expression est exécutée de la Retour d'une fonction À l'intérieur d'une fonction, l'instruction retourner expression est exécutée de la](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-78.jpg)
Retour d'une fonction À l'intérieur d'une fonction, l'instruction retourner expression est exécutée de la façon suivante: • L'expression est d'abord évaluée. • Le résultat est retourné à la fonction appelante • Toutes les variables ayant été créées après l'appel de la fonction sont détruites. • Le contrôle est redonné à la fonction appelante. 78
![Version C entier nombre 1 nombre 2 nombre 3 entier moyenne lire nombre 1 Version C entier nombre 1 nombre 2 nombre 3 entier moyenne lire nombre 1](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-79.jpg)
Version C entier nombre 1 nombre 2 nombre 3 entier moyenne lire nombre 1 nombre 2 nombre 3 moyenne ¬ moyenne 3(nombre 1, nombre 2, nombre 3) écrire moyenne #include <iostream. h> int moyenne 3(int, int); /* prototype de la fonction*/ /* est déclaré avant la fonction main */ main() { int nombre 1, nombre 2, nombre 3; int moyenne; cin >> nombre 1 >> nombre 2 >> nombre 3; moyenne = moyenne 3(nombre 1, nombre 2, nombre 3); cout << moyenne; return (0) } 79
![Version C Entête: entier moyenne 3( entier a, entier b, entier c) Corps: entier Version C Entête: entier moyenne 3( entier a, entier b, entier c) Corps: entier](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-80.jpg)
Version C Entête: entier moyenne 3( entier a, entier b, entier c) Corps: entier m m¬ (a + b + c) / 3 retourner m int moyenne 3(int a, int b, int c) /* définition de la fonction */ { int m; m = (a + b + c) / 3; return m; } 80
![version C (air du rectangle) réel longueur largeur lire longueur largeur écrire aire(longueur, largeur) version C (air du rectangle) réel longueur largeur lire longueur largeur écrire aire(longueur, largeur)](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-81.jpg)
version C (air du rectangle) réel longueur largeur lire longueur largeur écrire aire(longueur, largeur) #include <iostream. h> double aire(double, double); /* prototype de la fonction*/ main() { double longueur, largeur; cin >> longueur >> largeur; cout << aire(longueur, largeur); /* appel de la fonction */ return(0) } 81
![Version c Entête: réel aire(réel longueur, réel largeur) Corps: retourner longueur * largeur double Version c Entête: réel aire(réel longueur, réel largeur) Corps: retourner longueur * largeur double](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-82.jpg)
Version c Entête: réel aire(réel longueur, réel largeur) Corps: retourner longueur * largeur double aire(double longueur, double largeur) /* définition de la fonction */ { return (longueur * largeur); } 82
![Version C (échanger) entier x y lire x y écrire x y échanger(x, y) Version C (échanger) entier x y lire x y écrire x y échanger(x, y)](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-83.jpg)
Version C (échanger) entier x y lire x y écrire x y échanger(x, y) écrire x y #include <iostream. h> void echanger(int &, int &); main(){ int x, y; cin >> x >> y; cout << x << y; echanger(x, y); cout << x << y; } 83
![Version C Entête: échanger(entier référence a, entier référence b) Corps: entier tmp ¬ a Version C Entête: échanger(entier référence a, entier référence b) Corps: entier tmp ¬ a](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-84.jpg)
Version C Entête: échanger(entier référence a, entier référence b) Corps: entier tmp ¬ a a ¬ b b ¬ tmp void echanger(int &a, int &b) { int tmp; tmp = a; a = b; b = tmp; } 84
![void: est utilisé pour signifier: 1. une fonction ne retourne pas de valeur; 2. void: est utilisé pour signifier: 1. une fonction ne retourne pas de valeur; 2.](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-85.jpg)
void: est utilisé pour signifier: 1. une fonction ne retourne pas de valeur; 2. une fonction est définie sans paramètres 85
![Remarque • En C++, dans une fonction, le symbole & sert à indiquer qu'un Remarque • En C++, dans une fonction, le symbole & sert à indiquer qu'un](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-86.jpg)
Remarque • En C++, dans une fonction, le symbole & sert à indiquer qu'un paramètre est passé par référence. • Il est utilisé dans l'entête de la définition ainsi que dans le prototype. • Cependant, il n'est pas utilisé lors de l'appel de la fonction. • En C il n`y a pas de passage de paramètres par référence. Pour obtenir le même effet (c'est-à-dire pour pouvoir changer la valeur d'un paramètre) il faut utiliser les pointeurs que nous verrons plus tard. 86
![Autres exemples 1. En utilisant les fonctions, écrire un programme en C qui détermine Autres exemples 1. En utilisant les fonctions, écrire un programme en C qui détermine](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-87.jpg)
Autres exemples 1. En utilisant les fonctions, écrire un programme en C qui détermine le PGCD de deux valeurs. 87
![#include <iostream. h> /* prototype dde la fonction*/ int PGCD(int, int); main(){ int m, #include <iostream. h> /* prototype dde la fonction*/ int PGCD(int, int); main(){ int m,](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-88.jpg)
#include <iostream. h> /* prototype dde la fonction*/ int PGCD(int, int); main(){ int m, n; cin >>n>>n; cout <<‘’le PGCD est ‘’<<PGCD(n. m); return (0); } */ définition de la fonction */ int PGCD(int A, int B){ int reste; reste = A % B; while (reste != 0){ A = B; B = reste; reste = A % B; } return (B); } /* fin de la fonction */ 88
![Exo 2. Reprendre l’exemple du calcul de la racine carrée avec une fonction #include Exo 2. Reprendre l’exemple du calcul de la racine carrée avec une fonction #include](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-89.jpg)
Exo 2. Reprendre l’exemple du calcul de la racine carrée avec une fonction #include <stdio> #include <math. h> double racine(double); */ prototype de la fonction */ main(){ double a, rac 0, rac 1; cin >>a; cout << "la racine carrée de "<<a; cout << " est "<<racine(a); return (0); } double racine(double a) { rac 1 = (1+a)/2; do rac 0 = rac 1; rac 1 = (rac 0 + a/rac 0)*0. 5; while (fabs((rac 1 – rac 0)/rac 0) > 0. 00001) return (rac 1); } 89
![3. À l’aide d’une fonction, écrire un programme qui visualise le texte: Bonjour, comment 3. À l’aide d’une fonction, écrire un programme qui visualise le texte: Bonjour, comment](http://slidetodoc.com/presentation_image_h/34a536c27cc8291b1ff5380a1c5a3c8b/image-90.jpg)
3. À l’aide d’une fonction, écrire un programme qui visualise le texte: Bonjour, comment allez-vous? #include <iostream. h> void texte(void) /* prototype de la fonction*/ main(){ texte; /* appel à la fonction texte */ return (0); } void texte ( ) /* définition de la fonction */ { cout << ‘’Bonjour, comment allez-vous? n’’; } 90
- Slides: 90