Cet exercice est disponible en page 44 de l'ouvrage C++ par la pratique
(page 45 dans la 2e édition).

Exercice 0 : Reprise de l'exemple du cours (structures, niveau 0)

On veut écrire un programme personne.cc qui gère (à l'aide de structures) les données relatives à des personnes.

Cet exercice reprend pas à pas les différentes étapes pour y parvenir.

  1. Ouvrez le fichier (vide) personne.cc dans votre éditeur favori (par exemple emacs) et préparez la « coquille » vide de base accueillant votre programme :
        
    #include <iostream>
    using namespace std;
    
    int main()
    {
    
        return 0;
    }
    
  2. Déclarez un nouveau type, Personne, comme une structure contenant trois champs:

    Remarque : La déclaration d'une structure étant une déclaration de nouveau type (et non pas d'une variable !), elle doit se faire au niveau global du programme, c'est-à-dire avant toute fonction, même le main().

     
    #include <iostream> 
    using namespace std;
    
    // declaration d'une strucutre
    struct Personne{
      double taille;
      int age;
      char sexe;
    }; // <-- ATTENTION ! Ne pas oublier le ;
    
    int main()
    {
    
        return 0;
    }
    
  3. Prototypez la fonction affiche_personne qui aura pour but d'afficher les champ de la structure Personne :
     
    #include <iostream> 
    using namespace std;
    
    //declaration d'une strucutre
    struct Personne{
     ...
    };
    
    void affiche_personne(Personne const& p); //prototype
    
    int main()
    {
    
        return 0;
    }
    

    Notez que nous avons ici choisi l'optimisation (plus efficace) consistant à passer une référence (ce qui évite une copie) constante (car la fonction affiche_personne ne modifie pas cet argument). Mais, dans une version tout aussi juste mais un peu moins efficace, on aurait aussi bien pu écrire :

    void affiche_personne(Personne p);
  4. Définissez maintenant cette fonction (c.-à-d. écrivez son corps). Je vous rappelle que l'on accede à un champ d'une structure avec la syntaxe suivante structure.champ :
    #include <iostream>
    using namespace std;
    ...
    int main()
    {
    
        return 0;
    }
    
    // Affiche les informations d'une personne
    void affiche_personne(Personne const& p){
      cout << "taille : " << p.taille << endl;
      cout << "age : "    << p.age    << endl;
      cout << "sexe : "   << p.sexe   << endl;
    }
    
  5. Prototypez puis définissez les fonctions anniversaire et naissance. La fonction anniversaire va simplement incrémenter le champ age tandis que la fonction naissance va initialiser tous les champs de la structure (avec les données de l'utilisateur via cin.

    Solution :

    #include <iostream>
    using namespace std;
    ...
    void anniversaire(Personne& p);
    Personne naissance();
    
    int main()
    {
    
        return 0;
    }
    ...
    
    // incremente l'age d'une personne
    void anniversaire(Personne& p){
      ++(p.age);
    }
    
    // création d'une personne avec initialisation des champs par l'utilisateur
    Personne naissance() {
      Personne p;
    
      cout << "Saisie d'une nouvelle personne" << endl;
      cout << "    Entrez sa taille:  ";
      cin >> p.taille;
      cout << "    Entrez son age:  ";
      cin >> p.age;
      cout << "    Homme [M] ou Femme [F]:  ";
      cin >> p.sexe;
      return p;
    }
    
    
  6. Il ne reste plus qu'à compléter le main pour utiliser notre structure  :
      
    #include <iostream> 
    using namespace std;
    
    ... // debut comme avant
    
    int main()
    {
    
      // Création et intialisation de la structure
      Personne vincent(naissance()); 
    
      // Affiche les informations concernant la personne 'vincent'
      affiche_personne(vincent);
    
      // incremente l'age de la personne 'vincent'
      anniversaire(vincent);
      
      // Ré-affiche les informations concernant la personne 'vincent'
      affiche_personne(vincent);
    
    
      return 0;
    }
    ... //suite comme avant
    

Cliquez ici pour revenir à la série.

Programme complet :

  
#include <iostream> 
using namespace std;

// declaration d'une strucutre
struct Personne {
  double taille;
  int age;
  char sexe;
};

// prototypes des fonctions
void affiche_personne(Personne const& p); 
void anniversaire(Personne& p);
Personne naissance();

// programme principal
int main()
{
  // Création et intialisation de la structure
  Personne vincent(naissance()); 

  // Affiche les informations concernant la personne 'vincent'
  affiche_personne(vincent);

  // Incremente l'age de la personne 'vincent'
  anniversaire(vincent);
  
  // Ré-affiche les informations concernant la personne 'vincent'
  affiche_personne(vincent);

  return 0;
}

// Définition des fonctions

// Affiche les informations d'une personne
void affiche_personne(Personne const& p){
  cout << "taille : " << p.taille << endl;
  cout << "age : "    << p.age    << endl;
  cout << "sexe : "   << p.sexe   << endl;
}

// Incremente l'age d'une personne
void anniversaire(Personne& p){
  ++(p.age);
}

// Création d'une personne avec initialisation des champs par l'utilisateur
Personne naissance() {
  Personne p;

  cout << "Saisie d'une nouvelle personne" << endl;
  cout << "    Entrez sa taille:  ";
  cin >> p.taille;
  cout << "    Entrez son age:  ";
  cin >> p.age;
  cout << "    Homme [M] ou Femme [F]:  ";
  cin >> p.sexe;
  return p;
}

Cliquez ici pour revenir à la série.


Dernière mise à jour : $Date: 2012-11-09 14:16:46 +0100 (ven 09 nov 2012) $   ($Revision: 191 $)