Le but de cet exercice est de reprendre l'exemple du cours illustrant l'utilisation de fonctions.
Commencez comme d'habitude par ouvrir un nouveau fichier, par exemple ici moyenne.cc dans votre éditeur favori (par exemple Emacs), puis préparez la « coquille vide » de base de votre programme :
#include <iostream> using namespace std; int main() { return 0; }
Écrivez maintenant dans le main, les instructions nécessaires pour demander 2 notes à l'utilisateur et afficher la moyenne
Essayez de le faire par vous même sans regarder la solution ci-dessous
Solution :
La façon que nous avions jusqu'ici de réaliser un tel programme ressemble à peut prêt à ceci :
#include <iostream> using namespace std; int main () { double note1, note2; cout << "Entrez vos deux notes :" << endl; cin >> note1 >> note2; cout << "Votre moyenne est : " << (note1 + note2)/2.0 << endl; return 0; }
Vous avez peut être utilisé des int au lieu des double ici. C'est très bien : cela va aussi.
Cela signifie juste que pour vous une note est un nombre entier, alors que pour moi elle peut être non entière (demi-point).
Notez que les parenthèses lors du calcul de la moyenne sont obligatoire puisque la division est prioritaire sur l'addition.
De plus, dans le cas où les notes sont des entiers, il
est recommandé de diviser par 2.0
plutôt que par 2, pour assurer que le résultat sera
un double et non pas un entier !
Revoir si nécessaire le cours sur les opérateurs, si vous ne comprennez pas cette remarque.
Continuons l'exercice pour maintenant introduire des fonctions
Imaginons que ce programme rudimentaire soit amené à grandir et à être appliqué au calcul de plusieurs moyennes différentes (dans ce même programme).
Il peut alors être judicieux de sortir le calcul de la moyenne du corps de la fonction main, de manière à ce qu'il puisse être réutilisé par d'autres parties du programme.
Nous voulons donc définir une fonction qui prenne deux
doubles comme paramètres, et retourne le résultat sous
forme de double.
Quel est alors le prototype de cette fonction ?
(sans regarder ;-))
Le prototype de cette fonction est le suivant :
double moyenne (double, double);
Notez que l'on peut (mais on n'est pas obligé) dans le prototype donner un nom aux arguments. Par exemple ici :
double moyenne (double nombre1, double nombre2);
Par contre on doit absolument donner ces noms dans la définition de la fonction (qui va suivre).
Écrivez maintenant la définition de cette fonction, c'est à dire décrivez dans son corps ce qu'elle doit faire.
La définition est à peine plus compliquée que le prototype. Il suffit en effet ici de recopier 1 ligne de notre code d'origine.
Le corps de la fonction calcule la moyenne des paramètres, et retourne le résultat du calcul. Bien que les deux solutions ci-dessous soit équivalentes, nous préférerons la deuxième qui est plus courte et plus efficace :
// solution 1 double moyenne (double nombre1, double nombre2) { // declaration et initialisation d'une variable double moy((nombre1 + nombre2) / 2.0); // la fonction renvoie la valeur de la variable moy return moy; }
// solution 2 double moyenne (double nombre1, double nombre2) { // la fonction renvoie directement la valeur // il n'est pas nécessaire d'utiliser une variable intermédiaire return (nombre1 + nombre2) / 2.0; }
Notez qu'utiliser les mêmes noms de paramètres pour le prototype et pour la définition, n'est pas obligatoire. Nous le recommendons cepedant pour plus de clareté.
Il nous reste plus maintenant qu'à assembler les morceaux, c'est-à-dire faire appel à la fonction dans le programme principal main.
Cela se fait simplement en mettant le nom de la fonction à appeler avec les paramètres voulus à l'endroit où l'on veut utiliser la valeur qu'elle retourne. Par exemple ici :
cout << "Votre moyenne est : " << moyenne(note1, note2) << endl;
Souvenez-vous qu'une fonction doit avoir été prototypée
avant de pouvoir être utilisée. Comme nous voulons
utiliser cette fonction à l'intérieur de la fonction main() ; le prototype doit donce apparaître
avant celle-ci dans le fichier. La définition par contre
peut se trouver n'importe où après le
prototype.
On arrive donc au résultat :
#include <iostream> using namespace std; // prototype double moyenne (double nombre1, double nombre2); int main() { double note1, note2; cout << "Entrez vos deux notes :" << endl; cin >> note1 >> note2; cout << "Votre moyenne est : " << moyenne(note1, note2) << endl; return 0; } // définition double moyenne(double nombre1, double nombre2) { return (nombre1 + nombre2) / 2.0; }