8PRO100 - PowerPoint PPT Presentation

About This Presentation
Title:

8PRO100

Description:

On distingue les op rateurs de base des op rateurs complexe, construits partir des op rateurs de base, en appelant ces derniers fonctions. ... – PowerPoint PPT presentation

Number of Views:28
Avg rating:3.0/5.0
Slides: 82
Provided by: franois85
Category:
Tags: 8pro100 | appelant

less

Transcript and Presenter's Notes

Title: 8PRO100


1
8PRO100
Éléments de programmation
Les fonctions
2
La bibliothèque standard du C
Il y a peu d'opérateurs arithmétiques en 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
complexe, construits à partir des opérateurs de
base, en appelant ces derniers  fonctions. La
plupart des environnements supportants le C
standard disposent d'une large collection de
fonctions appelée bibliothèque standard.
3
Exemple math.h
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
ltmath.hgt Il est alors possible d'employer des
fonctions telles que cos(x) cosinus de
x pow(x,y) x à la puissance y sqrt(x) racine
carrée de x ldexp(x,n) et plusieurs autres.
4
Exemple cos(x)
include ltiostream.hgt include
ltmath.hgt main() double x cin gtgt x cout ltlt
cos(x)
5
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.
6
Exemple sqrt(x)
include ltiostream.hgt include
ltmath.hgt main() double a, b, c double
racine1, racine2 double tmp cingtgtagtgtbgtgtc tmp
sqrt(bb - 4ac) racine1 ( -b - tmp) /
(2a) racine2 ( -b tmp) /
(2a) coutltltracine1ltltendlltltracine2ltltendl
7
Exemple ldexp(x,n)
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) retourne ldexp(1, 1.1) retourne
Pourquoi???
8
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.

9
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 que
ldexp est une fonction à deux paramètres (un
double et un int) qui retourne un double.
10
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?
11
Exemple pow(x,y)
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 expression en
un autre type. (type) expression
12
Exemple pow(x,y)
Remarque On voit ici une différence fondamentale
entre le pseudocode et un vrai language de
programmation tel que le C. En pseudocode, on
n'a pas a 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.
13
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
14
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.

Nom de la fonction Type de la valeur
retournée Nom des paramètres Types des paramètres
En-tête

