8pro107 Éléments de programmation les fonctions. la bibliothèque standard du c/c++ il y a peu...

81
8PRO107 Éléments de programmation Les fonctions

Upload: ame-salaun

Post on 04-Apr-2015

102 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

8PRO107

Éléments de programmation

Les fonctions

Page 2: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

La bibliothèque standard du C/C++

Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux que nous avons vus, il est possible d'en construire d'autres.

On distingue les opérateurs de base des opérateurs complexes,construits à partir des opérateurs de base, en appelant ces derniers : « fonctions ».

La plupart des environnements supportant le C/C++ standard disposent d'une large collection de fonctions appeléebibliothèque standard.

Page 3: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Plusieurs fonctions mathématiques courantes font partie de la bibliothèque standard. Pour les utiliser, il suffit d'inclure au début du programme la ligne suivante:

#include <cmath>

Il est alors possible d'employer des fonctions telles que:

cos(x) cosinus de xpow(x,y) x à la puissance ysqrt(x) racine carrée de xldexp(x,n)

et plusieurs autres.

Exemple : cmath

nx2

Page 4: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Exemple : cos(x)

#include <iostream>#include <cmath>

int main(){ double x; std::cin >> x; std::cout << cos(x); return 0;}

Page 5: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Il est bien connu que l'équation

où a, b et c sont des constantes, possède deux solutionsdonnées par la formule

Il est donc utile d'utiliser la fonction sqrt pour écrire un programme calculant les racines d'un polynôme.

Exemple : sqrt(x)

02 cbxax

a

acbb

2

42

Page 6: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

#include <iostream>#include <cmath>

int main(){ double a, b, c; double racine1, racine2; double tmp;

std::cin >> a >> b >> c; tmp = sqrt(b*b - 4*a*c); racine1 = ( -b - tmp) / (2*a); racine2 = ( -b + tmp) / (2*a); std::cout << racine1 << std::endl << racine2 << std::endl; return 0;}

Exemple : sqrt(x)

Page 7: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Examinons plus en détails la fonction ldexp.

Nous savons que cette fonction retourne la valeur

Considérons quelques exemples :

ldexp(1, 1) retourne ldexp(1.1, 1) retourneldexp(1, 1.1) retourne

Pourquoi???

Exemple : ldexp(x,n)

nx2

12*12 12*1.12.2

14.22*12 1.1

Page 8: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

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çoiten fait les valeurs 1 et 1 puisque la partie fractionnairedu second opérande est tronquée.

