Exercice 92
Énoncé
Créer une classe nommée histo permettant de manipuler des « histogrammes ». On
rappelle que l’on obtient un histogramme à partir d’un ensemble de valeurs x(i), en
définissant n tranches (intervalles) contiguës (souvent de même amplitude) et en
comptabilisant le nombre de valeurs x(i) appartenant à chacune de ces tranches.
On prévoira :
• un constructeur de la forme histo (float min, float max, int ninter), dont les
arguments précisent les bornes (min et max) des valeurs à prendre en compte et
le nombre de tranches (ninter) supposées de même amplitude ;
• un opérateur << défini tel que h< appartient x. Les valeurs sortant des limites (min - max) ne seront pas
comptabilisées ;
• un opérateur [] défini tel que h[i] représente le nombre de valeurs répertoriées
dans la tranche de rang i (la première tranche portant le numéro 1 ; un numéro
incorrect de tranche conduira à considérer celle de rang 1). On s'arrangera
pour qu'une instruction de la forme h[i] = ... soit rejetée en compilation.
On ne cherchera pas ici à régler les problèmes posés par l’affectation ou la
transmission par valeur d’objets du type histo.
Nous n’avons pas besoin de conserver les différentes valeurs x(i), mais seulement les
compteurs relatifs à chaque tranche. En revanche, il faut prévoir d’allouer
dynamiquement (dans le constructeur) l’emplacement nécessaire à ces compteurs,
puisque le nombre de tranches n’est pas connu lors de la compilation de la classe histo.
Il faudra naturellement prévoir de libérer cet emplacement dans le destructeur de la
classe. Les membres donnée de histo seront donc les valeurs extrêmes (minimale et
maximale), le nombre de tranches et un pointeur sur l’emplacement contenant les
compteurs.
L’opérateur << peut être surdéfini, soit comme fonction membre, soit comme fonction
amie ; nous choisirons ici la première solution. En revanche, l’opérateur [] doit
217
Précédent

- 218/398

Suivant