Hem decidit estendre la classe Cjt_estudiants que heu vist al laboratori amb una nova funcionalitat que permeti escriure els estudiants del paràmetre implícit amb nota compresa dins del interval tancat [nota_inf, nota_sup] verificant-se 0≤ nota_inf≤nota_sup ≤ nota_maxima(). Els estudiants s’escriuen en ordre ascendent per nota i, en cas d’empat, en ordre ascendent per DNI.
Per implementar eficientment aquesta operació
Tenint això en compte heu d’implementar eficientment el següent mètode privat:
int posicio_nota(double nota_b) const;
/* Pre: 0 <= nota_b <= nota_maxima() */
/* Post: el resultat és la posició del primer estudiant amb nota major
o igual que nota_b a vest[0...nest-1]. Si no hi ha estudiants amb
nota major o igual que nota_b, el resultat és nest. */
i els següents mètodes públics:
void afegir_estudiant(const Estudiant &est, bool &trobat);
/* Pre: el paràmetre implícit no està ple */
/* Post: trobat indica si el p.i. original conté un estudiant amb
el dni d'est; si trobat és cert no es modifica el p.i., i si
trobat és fals s'ha afegit l'estudiant est al paràmetre implícit */
void escriure_i(double nota_i, double nota_s) const;
/* Pre: 0 <= nota_i <= nota_s <= nota_maxima() */
/* Post: s'han escrit pel canal estàndard de sortida els estudiants
del paràmetre implícit amb nota dins del interval tancat
[nota_i, nota_s]. Els estudiants s'escriuen en ordre ascendent
per nota i en cas d'empat en ordre ascendent per DNI */
Observació
Heu de lliurar un fitxer solucio.cc amb una implementació eficient de les operacions posicio_nota, afegir_estudiant i escriure_i que ha de tenir el següent format:
#include "Cjt_estudiants.hh"
int Cjt_estudiants::posicio_nota(double nota_b) const {
... // codi de la implementació
}
void Cjt_estudiants::afegir_estudiant(const Estudiant &est, bool &trobat)
{
... // codi de la implementació
}
void Cjt_estudiants::escriure_i(double nota_i, double nota_s) const
{
... // codi de la implementació
}
Copieu aquesta plantilla en el vostre solucio.cc i completeu-la. El vostre solucio.cc no pot contenir la implementació d’altres operacions de la classe.
A l’apartat Public files del Jutge us proveïm amb material addicional 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:
Valorarem positivament que la solució no contingui instruccions
(especialment bucles o crides a operacions costoses) ni objectes
(especialment vectors o conjunts) innecessaris, que no faci recorreguts
quan hauria de fer cercas, i que usi correctament les operacions
més eficients de la classe sempre que sigui possible. 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 correspon al fitxers entrada.txt i
sortida_correcta.txt de l’apartat Public files.