Hem decidit estendre la classe Cjt_estudiants que heu vist al laboratori amb dues noves funcionalitats: obtenir el nombre d’estudiants presentats (és a dir, que tenen nota) i obtenir el nombre d’estudiants aprovats (és a dir, amb nota més gran o igual que la meitat de la nota màxima possible).
Hem optat per afegir dues noves operacions públiques amb la següent especificació:
int presentats() const;
/* Pre: cert */
/* Post: el resultat és el nombre d'estudiants del paràmetre implícit amb
nota */
int aprovats() const;
/* Pre: cert */
/* Post: el resultat és el nombre d'estudiants del paràmetre implícit amb
nota >= Estudiant::nota_maxima()/2 */
Això ha suposat afegir dos atributs nous a la classe. Tenint això en compte, només heu d’implementar eficientment les següents operacions:
void afegir_estudiant(const Estudiant &est, bool& b);
/* Pre: el paràmetre implícit no està ple */
/* Post: b = indica si el p.i. original conté un estudiant amb el dni d'est;
si b = fals, s'ha afegit l'estudiant est al paràmetre implícit */
void esborrar_estudiant(int dni, bool& b);
/* Pre: cert */
/* Post: b indica si el paràmetre implícit original tenia un estudiant
amb el dni dni; si b, aquest estudiant ha quedat eliminat
del paràmetre implícit */
Observació
Heu de lliurar un fitxer solution.cc amb una implementació eficient de les operacions afegir_estudiant i esborrar_estudiant. Aquest fitxer no pot contenir la implementació d’altres operacions de la classe.
A l’apartat Public files del Jutge (icona del gatet) us proveïm amb una plantilla pel fitxer solution.cc que només cal completar. A més, trobareu material addicional, tot comprimit en un fitxer .tar. Podeu descomprimir aquest fitxer amb la comanda
tar -xvf nom_fitxer.tar
Aquest material addicional consisteix en els següents fitxers:
És fonamental que la solució sigui eficient en temps i espai. En particular, s’han d’evitar instruccions innecessàries (especialment bucles o crides a operacions costoses) i no es poden fer servir objectes auxiliars de les classes vector o Cjt_estudiants. No es pot emprar cap estructura de dades que no hagi aparegut a les sessions 1-4 de laboratori.
Quan feu els enviaments el Jutge us indicarà quants jocs de proves passeu i de quin tipus (public o privat).
El joc de proves anomenat public s’explica al fitxer llegeixme.txt. El privat1 és molt semblant al public. Els privat2 i privat3 proven situacions especials.
Input
3 111 40.22 222 62.66 333 545 -3 -4 -1 444 52.02 -3 -4 -2 333 -1 333 42.13 -3 -4 -2 222 -3 -4 -1 555 91.5 -1 445 444 -3 -4 -1 445 40.4 -2 333 -2 888 -3 -5
Output
Conjunt: 3 111 40.22 222 62.66 333 NP Estudiants presentats i estudiants aprovats: 2 1 Conjunt: 4 111 40.22 222 62.66 333 NP 444 52.02 Estudiants presentats i estudiants aprovats: 3 2 Conjunt: 4 111 40.22 222 62.66 333 42.13 444 52.02 Estudiants presentats i estudiants aprovats: 4 2 Conjunt: 3 111 40.22 333 42.13 444 52.02 Estudiants presentats i estudiants aprovats: 3 1 Conjunt: 5 111 40.22 333 42.13 444 52.02 445 NP 555 91.5 Estudiants presentats i estudiants aprovats: 4 2 L'estudiant 445 ja hi era L'estudiant 888 no hi era Conjunt: 4 111 40.22 444 52.02 445 NP 555 91.5