Hem decidit estendre la classe
Cjt_estudiants que heu vist al laboratori amb
dues noves funcionalitats: obtenir el nombre d’estudiants suspesos (és a
dir, que tenen nota estrictament menor que 5 -suposem que la nota màxima
possible és 10- o sense nota) i obtenir el nombre d’estudiants
compensables (és a dir, que tenen nota estrictament menor que 5 i més
gran o igual que 4).
Hem optat per afegir dues noves operacions públiques amb la següent especificació:
int suspesos() const;
/* Pre: cert */
/* Post: el resultat és el nombre d'estudiants del paràmetre implícit amb
nota estrictament menor que 5 o sense nota */
int compensables() const;
/* Pre: cert */
/* Post: el resultat és el nombre d'estudiants del paràmetre implícit amb
nota estrictament menor que 5 i més gran o igual que 4 */
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 */
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:
Cjt_estudiants.hh: les capçaleres i
l’especificació Pre/Post de totes les operacions públiques i privades
d’aquesta versió de la classe Cjt_estudiants, així com la definició dels
camps privats. És molt important que la
implementació de les operacions que us hem encarregat tingui en compte i
preservi l’invariant de la representació de la classe
Cjt_estudiants.
Cjt_estudiants.cc: la implementació de
totes de les operacions de la nova versió de la classe
Cjt_estudiants tret de les operacions
afegir_estudiant i
esborrar_estudiant.
Estudiant.hh: l’especificació de la
classe Estudiant i la definició dels seus
atributs.
Estudiant.cc: la implementació dels
mètodes de la classe Estudiant.
pro2.cc: un programa principal que
podeu fer servir per provar les operacions públiques d’aquesta versió de
la classe Cjt_estudiants.
llegeixme.txt: instruccions per a
generar l’executable del programa pro2 i
provar-lo.
sample.inp: entrada del joc de proves
públic
sample.cor: sortida del joc de proves
públic
solution.cc: plantilla explicada
previament
É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 4.22 222 6.66 333 545 -3 -4 -1 444 5.02 -3 -4 -2 333 -1 333 4.13 -3 -4 -2 222 -3 -4 -1 555 9.5 -1 445 44 -3 -4 -1 445 4.4 -2 333 -2 888 -3 -4 -5
Output
Conjunt: 3 111 4.22 222 6.66 333 NP Estudiants suspesos i estudiants compensables: 2 1 Conjunt: 4 111 4.22 222 6.66 333 NP 444 5.02 Estudiants suspesos i estudiants compensables: 2 1 Conjunt: 4 111 4.22 222 6.66 333 4.13 444 5.02 Estudiants suspesos i estudiants compensables: 2 2 Conjunt: 3 111 4.22 333 4.13 444 5.02 Estudiants suspesos i estudiants compensables: 2 2 Conjunt: 5 111 4.22 333 4.13 444 5.02 445 NP 555 9.5 Estudiants suspesos i estudiants compensables: 3 2 L'estudiant 445 ja hi era L'estudiant 888 no hi era Conjunt: 4 111 4.22 444 5.02 445 NP 555 9.5 Estudiants suspesos i estudiants compensables: 2 1