Choisissez votre style : colorisé, impression

Série 5  (Niveau 0):
Fonctions

Exercice 0 : reprise de l'exemple du cours (fonctions, niveau 0)

Cet exercice est disponible en page 27 de l'ouvrage C++ par la pratique

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 à peu près à 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 obligatoires 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 ;-))


Solution

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.


Solution

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


Conclusion

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;
}

Retour à la série
Dernière mise à jour : $Date: 2014/10/07 17:35:03 $ ($Revision: 1.6 $)