Es disposa de 0≤ k beques que s’atorgaran als k 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 A està en millors condicions que un altre B per obtenir beca, direm que A és “millor” o “més prioritari” que B.
A més, tots els estudiants becats han de tenir una nota superior o igual a un cert valor donat m, amb 0 ≤ m ≤ Estudiant::nota_maxima(); si el nombre d’estudiants que satisfan aquesta condició és més petit que k, 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 k i m.
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 */
Observació
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:
É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