22*11) ldexp(1,1.1) ldexp(1,2*1 11.1

Page 9: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

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

Les prototypes de fonctions

Exemple:double ldexp(double, int)

indique que ldexp est une fonction à deux paramètres (un double et un int) qui retourne un double.

Page 10: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

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

Exercice: Pourquoi?

yx y)pow(x,

Page 11: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Il faut plutot écrire:

(int) pow(2, 3) % 5

ou encore

( (int)pow(2,3) ) % 5

L'opérateur cast permet de convertir le type d'une expressionen un autre type.

(type) expression

Exemple : pow(x,y)

Page 12: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Remarque

On voit ici une différence fondamentale entre le pseudocode et un vrai langage de programmation tel que le C/C++.

En pseudocode, on n'a pas à se soucier des détails particulier à un langage. Par exemple, on écrit

modulo 5

sans que cela ne cause de problème. Cela permet de se concentrer sur l'algorithme plutôt que sur la syntaxe.

Exemple : pow(x,y)

32

Page 13: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Structure d'un programme en C/C++

Un programme en C/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.

Page 14: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Définition des fonctions

Dans la plupart des langages de programmation, la définition d'une fonction comporte deux parties:l'en-tête et le corps.

En-tête

Nom de la fonctionType de la valeur retournéeNom des paramètresTypes des paramètres{

Corps Déclaration des variablesInstructions

Page 15: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1

Calcul de la moyenne

Description du problème: Étant donné 3 entiers, calculer leur moyenne et afficher le résultat.

Entrée: Trois entiers séparés par un ou plusieurs caractères d'espacement.

Sortie: Un réel représentant la moyenne.

Page 16: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1

Calcul de la moyenne

Supposons l'existence d'une fonction ayant le prototype suivant:

moyenne3(entier, entier, entier) retourne un réel

Page 17: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1

Fonction principale

Entiers : nombre1, nombre2, nombre3Réel: moyenne

LIRE nombre1, nombre2, nombre3moyenne moyenne3(nombre1, nombre2, nombre3)ÉCRIRE moyenne

Page 18: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1

Définition de la fonction moyenne3

En-tête: moyenne3 (entier a, entier b, entier c) retourne un réel

Corps:réel mm (a + b + c) / 3RETOURNER m

Page 19: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1

Définition de la fonction moyenne3

En-tête: moyenne3 (entier a, entier b, entier c) retourne un réel

Corps:réel mm (a + b + c) / 3RETOURNER m

À l'appel de lafonction, les variables

a,b et c sont déclarées puis initialisées avec la valeur

des paramètres utiliséslors de l'appel.

Page 20: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1

Pas-à-pas

Vérifions le comportement de notre algorithme sur l'exemplesuivant: 67 86 79

Après les déclarations suivantes :

Entiers : nombre1, nombre2, nombre3Réel : moyenne

l'état de la mémoire correspondà la figure de droite.

.

.

.

.

.

.

nombre1

nombre2

nombre3

moyenne

entier

entier

entier

réel

Page 21: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1

LIRE nombre1, nombre2, nombre3

86

.

.

.

.

.

.

79

67nombre1

nombre2

nombre3

moyenne

entier

entier

entier

réel

Page 22: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1

L'analyse de l'instructionmoyenne moyenne3 (nombre1, nombre2, nombre3)est plus compliquée.

On doit d'abord évaluer l'expressionmoyenne3 (nombre1, nombre2, nombre3)

Pour ce faire, il faut remplacer les variables par leurvaleur respective:

moyenne3 (67, 86, 79)

Puis, la fonction moyenne3 est appelée.

Page 23: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1Appel de moyenne3

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 tel qu'indiqué dans l'en-tête.

moyenne3 (nombre1, nombre2, nombre3)

moyenne3 ( 67 , 86 , 79 )

moyenne3 ( a , b , c )

paramètres d’appel

paramètres formels

Page 24: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1

86

86

67

79

.

.

.

.

.

.

79

67nombre1

nombre2

nombre3

moyenne

entier

entier

entier

entierAinsi après l’appel de

moyenne3 (67, 86, 79)l'état de la mémoire devient:

a

b

c

entier

entier

réel

Page 25: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1

86

86

67

79

.

.

.

.

.

.

79

67nombre1

nombre2

nombre3

moyenne

entier

entier

entier

réel

Exécution du corps de moyenne3

réel : mm (a + b + c) / 3RETOURNER m

D 'abord, la déclaration

réel : m

a

b

c

m

entier

entier

entier

réel

Page 26: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1

86

86

67

79

.

.

.

.

.

.

79

67nombre1

nombre2

nombre3

moyenne

entier

entier

entier

réel

Exécution du corps de moyenne3

réel : mm (a + b + c) / 3RETOURNER m

Puis l'évaluation de l'expression (a + b + c) / 3= (67 + 86 + 79) / 3= (153 + 79) / 3= 232 / 3= 77.33

a

b

c

m

entier

entier

entier

réel

Page 27: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1

86

86

67

77.33

79

.

.

.

.

.

.

79

67nombre1

nombre2

nombre3

moyenne

entier

entier

entier

réel

Exécution du corps de moyenne3

réel : mm (a + b + c) / 3RETOURNER m

Et l'assignationm 77.33

a

b

c

m

entier

entier

entier

réel

Page 28: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1

86

86

67

77.33

79

.

.

.

.

.

.

79

67nombre1

nombre2

nombre3

moyenne

entier

entier

entier

réel

Exécution du corps de moyenne3

réel : mm (a + b + c) / 3RETOURNER m

Finalement, la valeur souhaitéeest retournée à l'aide de l'instruction spéciale:

RETOURNER m

a

b

c

m

entier

entier

réel

entier

Page 29: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1

86

.

.

.

.

.

.

79

67nombre1

nombre2

nombre3

moyenne

entier

entier

entier

réel

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.

Page 30: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1

Retour à la fonction principale:

LIRE nombre1, nombre2, nombre3moyenne moyenne3 (nombre1, nombre2, nombre3)ÉCRIRE moyenne

Puisque la valeur retournée par moyenne3 est 77.33, cela veut dire que

moyenne3 (67, 86, 79)est une expression s'évaluant à 77.33.

Page 31: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1

86

.

.

.

.

.

.

77.33

79

67nombre1

nombre2

nombre3

moyenne

entier

entier

entier

réel

La prochaine instruction à être exécutée est donc

moyenne 77.33

Finalement, l'instructionÉCRIRE moyenne

est exécutée

Page 32: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 2

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.

Page 33: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 2

Fonction principale

réels : longueur largeurLIRE longueur largeurAFFICHER aire(longueur, largeur)

où aire est une fonction dont le prototype est

aire(réel, réel) retourne un réel

Page 34: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 2

Définition de aire

En-tête:réel aire (réel longueur, réel largeur)

Corps:RETOURNER longueur * largeur

Page 35: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 2

Pas-à-pasVérifions le comportement de notre algorithme sur l'exemplesuivant: 3.5 7.2

Après les déclaration suivantes:

réel longueur largeur

l’état de la mémoire correspondà la figure de droite.

.

.

.

.

.

.

longueur

largeur

réel

réel

Page 36: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 2

LIRE longueur, largeur

3.5

7.2

.

.

.

.

.

.

longueur

largeur

réel

réel

Page 37: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 2

ÉCRIRE aire(longueur, largeur)

D’abord, il faut évaluer

aire (longueur, largeur)

On appelle donc la fonction aire.

3.5

7.2

.

.

.

.

.

.

longueur

largeur

réel

réel

Page 38: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 2

Appel de la fonction aire

Puisque l'en-tête de la fonction spécifie que les nom des paramètres sont longueur et largeur, cela veut dire que deux nouvelles variables portant cesnoms et contenant les mêmes valeurs sont créées.

3.5

3.5

7.2

7.2

.

.

.

.

.

.

longueur

largeur

réel

réel

longueur

largeur

réel

réel

Page 39: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 2

Les instructions du corps sont ensuite exécutées.

RETOURNER longueur * largeur= RETOURNER 3.5 * 7.2= RETOURNER 25.2

3.5

3.5

7.2

7.2

.

.

.

.

.

.

longueur

largeur

réel

réel

longueur

largeur

réel

réel

Page 40: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 2

Les instructions du corps sont ensuite exécutées.

RETOURNER longueur * largeur= RETOURNER 3.5 * 7.2= RETOURNER 25.2

3.5

3.5

7.2

7.2

.

.

.

.

.

.

longueur

largeur

réel

réel

longueur

largeur

réel

réel

Comment savoir à quelle casemémoire longueur et largeur

correspondent?

Page 41: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 2

3.5

3.5

7.2

7.2

.

.

.

.

.

.

longueur

largeur

réel

réel

longueur

largeur

réel

réel

Déclarés et visibles seulement dans la fonction principale

Déclarés et visibles seulement dans la fonction aire

Une variable déclaréedans une fonction n’est visibleque dans cette fonction.

Page 42: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 2

Au retour de la fonction, les variables qui y ont été crééesdisparaissent.

L'expression

aire (3.5, 7.2)

vaut la valeur retournée, c'est-à-dire 25.2.

3.5

7.2

.

.

.

.

.

.

longueur

largeur

réel

réel

Page 43: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 2

L'instructionafficher aire(longueur, largeur)correspond àafficher 25.2

Ce qui est bien ce que l'on voulait que notre programme fasse!

3.5

7.2

.

.

.

.

.

.

longueur

largeur

réel

réel

réels: longueur largeurLIRE longueur largeurAFFICHER aire(longueur, largeur)

Retour dans la fonction principale

Page 44: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 3

É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.

Page 45: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 3

Fonction principale 1

deux entiers: x, y

LIRE x, yAFFICHER x, yAFFICHER y, x

Ne satisfait pas la description du problème

Page 46: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 3Fonction principale 2

deux entiers : x, y

LIRE x, yAFFICHER x, yéchanger (x, y)AFFICHER x, y

où échanger est une fonction dont le prototype est:

échanger (entier, entier)

Remarque: la fonction échanger ne retourne aucune valeur.

Page 47: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 3

Définition 1 de échanger

En-tête:échanger (entier a, entier b)

Corps:a bb a

Page 48: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 3

Pas-à-pas

Entrée: 10 15

entier x, yLIRE x, y

10

15

.

.

.

.

.

.

x

y

entier

entier

Page 49: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 3

AFFICHER x, yéchanger (x, y)

10

10

15

15

.

.

.

.

.

.

x

y

entier

entier

ab entier

entier

échanger (entier a, entier b) a b b a

Page 50: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 3

échanger (entier a, entier b) a b b a

10

15

15

15

.

.

.

.

.

.

x

y

entier

entier

ab entier

entier

On exécute d’abord

a b

Page 51: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 3

échanger (entier a, entier b) a b b a

10

15

15

15

.

.

.

.

.

.

x

y

entier

entier

ab entier

entier

Puis on exécute

b a

Problème!!!

Page 52: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Définition 2 de échanger

En-tête: échanger (entier a, entier b)

Corps: entier : tmp

tmp a a b b tmp

Étude de cas 3

10

10

15

15

.

.

.

.

.

.

x

y

entier

entier

ab entier

entier

Page 53: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 3

10

10

15

15

.

.

.

.

.

.

x

y

entier

entier

ab entier

entier

tmp entier

entier tmp

tmp aa bb tmp

entier: tmp

Page 54: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

entier tmp

tmp aa bb tmp

Étude de cas 3

10

10

15

10

15

.

.

.

.

.

.

x

y

entier

entier

ab entier

entier

tmp a entiertmp

Page 55: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

entier tmp

tmp aa bb tmp

Étude de cas 3

10

15

15

10

15

.

.

.

.

.

.

x

y

entier

entier

ab

entier

entier

a btmp

entier

Page 56: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

entier tmp

tmp aa bb tmp

Étude de cas 3

10

15

15

10

10

.

.

.

.

.

.

x

y

entier

entier

ab

entier

entier

b tmp

tmp

entier

Page 57: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 3

10

15

.

.

.

.

.

.

x

y

entier

entierÉtat de la mémoire au retour de la fonction échanger :

On a échangé le contenu des variables a et b mais pas celui des variable x et y!!!

Page 58: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 3Définition 3 de échanger

En-tête:échanger (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

tmp = aa = bb = tmp

Page 59: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 3

.

.

.

.

.

.

paramètres passés par copie

paramètres formels: a, b

paramètres d'appel: x, y

x

a

b

y

Page 60: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 3

.

.

.

.

.

.

paramètres passés par référence

paramètres formels: a, b

paramètres d'appel: x, y

a x

b y

Page 61: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 3

Pas-à-pas

Entrée: 10 15

entiers : x, yLIRE x, y

AFFICHER x yéchanger(x, y)AFFICHER x y

10

15

.

.

.

.

.

.

x

y

entier

entier

Page 62: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 3

Entiers : x, yLIRE x, y

AFFICHER x, yéchanger (x, y)

AFFICHER x, y

10

15

.

.

.

.

.

.

a x

b y

entier

entier

Page 63: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

entier tmp

tmp aa bb tmp

Étude de cas 3

entier: tmp

10

15

.

.

.

.

.

.

a x

b y

entier

entier

tmp entier

Dans echanger

Page 64: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

entier: tmp

tmp aa bb tmp

Étude de cas 3

tmp a

10

10

15

.

.

.

.

.

.

a x

b y

entier

entier

tmp entier

Dans echanger

Page 65: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

entier: tmp

tmp aa bb tmp

Étude de cas 3

a b

15

10

15

.

.

.

.

.

.

a x

b y

entier

entier

tmp entier

Dans echanger

Page 66: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

entier: tmp

tmp aa bb tmp

Étude de cas 3

b tmp

15

10

10

.

.

.

.

.

.

a x

b y

entier

entier

tmp entier

Dans echanger

Page 67: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Retour à la fonction principale

entiers: x y

LIRE x yAFFICHER x yéchanger(x, y)AFFICHER x y

Ce qui donne bien le résultat souhaité.

Étude de cas 3

15

10

.

.

.

.

.

.

a x

b y

entier

entier

Page 68: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Résumé

• Utilisations 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

Les trois études de cas précédentes ont servi à illustrer les concepts suivants:

Page 69: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Définition des fonctions

Dans la plupart des langage de programmation, la définition d'une fonction comporte deux parties:l'en-tête et le corps.

En-tête

Nom de la fonctionType de la valeur retournéeNom des paramètresTypes des paramètres{

Corps Déclaration des variablesInstructions

Page 70: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Les paramètres

Paramètres formels: Ceux utilisés dans la définition.

Paramètres d’appel: Ceux utilisés lors de l’appel.

Page 71: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

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

Les prototypes de fonctions

Bien sur, pour utiliser une fonction il n’est pas nécessaire de connaître le nom de ses paramètres formels.

Page 72: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

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.

Page 73: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

L'appel de fonctions

• Créations 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 fonction 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.

Page 74: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

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.

Page 75: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1: version C/C++trois entiers : nombre1, nombre2, nombre3réel : moyenne

LIRE nombre1, nombre2, nombre3moyenne moyenne3 (nombre1, nombre2, nombre3)AFFICHER moyenne

#include <iostream>int moyenne3 (int, int, int);int main(){ int nombre1, nombre2, nombre3; int moyenne;

std::cin >> nombre1 >> nombre2 >> nombre3; moyenne = moyenne3 (nombre1, nombre2, nombre3); std::cout << moyenne; return 0;}

Page 76: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 1: version C/C++

En-tête: moyenne3 ( entier a, entier b, entier c) retourne un réel

Corps:réel mm (a + b + c) / 3RETOURNER m

double moyenne3 (int a, int b, int c){ double m; m = (a + b + c) / 3.0; return m;}

Page 77: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 2: version C/C++deux réels : longueur largeur

LIRE longueur largeurAFFICHER aire(longueur, largeur)

#include <iostream>double aire (double, double);int main(){ double longueur, largeur;

std::cin >> longueur >> largeur; std::cout << aire(longueur, largeur); return 0;}

Page 78: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 2: version C/C++

En-tête:aire(réel longueur, réel largeur) retourne un réel

Corps:RETOURNER longueur * largeur

double aire (double longueur, double largeur){ return longueur * largeur;}

Page 79: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 3: version C/C++deux entiers : x, y

LIRE x, yAFFICHER x, yéchanger(x, y)AFFICHER x, y

#include <iostream>void echanger(int &, int &);int main(){ int x, y;

std::cin >> x >> y; std::cout << x << y; echanger(x, y); std::cout << x << y; return 0;}

Page 80: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Étude de cas 3: version C/C++En-tête:

échanger (entier référence a, entier référence b)Corps:

entier tmp

tmp aa bb tmp

void echanger(int &a, int &b){ int tmp;

tmp = a; a = b; b = tmp;}

Page 81: 8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux

Remarque

•En C++, le symbole & sert à indiquer qu'un paramètre est passé par référence.

•Il est utilisé dans l’en-tête de la définition ainsi que dans le prototype.

•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.