Académique Documents
Professionnel Documents
Culture Documents
Définition
Une fonction est un groupe d’instructions qui exécutent ensemble une tâche. Chaque programme C
++ a au moins une fonction, qui est main, et tout programme peut définir des fonctions
supplémentaires.
Ainsi main est une fonction, et sa syntaxe pourra servir de modèle pour écrire de nouvelles fonctions.
Sin(x) est aussi une fonction, il faut inclure dans le programme la bibliothèque cmath pour qu’elle soit définie
L’utilisateur peut écrire ses propres fonctions comme la fonction polynôme par exemple.
Il ne faut pas confondre le sens du mot fonction en mathématique et son sens en C++. Son sens est plus large
en C++.Toutes les fonctions mathématiques connues sont groupées d’ores et déjà dans la bibliothèque
« cmath ». Mais bien plus, tout groupe d’instructions qui exécutent ensemble une tache peut former une
fonction. Une fonction est équivalente à un sous-programme, une procédure, un module ou une méthode d’un
point de vue lexical.
Diagramme schématique
De façon schématique, une fonction peut être représentée par une boite ou un mécanisme (constitué
d’un groupe d’instructions) qui produit un résultat à partir d'une ou plusieurs données.
(ENTRÉE) (SORTIE)
Arguments ou Valeur de
Paramètres Retour
A l’entrée de la fonction :
Des données peuvent êtres requises ou non, cela dépend de la tâche à effectuer.
Ces données sont appelées des arguments ou paramètres de la fonction.
A la sortie de la fonction :
Un résultat unique peut être rendu ou non. Quand résultat il y a, il est appelé valeur de retour de
la fonction. Les fonctions qui n’ont pas de valeur de retour sont appelées des procédures.
Les fonctions peuvent produire d’autres résultats en dehors de la valeur de retour par effet de
bord (side effects) ; c.-à-d. que pendant l’exécution de la fonction certaines données du
programme sont affectées directement par celle-ci. Les arguments de la fonction dans ce cas sont
de type pointeur ou référence. Une fonction peut également consigner des résultats dans des
fichiers ; ceux-ci peuvent être ouverts et consultés ailleurs dans le programme. Etc.
La réponse est :
x: argument
int main()
{ double poly(double x)
double x=1; {
main cout << poly(0.5); double y; poly
cout << poly( x ); y = 2*x*x-10*x+3;
return 0; return y;
} }
y: valeur de
retour
La fonction main contient les instructions : cout << poly(0.5); et cout << poly(x); qui
constituent des appels de la fonction poly, tout en donnant une valeur effective à l’argument : 0.5
pour le 1e appel et x (valant 1) pour le 2e.
La fonction poly prend comme argument un ‘double’ nommé x, dont elle se sert pour calculer y, un
‘double’ aussi. La valeur de retour est y.
La valeur retournée (-1.5 pour le 1e appel et -5 pour le 2e) sera affichée à l’instruction cout dans la
fonction main.
A la compilation tous les mots utilisés doivent être soit des mots-clefs, soit des mots définis dans des
bibliothèques comme iostream. Le mot poly n’est ni l’un ni l’autre. Il se trouve que sa définition est
l’ensemble d’instruction ci-dessus.
Pour que la fonction main ait connaissance de la définition du mot poly avant de l’utiliser, une des
façons de procéder serait de placer cette définition avant main comme suit :
#include<iostream>
#include<iomanip>
double poly(double x)
{
double y;
y = 2*x*x-10*x+3;
return (y);
}
int main()
{
double x=1;
cout << poly(0.5);
cout << poly( x );
return 0;
}
Ainsi, dans le sens de la lecture, le programme aura connaissance de ce qu’est « poly » avant que ce
mot n’apparaisse dans « main » dans l’instruction :
cout << poly(0.5);
Cette instruction constitue « l’appel de la fonction » avec passation d’une valeur effective de
l’argument x.
L’expression poly(x) possède une valeur. Elle est le résultat de l’exécution des instructions de la
fonction poly jusqu’à l’instruction return. La valeur retournée est la valeur de la fonction.
Exemples de fonctions.
Exemple 1 : Foncions qui retourne le plus grand de deux nombre.
#include<iostream>
using namespace std;
int main()
{
int a,b;
cout << "entrer a et b : ";
cin >> a >> b;
cout << "le plus grand est : " << plusGrand(a,b);
return 0;
}
bool estPremier(int a)
{
int compt, i;
for(i=1,compt=0;i<=a;i++)
if(a%i==0)
compt++;
if (compt>2) return false;
else return true;
}
int main()
{
int a;
cout << "entrer a : ";
cin >> a ;
if(estPremier(a))
cout << a << " est premier ";
else
cout << a << " n'est pas premier ";
return 0;
}
void cielBleu(void)
{
cout << "Le ciel est bleu !";
}
int main()
{
cielBleu();
return 0;
}
1. un même fichier.
a. avant la fonction principale main.
b. après elle.
2. des fichiers séparés.
int main()
{
int a,b;
cout << "entrer a et b : ";
cin >> a >> b;
cout << "le plus grand est : " << plusGrand(a,b);
return 0;
}
La définition de plusGrand est placée avant toute utilisation qui en sera faite dans la fonction
principale. La compilation se déroule normalement.
Fonction dans un même fichier mais après la fonction main
Si la fonction est placée après la fonction main, il faut faire une déclaration pour préciser le sens
du mot plusGrand pour main. Cette déclaration se fait au moyen d’une instruction, qui est l’entête de
la fonction :
int plusGrand(int a,int b) ;
Cette instruction (noter la présence de ;) est une déclaration de plusGrand, elle précise son type, ses
arguments et leurs types. Les noms des arguments a et b ne sont pas utile à ce stade. si bien que l’on
peut simplement écrire :
int plusGrand(int ,int ) ;
int main()
{
int plusGrand(int ,int ) ;
int a,b;
cout << "entrer a et b : ";
cin >> a >> b;
cout << "le plus grand est : " << plusGrand(a,b);
return 0;
}
Pour appliquer cette méthode a l’exemple précèdent, on commence par créer deux fichiers séparés,
un pour main et l’autre pour la fonction. On leur donne les noms fichierPrincipal.cpp et
fichierFonction.cpp et on les place dans un même dossier.
Notez aussi que l’operateur < > est remplacé par celui-ci " ".
Et si les 2 fichiers n’étaient pas dans le même dossier il faudrait mettre le chemin absolu jusqu’au
fichier de la fonction en commençant depuis la racine C ou D comme ceci :
#include"C:/dossier1/dossier2/…/fichierFonction.cpp"
Pour illustrer ce cas, on considère deux variables de type int ; et on écrit une fonction qui permet
d’échanger leurs valeurs. On l’appelle depuis main.
#include <iostream>
using namespace std ;
int main()
{
void echange(int a, int b) ;
int n=10, p=20 ;
cout << "\nDans Main (avant appel): " << n << '\t' << p << endl ;
echange(n, p) ;
cout << "\nDans Main (apres appel): " << n << '\t' << p << endl ;
return(0);
}
#include <iostream>
using namespace std ;
int main()
{
void echange(int &a, int &b) ;
int n=10, p=20 ;
cout << "\nDans Main (avant appel): " << n << '\t' << p << endl ;
echange(n, p) ;
cout << "\nDans Main (apres appel): " << n << '\t' << p << endl ;
return(0);
}
int main()
{
void echange(int *a, int *b) ;
int n=10, p=20 ;
cout << "\nDans Main (avant appel): " << n << '\t' << p << endl ;
echange(&n, &p) ;
cout << "\nDans Main (apres appel): " << n << '\t' << p << endl ;
return(0);
}
main ( )
{
double rayon, equateur, surface, volume;
cout << " rayon = " ;
cin >> rayon ;
dataSphere ( rayon, equateur, surface, volume);
cout << " equateur = " << equateur << endl ;
cout << " surface = " << surface << endl ;
cout << " volume = " << volume << endl ;
}
rayon = 1
equateur = 6.28319
surface = 12.5664
volume = 4.18879
Dans cet exemple on considère un tableau dont il faut calculer la valeur moyenne et remettre à zéro
ses éléments tout en affichant les résultats.
#include<iostream>
using namespace std;
int main(void)
{
void affichage(float *t,int n);
void raz(float *t, int n);
float moyenTab(float *t, int n);
int n=5;
float tab[5] = {4.0, 1.6, 2.5, 3.6, 4.9};
return 0;
}