|
Faculté Informatique & Communications
Cours d'informatique
|
Mini-Référence :
les fonctions en C++
Portée des identificateurs par rapport aux blocs
Les variables déclarées à l'intérieur d'un bloc sont appelées
variables locales au bloc.
Les variables déclarées en dehors de tout bloc
sont appelées variables globales.
Il est possible de déclarer, à l'intérieur d'un bloc, une variable ou
une constante avec un identificateur déjà utilisé pour une entité
externe au bloc (i.e. une autre variable, constante, fonction,...).
On se trouve alors avec deux variables qui portent le même
nom. Dans ce cas, la variable globale (externe) est
masquée par la variable locale, entre l'instant/le lieu de sa
déclaration et la fin du bloc dans lequel s'est faite cette
déclaration. Pendant toute la durée de vie (i.e. la
portée) de la variable locale, il n'est plus possible de référencer la
variable globale (Cela n'est toutefois pas tout à fait
exact, il existe bien un moyen mais nous ne le verrons qu'au prochain
semestre.).
Exemple :
#include
int var(1); // variable globale
void main ()
{ // début du bloc 1
int i(2); // variable locale au bloc 1
{ // début du bloc 2
int i(3); // variable locale au bloc 2
const int var(4); // variable locale au bloc 2
cout << "La variable locale"
<< " i vaut : " << i << endl
<< "La constante locale"
<< " var vaut : " << var << endl;
} // fin du bloc 2
cout << "La variable locale"
<< " i vaut : " << i << endl;
cout << "La variable globale"
<< " var vaut : " << var << endl;
} // fin du bloc 1
Résultat :
La variable locale i vaut : 3
La constante locale var vaut : 4
La variable locale i vaut : 2
La variable globale var vaut : 1
Le prototypage de fonctions
La syntaxe du prototype (i.e. de la déclaration) d'une fonction est:
Syntaxe : |
|
type nom ( type1 arg1, ...,
typen argn);
|
où:
-
type est le type de la fonction, c'est-à-dire
le type de la valeur retournée par la fonction
-
typei est le type du ième
argument et
argi son identificateur (au niveau de
la fonction)
Remarques:
- Toute fonction doit être prototypée (i.e. déclarée) avant d'être invoquée.
- Le prototypage d'une fonction se termine par un point-virgule.
Exemple :
double sincard(double x);
Définition de fonctions
La syntaxe de la définition d'une fonction est :
Syntaxe : |
|
type nom ( type1 arg1, ..., typen argn)
{
// corps de la fonction
...
return valeur;
}
|
Le corps de la fonction est un bloc.
Remarques:
-
Dans le cas où la fonction ne retourne rien le type de retour est (par convention)
le type particulier void dans ce cas, la clause
return
est optionnelle, et si elle est malgré tout présente, elle n'est pas suivie d'une valeur de retour.
-
Dans le cas où la fonction n'admet pas d'argument, la liste des
arguments est par convention: (). (Pensez par
exemple à la fonction main).
Exemple:
double sincard(double x)
{
return ( sin(x) / x );
}
Appel des fonctions
La syntaxe d'invocation d'une fonction est :
Syntaxe : |
|
nom ( var1, ...,
varn );
|
Exemple :
//
// Prototypages
//
void titre();
bool divisible (const int a, const int b);
//
// Fonction principale:
// exemple d'invocations
//
void main()
{
const bool res(divisible(5,9)); //exemple d'appel pour une initialisation
titre();
// voir la remarque ci-après pour l'explication de '(cond ? vrai : faux)'
cout << "Test 4 et 2: " << (divisible(4,2) ? "oui" : "non") << endl
<< "Test 4 et 0: " << (divisible(4,0) ? "oui" : "non") << endl
<< "Test 4 et 3: " << (divisible(4,3) ? "oui" : "non") << endl;
}
//
// définition d'une fonction booléenne,
// admettant deux arguments entiers, et vraie dans le cas où la
// division entière est possible, sans reste.
//
bool divisible (const int a, const int b)
{
return ( (b != 0) && (a % b == 0) );
}
//
// Fonction sans argument, et ne retournant rien.
//
void titre ()
{
cout << "Titre de l'exercice" << endl;
cout << "par Mme Pahut" << endl << endl;
}
Résultat :
Titre de l'exercice
par Mme Pahut
Test 4 et 2: oui
Test 4 et 0: non
Test 4 et 3: non
Remarque :
La syntaxe :
( condition ? action1 : action2)
est une forme abrégée de la structure conditionnelle :
if (condition) action1; else action2;
Attention toutefois,action1 et action2 ne correspondent pas à des blocs
d'instructions, mais sont des instructions simples.
Fonctions mathématiques
Pour utiliser les fonctions mathématiques évoluées (logarithme, racine
carrée...), il faut ajouter au début du programme la ligne:
#include <cmath>
Constante définie dans <cmath>:
- M_PI : valeur approchée de pi
Principales fonctions mathématiques de <cmath> :
- sqrt(x) : calcule la racine carrée de x.
- log(x) : calcule le logarithme népérien de x.
- exp(x) : calcule l'exponentielle de x.
- sin(x) : calcule le sinus de x (x en radians)
- cos(x) : calcule le cosinus de x (x en
radians)
- acos(x) : calcule la réciproque du cosinus
(arccosinus, noté parfois cos-1)
- asin(x) : calcule la réciproque du sinus
(arcsinus, noté parfois sin-1)
- pow(x,y): calcule x puissance y (si y n'est pas
entier, x doit être strictement positif)
|
Ces fonctions renvoient des valeurs de type double.
On peut par exemple écrire :
double x; x = sqrt(2.0);
|
Dernière mise à jour :
$Date: 2009-09-11 17:10:52 +0200 (Fri, 11 Sep 2009) $
($Revision: 25 $)
|