Volem una operació nova per fer-la servir al context de les classes Cjt_estudiants i Estudiant que heu vist al laboratori. Concretament, volem poder escriure conjunts d’estudiants en ordre decreixent per nota. En cas d’empat, escriurem primer els estudiants amb DNI més petit. Els estudiants sense nota es tracten com si la seva nota fos -1.
Hem optat per afegir dues noves operacions que no pertanyen a cap classe amb la següent especificació:
void escriure_nota_decr(const Cjt_estudiants& c) {
/* Pre: cert */
/* Post: s'han escrit pel canal estàndar de sortida els estudiants
de c en ordre descendent de nota i, en cas d'empat, en ordre
ascendent per DNI */
bool nota_decr(const Estudiant& a, const Estudiant& b) {
/* Pre: cert */
/* Post: el resultat es cert si la nota d'a es mes gran que la de b
o, si son iguals, si el dni d'a es mes petit que el de b */
Observació
Heu de lliurar un fitxer solution.cc amb una implementació eficient de les operacions escriure_nota_decr i nota_decr. Aquest fitxer no pot accedir als elements privats de les classes Cjt_estudiants i Estudiant. Òbviament, sí que pot fer servir les operacions públiques de les versions que us donem d’ambdues.
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. No es pot emprar cap estructura de dades que no hagi aparegut a les sessions 1-4 de laboratori. Sí que es pot fer servir un vector auxiliar i l’operació sort.
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
0 -3 -4 -1 111 4.22 -1 222 6.66 -1 444 545 -3 -4 -1 333 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 -1 666 12 -2 333 -2 777 -3 -4 -5
Output
Conjunt: 0 Conjunt per nota decreixent: Conjunt: 3 111 4.22 222 6.66 444 NP Conjunt per nota decreixent: 222 6.66 111 4.22 444 NP Conjunt: 4 111 4.22 222 6.66 333 5.02 444 NP Conjunt per nota decreixent: 222 6.66 333 5.02 111 4.22 444 NP Conjunt: 4 111 4.22 222 6.66 333 4.13 444 NP Conjunt per nota decreixent: 222 6.66 111 4.22 333 4.13 444 NP Conjunt: 3 111 4.22 333 4.13 444 NP Conjunt per nota decreixent: 111 4.22 333 4.13 444 NP Conjunt: 5 111 4.22 333 4.13 444 NP 445 NP 555 9.5 Conjunt per nota decreixent: 555 9.5 111 4.22 333 4.13 444 NP 445 NP L'estudiant 445 ja hi era L'estudiant 777 no hi era Conjunt: 5 111 4.22 444 NP 445 NP 555 9.5 666 NP Conjunt per nota decreixent: 555 9.5 111 4.22 444 NP 445 NP 666 NP