Série 8 (Niveau 0):
Structures
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.
-
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; }
- Déclarez un nouveau type, Personne, comme une structure contenant trois champs:
- taille de type réel,
- age de type entier,
- sexe de type caractere.
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;
- 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);
- 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; }
- 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; }
- 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
#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; }
Retour à la série