Déclaration des variables Instructions
Corps
15
Étude de cas 4.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.
16
Étude de cas 4.1
Calcul de la moyenne Supposons l'existence d'une
fonction ayant le prototype suivant moyenne3(ent
ier, entier, entier) retourne un réel
17
Étude de cas 4.1
Fonction principale Entiers nombre1 nombre2
nombre3 Réel moyenne lire nombre1 nombre2
nombre3 moyenne moyenne3(nombre1, nombre2,
nombre3) afficher moyenne
18
Étude de cas 4.1
Définition de la fonction moyenne3 En-tête
moyenne3( entier a, entier b, entier c)
retourne un réel Corps entier m m (a b
c) / 3 retourner m
19
Étude de cas 4.1
Définition de la fonction moyenne3 En-tête
moyenne3( entier a, entier b, entier c)
retourne un réel 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.
20
Étude de cas 4.1
Pas-à-pas Vérifions le comportement de notre
algorithme sur l'exemple suivant 67 86 79
nombre1
entier
nombre2
entier
nombre3
entier
moyenne
réel
Après les déclaration suivantes Entiers
nombre1 nombre2 nombre3 Réel moyenne l'état de
la mémoire correspond à la figure de droite.
. . .
. . .
21
Étude de cas 4.1
67
nombre1
entier
86
nombre2
entier
79
nombre3
entier
moyenne
réel
lire nombre1 nombre2 nombre3
. . .
. . .
22
Étude de cas 4.1
L'analyse de l'instruction moyenne
moyenne3(nombre1, nombre2, nombre3) est plus
compliquée. On doit d'abord évaluer
l'expression moyenne3(nombre1, nombre2,
nombre3) Pour ce faire, il faut remplacer les
variables par leur valeur respective moyenne3(67
, 86, 79) Puis, la fonction moyenne3 est appelée.
23
Étude de cas 4.1
Appel 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 tels
qu'indiqué dans l'en-tête.
moyenne3(nombre1, nombre2, nombre3) moyenne3(
67 , 86 , 79
) moyenne3( a , b ,
c )
24
Étude de cas 4.1
67
nombre1
entier
86
nombre2
entier
79
nombre3
entier
moyenne
réel
Ainsi après lappel de moyenne3(67, 86,
79) l'état de la mémoire devient
67
entier
a
86
entier
b
79
c
entier
. . .
. . .
25
Étude de cas 4.1
Exécution du corps de moyenne3 réel m m (a
b c) / 3 retourner m D 'abord, la
déclaration réel m
67
nombre1
entier
86
nombre2
entier
79
nombre3
entier
moyenne
réel
67
a
entier
86
entier
b
79
c
entier
m
réel
. . .
. . .
26
Étude de cas 4.1
Exécution du corps de moyenne3 réel m m (a
b c) / 3 retourner m Puis l'évaluation de
l'expression (a b c) / 3 (67 86 79)
/ 3 (153 79) / 3 232 / 3 77.33
67
nombre1
entier
86
nombre2
entier
79
nombre3
entier
moyenne
réel
67
a
entier
86
entier
b
79
c
entier
m
réel
. . .
. . .
27
Étude de cas 4.1
Exécution du corps de moyenne3 entier m m (a
b c) / 3 retourner m Et l'assignation m
77.33
67
nombre1
entier
86
nombre2
entier
79
nombre3
entier
moyenne
réel
67
a
entier
86
entier
b
79
c
entier
77.33
m
réel
. . .
. . .
28
Étude de cas 4.1
Exécution du corps de moyenne3 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
nombre1
entier
86
nombre2
entier
79
nombre3
entier
moyenne
réel
67
a
entier
86
entier
b
79
c
entier
77.33
m
réel
. . .
. . .
29
Étude de cas 4.1
67
nombre1
entier
86
nombre2
entier
Au sortir dune fonction, toutes les variables
qui y ont été déclarées ainsi que toutes les
variables contenants les paramètres
disparaissent.
79
nombre3
entier
moyenne
réel
. . .
. . .
30
Étude de cas 4.1
Retour à la fonction principale lire nombre1
nombre2 nombre3 moyenne 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.
31
Étude de cas 4.1
67
nombre1
entier
La prochaine instruction à être exécutée est
donc moyenne 77.33
86
nombre2
entier
79
nombre3
entier
77.33
moyenne
réel
Finalement, l'instruction afficher moyenne est
exécutée
. . .
. . .
32
Étude de cas 4.2
Calcul de laire d'un rectangle Description du
problème Calculer et afficher laire 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 laire du rectangle.
33
Étude de cas 4.2
Fonction principale réels longueur
largeur lire longueur largeur afficher
aire(longueur, largeur) où aire est une fonction
dont le prototype est aire(réel, réel) retourne
un réel
34
Étude de cas 4.2
Définition de aire En-tête réel aire(réel
longueur, réel largeur) Corps retourner
longueur largeur
35
Étude de cas 4.2
Pas-à-pas Vérifions le comportement de notre
algorithme sur l'exemple suivant 3.5 7.2
longueur
réel
réel
largeur
Après les déclaration suivantes réel longueur
largeur létat de la mémoire correspond à la
figure de droite.
. . .
. . .
36
Étude de cas 4.2
longueur
réel
3.5
7.2
réel
largeur
lire longueur largeur
. . .
. . .
37
Étude de cas 4.2
longueur
réel
3.5
écrire aire(longueur, largeur) Dabord il faut
évaluer aire(longueur, largeur) On appelle donc
la fonction aire.
7.2
réel
largeur
. . .
. . .
38
Étude de cas 4.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 ces noms et contenant
les mêmes valeurs sont créées.
longueur
réel
3.5
7.2
réel
largeur
3.5
longueur
réel
7.2
largeur
réel
. . .
. . .
39
Étude de cas 4.2
longueur
réel
3.5
Les instructions du corps sont ensuite
exécutées. retourner longueur largeur
retourner 3.5 7.2 retourner 25.2
7.2
réel
largeur
3.5
longueur
réel
7.2
largeur
réel
. . .
. . .
40
Étude de cas 4.2
longueur
réel
3.5
Les instructions du corps sont ensuite
exécutées. retourner longueur largeur
retourner 3.5 7.2 retourner 25.2
7.2
réel
largeur
3.5
longueur
réel
7.2
largeur
réel
. . .
. . .
Comment savoir à quelle case mémoire longueur et
largeur correspondent?
41
Étude de cas 4.2
Déclarés et visibles seulement dans la fonction
principale
longueur
réel
3.5
7.2
réel
largeur
3.5
longueur
réel
Déclarés et visibles seulement dans la fonction
aire
7.2
largeur
réel
. . .
. . .
Une variable déclarée dans une fonction nest
visible que dans cette fonction.
42
Étude de cas 4.2
Au retour de la fonction, les variables qui y ont
été créées disparaissent. L'expression aire(3.5
, 7.2) vaut la valeur retournée, c'est-à-dire
25.2.
longueur
réel
3.5
7.2
réel
largeur
. . .
. . .
43
Étude de cas 4.2
Retour dans la fonction principale
réels longueur largeur lire longueur
largeur afficher aire(longueur, largeur)
longueur
réel
3.5
7.2
réel
largeur
L'instruction afficher aire(longueur,
largeur) correspond à afficher 25.2 Ce qui est
bien ce que l'on voulait que notre programme
fasse!
. . .
. . .
44
Étude de cas 4.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.
45
Étude de cas 4.3
Fonction principale 1 deux entiers x y lire x
y afficher x y afficher y x
Ne satisfait pas la description du problème
46
Étude de cas 4.3
Fonction principale 2 deux entiers x y lire x
y afficher 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.
47
Étude de cas 4.3
Définition 1 de échanger En-tête échanger(entie
r a, entier b) Corps a b b a
48
Étude de cas 4.3
10
x
entier
Pas-à-pas Entrée 10 15 entier x y lire x y
15
y
entier
. . .
. . .
49
Étude de cas 4.3
afficher x y échanger(x, y)
10
x
entier
15
y
entier
10
a
entier
b
15
entier
échanger(entier a, entier b) a b b
a
. . .
. . .
50
Étude de cas 4.3
échanger(entier a, entier b) a b b
a
10
x
entier
15
y
entier
15
a
entier
b
15
entier
. . .
. . .
On exécute d abord a b
51
Étude de cas 4.3
échanger(entier a, entier b) a b b
a
10
x
entier
15
y
entier
15
a
entier
b
15
entier
Puis on exécute b a Problème!!!
. . .
. . .
52
Étude de cas 4.3
Définition 2 de échanger En-tête
échanger(entier a, entier b) Corps entier
tmp tmp a a b b tmp
10
x
entier
15
y
entier
10
a
entier
b
15
entier
. . .
. . .
53
Étude de cas 4.3
10
x
entier
15
y
entier
entier tmp tmp a a b b tmp
entier tmp
10
a
entier
b
15
entier
entier
tmp
. . .
. . .
54
Étude de cas 4.3
10
x
entier
15
y
entier
entier tmp tmp a a b b tmp
10
a
entier
b
15
entier
tmp a
tmp
10
entier
. . .
. . .
55
Étude de cas 4.3
10
x
entier
15
y
entier
entier tmp tmp a a b b tmp
15
a
entier
b
15
entier
tmp
10
entier
a b
. . .
. . .
56
Étude de cas 4.3
10
x
entier
15
y
entier
entier tmp tmp a a b b tmp
15
a
entier
b
10
entier
tmp
10
entier
. . .
. . .
b tmp
57
Étude de cas 4.3
10
x
entier
15
y
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!!!
. . .
. . .
58
Étude de cas 4.3
Définition 3 de échanger En-tête échanger(entie
r 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 dappel. Corps entier tmp tmp
a a b b tmp
59
Étude de cas 4.3
x
paramètres passés par copie paramètres formels
a, b paramètres d'appel x, y
y
a
b
. . .
. . .
60
Étude de cas 4.3
a º x
paramètres passés par référence paramètres
formels a, b paramètres d'appel x, y
b º y
. . .
. . .
61
Étude de cas 4.3
Pas-à-pas Entrée 10 15 entiers x y lire x
y afficher x y échanger(x, y) afficher x y
10
x
entier
15
y
entier
. . .
. . .
62
Étude de cas 4.3
10
a º x
entier
entiers x y lire x y afficher x y échanger(x,
y) afficher x y
b º y
15
entier
. . .
. . .
63
Étude de cas 4.3
Dans echanger
10
a º x
entier
b º y
15
entier
entier tmp tmp a a b b tmp
entier tmp
tmp
entier
. . .
. . .
64
Étude de cas 4.3
Dans echanger
10
a º x
entier
b º y
15
entier
entier tmp tmp a a b b tmp
10
tmp
entier
tmp a
. . .
. . .
65
Étude de cas 4.3
Dans echanger
15
a º x
entier
b º y
15
entier
entier tmp tmp a a b b tmp
10
tmp
entier
a b
. . .
. . .
66
Étude de cas 4.3
Dans echanger
15
a º x
entier
b º y
10
entier
entier tmp tmp a a b b tmp
10
tmp
entier
. . .
. . .
b tmp
67
Étude de cas 4.3
Retour à la fonction principale entiers x
y lire x y afficher x y échanger(x, y) afficher
x y Ce qui donne bien le résultat souhaité.
15
a º x
entier
b º y
10
entier
. . .
. . .
68
Résumé
Les trois études de cas précédents ont servi à
illustrer les concepts suivants
  • 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

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

Nom de la fonction Type de la valeur
retournée Nom des paramètres Types des paramètres
En-tête

Déclaration des variables Instructions
Corps
70
Les paramètres
Paramètres formels Ceux utilisés dans la
définition. Paramètres dappel Ceux utilisés
lors de lappel.
71
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 sur, pour utiliser une fonction il nest pas
nécessaire de connaître le nom de ses paramètres
formels.
72
Passage de paramètres
Par copie Les paramètres dappel 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
dappel plusieurs noms pour une
même case mémoire.
73
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.

74
Retour d'une fonction
  • À l'intérieur d'une fonction, l'instruction
  • retourner expression
  • est exécutée de la façon suivante
  • Lexpression 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.

75
Étude de cas 4.1 version C
trois entiers nombre1 nombre2 nombre3 réel
moyenne lire nombre1 nombre2 nombre3 moyenne
moyenne3(nombre1, nombre2, nombre3) afficher
moyenne
include ltiostream.hgt int moyenne3(int, int,
int) main() int nombre1, nombre2, nombre3
int moyenne cin gtgt nombre1 gtgt nombre2 gtgt
nombre3 moyenne moyenne3(nombre1, nombre2,
nombre3) cout ltlt moyenne
76
Étude de cas 4.1 version C
En-tête moyenne3( entier a, entier b, entier
c) retourne un réel Corps réel m m (a b
c) / 3 retourner m
float moyenne3(int a, int b, int c) float m
m (a b c) / 3.0 return m
77
Étude de cas 4.2 version C
deux réels longueur largeur lire longueur
largeur afficher aire(longueur, largeur)
include ltiostream.hgt double aire(double,
double) main() double longueur, largeur
cin gtgt longueur gtgt largeur cout ltlt
aire(longueur, largeur)
78
Étude de cas 4.2 version 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
79
Étude de cas 4.3 version C
deux entiers x y lire x y afficher x
y échanger(x, y) afficher x y
include ltiostream.hgt void echanger(int , int
) main() int x, y cin gtgt x gtgt y cout
ltlt x ltlt y echanger(x, y) cout ltlt x ltlt y
80
Étude de cas 4.3 version C
En-tête échanger(entier référence a, entier
référence b) Corps entier tmp tmp a a
b b tmp
void echanger(int a, int b) int tmp tmp
a a b b tmp
81
Remarque
  • En C le symbole sert à indiquer qu'un
    paramètre est passé par référence.
  • Il est utilisé dans len-tête de la définition
    ainsi que dans le prototype.
  • Il n'est pas utilisé lors de lappel de la
    fonction.
  • En C il ny 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.
Write a Comment
User Comments (0)
About PowerShow.com