© D. Mathieu
mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique
Créé le 18/03/2000 - Dernière mise à jour : 22/03/2000
Tout document autorisé
Sujet : L’objectif de ces exercices est de développer une classe CHistogramme. Il s'agit de comptabiliser des entiers naturels (>= 0) qui appartiennent à la même classe d'équivalence. On appellera "étendue de la classe" le nombre N de valeurs entières différentes d'une même classe. On posera que les entiers 0 à N-1 inclus appartiennent à la première classe (classe 0), que les entiers N à 2N-1 inclus appartiennent à la deuxième classe (classe 1), etc... On peut par exemple faire l'histogramme des notes (entières) de test en prenant une étendue de classe de 2. Le nombre de notes égales à 0 ou à 1 est comptabilisé dans la première classe (classe 0), le nombre de notes égales à 2 ou à 3 est comptabilisé dans la deuxième classe (classe 1), etc... Le nombre de notes comptabilisées dans une classe i est l'effectif de cette classe.
Remarque préliminaire : par souci de simplification, tout le code sera écrit dans le même fichier, CHistogr.h, supposé pouvoir être inclus dans d'autres fichiers (pas de .hxx, pas de .cxx). Ne perdez pas votre temps à faire l'entête du fichier. N'oubliez cependant aucune des directives nécessaires au préprocesseur.
En annexes sont fournis, pour la plupart des exercices,
des extraits d'un programme de test correspondant, afin de vous montrer
comment la classe doit pouvoir être utilisée.
Voir corrigé.
void Afficher (void) throw (); |
qui, dans le flux standard de sortie, affiche, à raison d'un
par ligne, le numéro de chaque classe suivi de son effectif. Soigner
la présentation pour que les affichages soient alignés :
classe 9 : 342
classe 10 : 3 |
Voir corrigé.
void Ajouter (const unsigned int Nbre) throw (); |
qui comptabilise Nbre dans sa classe d'équivalence (ajoute 1 au compteur correspondant). Attention : il peut être nécessaire de rallonger le vecteur si la classe d'équivalence de Nbre est au-delà des classes déjà utilisées (au début, le vecteur m_Effectif est de taille nulle). Si vous pensez que c'est nécessaire, initialisez les nouveaux effectifs.
Voir annexe 3.
Voir corrigé.
void Supprimer (const unsigned int Nbre) throw (); |
qui décrémente de 1 le compteur de la classe d'équivalence de Nbre. Attention : si son effectif devient nul, il peut être nécessaire de réduire la taille du vecteur des effectifs (voir remarque plus haut).
Voir annexe 4.
Voir corrigé.
Voir corrigé.
Voir corrigé.
CHistogramme & operator + (const unsigned int Nbre) throw (); |
qui joue le même rôle que la fonction Ajouter () : voir annexe 7.
Voir corrigé.
CHistogramme & operator + (const CHistogramme & Histogramme) throw (); |
qui fait la somme des deux histogrammes : voir annexe 8.
Voir corrigé.
CHistogr Hist1 (3);
CHistogr Hist2; CHistogr Hist3 (Hist1); cout << "Hist1 - "; Hist1.Afficher ();
cout << endl;
|
Hist1.Ajouter (10);
Hist1.Ajouter (3); Hist1.Ajouter (16); for (int i = 0; i < 5; ++i) Hist1.Ajouter (10); cout << "Hist1 - "; Hist1.Afficher(); cout << endl; |
Hist1.Supprimer (10);
Hist1.Supprimer (16); Hist1.Supprimer (10); Hist1.Supprimer (3); cout << "Hist1 - "; Hist1.Afficher(); cout << endl; |
cout << "Hist1 - " << Hist1 << endl; |
Hist2 = Hist2 = Hist1 = Hist1; |
Hist1 = Hist1 + 2;
Hist1 = Hist1 + 2; cout << "Hist1 - " << Hist1 << endl; |
cout << "Hist1 + Hist2 - " << Hist1 + Hist2 << endl; |
© D. Mathieu
mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique