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) innecessaris, que no faci recorreguts quan hauria de fer cerques, i que usi correctament les operacions més eficients de la classe sempre que sigui possible. No es pot emprar cap estructura de dades addicional ni implementar més operacions noves.
Important: lliurar repetidament solucions que no funcionin amb el sample públic és una pèrdua de temps. Al fitxer .tar del Public files teniu tot el material necessàri per provar el vostre codi abans de lliurar-lo.
Input
11 111 3.22 222 8.66 333 -12 444 4.22 555 3.66 888 7.66 999 349 123 4.22 234 9.66 345 5.5 890 10 -2 -3 5 10 -1 444 5.02 -1 456 1.06 -2 -1 899 10 -3 10 10 -1 745 -12 -1 342 22 -2 -4
Output
Conjunt: Estudiants sense nota 2 Estudiants amb nota 9 333 NP 999 NP 111 3.22 555 3.66 123 4.22 444 4.22 345 5.5 888 7.66 222 8.66 234 9.66 890 10 Interval [5, 10] 345 5.5 888 7.66 222 8.66 234 9.66 890 10 L'estudiant 444 ja hi era Conjunt: Estudiants sense nota 2 Estudiants amb nota 10 333 NP 999 NP 456 1.06 111 3.22 555 3.66 123 4.22 444 4.22 345 5.5 888 7.66 222 8.66 234 9.66 890 10 Interval [10, 10] 890 10 899 10 Conjunt: Estudiants sense nota 4 Estudiants amb nota 11 333 NP 342 NP 745 NP 999 NP 456 1.06 111 3.22 555 3.66 123 4.22 444 4.22 345 5.5 888 7.66 222 8.66 234 9.66 890 10 899 10