Es disposa de beques que s’atorgaran als estudiants amb millors notes d’un conjunt. Si hi ha més d’un estudiant amb la mateixa nota, es prioritzaran per a les beques els estudiants amb DNI més gran. En general, si un estudiant està en millors condicions que un altre per obtenir beca, direm que és “millor” o “més prioritari” que .
A més, tots els estudiants becats han de tenir una nota superior o igual a un cert valor donat , amb ; si el nombre d’estudiants que satisfan aquesta condició és més petit que , llavors les beques corresponents es quedaran sense atorgar.
S’han adaptat les classes Cjt_estudiants i
Estudiant, que heu vist al laboratori, per
donar suport a la gestió de les beques (fixeu-vos a les
noves operacions i camps). Noteu també que si volem
llegir un conjunt, hem de proporcionar primer de tot els valors
i
.
En aquest exercici heu d’implementar dues de les operacions de la
classe Cjt_estudiants, concretament
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 */
int immediatament_millor(int i) const
/* Pre: 0<=i<nest; vest[i] te nota */
/* Post: el resultat és la posició en vest[0..nest-1] de l'estudiant
immediatament millor que vest[i], si n'hi ha; -1 en cas contrari */
Heu de lliurar un fitxer solution.cc amb
una implementació eficient de les operacions
afegir_estudiant i
immediatament_millor. 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, hi
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 les operacions públiques i privades de la
classe Cjt_estudiants, així com la definició
dels seus atributs.
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
immediatament_millor
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 la solució d’aquest exercici.
llegeixme.txt: instruccions per a
generar i provar l’executable del programa
pro2.
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
1 75 3 111 40.22 555 545 222 62.66 -2 -3 -1 555 42.13 -1 333 77 -2 -3 -1 554 91.5 -1 445 444 -2 -3 -4 3 50 8 1111 40.22 2222 62 3333 545 4444 40.22 5555 63 6666 545 7777 40.22 8888 64 -2 -3 -1 4445 80.4 -2 -3 -5
Output
Conjunt: 3 111 40.22 222 62.66 555 NP Estudiants amb beca del conjunt: 0 L'estudiant 555 ja hi era Afegit 333 77 Conjunt: 4 111 40.22 222 62.66 333 77 555 NP Estudiants amb beca del conjunt: 1 El becat menys prioritari del conjunt es 333 77 Afegit 554 91.5 Afegit 445 NP Conjunt: 6 111 40.22 222 62.66 333 77 445 NP 554 91.5 555 NP Estudiants amb beca del conjunt: 1 El becat menys prioritari del conjunt es 554 91.5 Hem llegit un nou conjunt Conjunt: 8 1111 40.22 2222 62 3333 NP 4444 40.22 5555 63 6666 NP 7777 40.22 8888 64 Estudiants amb beca del conjunt: 3 El becat menys prioritari del conjunt es 2222 62 Afegit 4445 80.4 Conjunt: 9 1111 40.22 2222 62 3333 NP 4444 40.22 4445 80.4 5555 63 6666 NP 7777 40.22 8888 64 Estudiants amb beca del conjunt: 3 El becat menys prioritari del conjunt es 5555 63