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 */
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:
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.
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
solution.hh: les capçaleres de les
noves operacions, per fer #include
É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