• Aucun résultat trouvé

Université de Nice-Sophia Antipolis POLYTECH

N/A
N/A
Protected

Academic year: 2022

Partager "Université de Nice-Sophia Antipolis POLYTECH"

Copied!
2
0
0

Texte intégral

(1)

Université de Nice-Sophia Antipolis POLYTECH

ELEC4 2019–2020

Examen de Programmation C++

Durée : 1h

Aucun document autorisé

Mobiles interdits Nom : Prénom :

1 Elève

On souhaite modéliser les élèves d’une classe d’une école. Écrivez en C++

la classeElevequi possède :

— la variable privéenomde typestring;

— la variable privéenotesde typevectordedouble;

— un/des constructeur(s) pour initialiser les deux variables privées ;

— deux accesseursgetNometgetNotes;

— la méthodemoyennequi renvoie la moyenne des notes de l’élève (−1 si pas de notes) ;

— la surcharge de l’opérateur<<pour écrire le nom de l’élève avec toutes ses notes (oupas de notes) sur unostream.

#pragma once

#i n c l u d e <vector >

#i n c l u d e <string >

#i n c l u d e <iostream >

c l a s s Eleve { p r i v a t e:

std :: string nom;

std :: vector <double> notes ; p u b l i c:

// constructeur

Eleve (c o n s t std :: string s,

c o n s t std :: vector <double> &n = {}) : nom(s), notes (n) {}

// accesseurs

c o n s t std :: string & getNom () c o n s t { r e t u r n t h i s->nom;

}c o n s t std :: vector <double>& getNotes () c o n s t { r e t u r n t h i s-> notes ;

}

double moyenne () c o n s t {

1

i f (t h i s-> notes . empty ()) // pas de notes

r e t u r n -1;

// calculer la moyenne

double moy = 0.0;

f o r (double n : t h i s-> notes ) moy +=n;

r e t u r n moy/t h i s-> notes . size ();

}

//c o n s t std :: string toString () c o n s t { std :: string s = t h i s->nom + " :";

i f (t h i s-> notes . empty ()) s+=" pas de notes ";

e l s e

f o r (double n : t h i s-> notes ) s+=" " + std :: to_string (n);

r e t u r n s;

}f r i e n d std :: ostream &operator<<( std :: ostream &f, c o n s t Eleve & e) { r e t u r n f << e. toString ();

};}

. . . . I 1. Écrivez la méthodemainqui déclare deux élèvesPauletIsabelle. Le premier n’a pas de notes, et la seconde a les 4 notes suivantes : 12.0, 9.0, 13.5 et 19.0.

Vous écrirez sur la sortie standard les deux élèves avec leur moyenne. Votre programme écrira donc :

Paul : : pas de notes

Isabelle : 12.000000 9.000000 13.500000 19.000000 : Moy = 13.375

void printlnEleve (c o n s t Eleve &e) { // afficher le nom de l’élève avec ses notes std :: cout << e;

// afficher sa moyenne s’il a des notes double m = e. moyenne ();

i f (m!= -1)

std :: cout << " : Moy = " << std :: to_string (m);

//

std :: cout << std :: endl ; }

i n t main () {

Eleve e1(" Paul "), e2(" Isabelle ", {12 , 9, 13.5 , 19.0} );

printlnEleve (e1 );

printlnEleve (e2 );

r e t u r n EXIT_SUCCESS ; }

2

(2)

. . . .

2 Classe

Maintenant, on modélise une classe d’élèves. Écrivez la classeClasse( ) qui possède :

— la variable privéenomde typestring;

— la variable privéelesElevesde typevectorde pointeur surEleve;

— un constructeur pour initialiser la variable privéenom;

— le constructeur de copie ;

— le destructeur ;

— l’accesseurgetnom;

— la méthodeaddElevepour ajouter un élève à la fin du vecteurlesEleves;

— la surcharge de l’opérateur<<pour écrire le nom de la classe avec les noms de tous les élèves et leur moyennes sur unostream;

— la surcharge de l’opérateur d’affectation=.

#i n c l u d e " Eleve .hpp"

c l a s s Classe { p r i v a t e:

std :: string nom;

std :: vector < Eleve *> lesEleves ; void dupliquer (c o n s t Classe &c) {

t h i s->nom = c.nom;

f o r ( Eleve *e : c. lesEleves )

t h i s-> lesEleves . push_back (new Eleve (*e));

} p u b l i c:

// constructeurs

Classe (c o n s t std :: string n) : nom(n) {}

Classe (c o n s t Classe &c) { dupliquer (c); } // destructeur

~ Classe () {

f o r ( Eleve *e : t h i s-> lesEleves ) d e l e t e e;

}

// accesseurs

c o n s t std :: string & getNom () c o n s t { r e t u r n t h i s->nom; } //

void addEleve ( Eleve *e) { t h i s-> lesEleves . push_back (e);

}

//c o n s t std :: string toString () c o n s t {

std :: string s =" -- Classe " + t h i s->nom + " --";

f o r ( Eleve *e : t h i s-> lesEleves ) { s+="\n" + e-> getNom () + " : ";

double m = e-> moyenne ();

s+= (m== -1) ? " abs" : std :: to_string (m);

3

}r e t u r n s;

}

Classe &o p e r a t o r=(c o n s t Classe &c) { dupliquer (c);

r e t u r n *t h i s;

}f r i e n d std :: ostream &operator<<( std :: ostream &f, c o n s t Classe & c) { r e t u r n f << c. toString ();

};}

. . . . I 2. Écrivez la méthodemainqui déclare la variableelec4de typeClasse. Dans cette classe, vous ajouterez les deux élèvesAli etMei. Le premier n’a pas de notes, et la seconde a 3 notes : 15.5, 14.0 et 9.0. Puis, écrivez la variableelec4 sur la sortie standard, ce qui produira :

-- Classe Elec4 -- Ali : abs Mei : 12.833333

i n t main () {

Classe elec4 (" Elec4 ");

elec4 . addEleve (new Eleve ("Ali"));

elec4 . addEleve (new Eleve ("Mei", {15.5 , 14.0 , 9.0} ));

std :: cout << elec4 << std :: endl ; r e t u r n EXIT_SUCCESS ;

}

. . . .

4

Références

Documents relatifs

Avec la notation de pointeur, écrivez en C la fonction somme qui prend en paramètre une chaîne de caractères qui représente un entier naturel et qui renvoie la somme de ses

Écrivez de façon itérative la fonction itos qui renvoie la conversion d’un entier positif ou nul passé en paramètre, en sa représentation sous forme d’une chaîne de

Écrivez un programme qui lit sur l’entrée standard une opération arithmétique formée de 2 entiers et d’un caractère ( ’+’ , ’-’ , ’*’ ou ’/’ ) et qui écrit sur

Écrivez la fonction creerFichDates qui lit un fichier de texte contenant la suites d’entiers, et qui crée un fichier de dates valides (de type Date ).. Sans l’écrire, vous

Lors d’un appel de fonction ou de procédure, la transmission par valeur consiste à affecter, après évaluation, la valeur du pa- ramètre effectif à son paramètre formel

Au lieu de retirer, à chaque itération, 1 diviseur au dividende et d’incrémenter de 1 le quotient, le diviseur est multiplié successivement par 2 pour trouver son plus grand

qui prend en paramètre une chaîne de caractères, et qui remplace chaque chiffre par le caractère ’_’ dans celle-ci.. La fonction renvoie un pointeur sur le 1er caractère de

Il est nécessaire d’écrire un destructeur pour libérer explicitement la mémoire occupée par le tableau et les 3 points du triangle