Hem decidit implementar una classe Cua_estudiants usant un vector d’estudiants amb una capacitat màxima. Les operacions de la classe són les habituals de les cues amb una nova funcionalitat: obtenir la nota mitjana dels estudiants amb nota de la cua. Per a poder comprovar la precondició d’aquesta funcionalitat, s’ha afegit una operació consultora que retorna el nombre d’estudiants amb nota de la cua. També s’ha afegit una operació pública full que indica si la cua està plena.
La nova funcionalitat està associada a una operació pública amb la següent especificació:
double nota_mitjana() const; /* Pre: el paràmetre implícit té algun estudiant amb nota */ /* Post: el resultat és la nota mitjana dels estudiants amb nota del paràmetre implícit */
Això ha suposat afegir dos atributs especials a la classe, a més dels necessaris per a la implementació de les operacions habituals de les cues. Tenint això en compte, només heu d’implementar eficientment les següents operacions:
void push(const Estudiant &est); /* Pre: el paràmetre implícit no està ple */ /* Post: el paràmetre implícit és com el paràmetre implícit original amb est afegit com a darrer element */ void pop(); /* Pre: el paràmetre implícit no està buit */ /* Post: el paràmetre implícit és com el paràmetre implícit original però sense el primer element afegit al paràmetre implícit original */ void escriure() const; /* Pre: cert */ /* Post: s'han escrit pel canal estàndar de sortida els estudiants del paràmetre implícit per ordre d'arribada a la cua (del primer al darrer) */
Observació
Heu de lliurar un fitxer solucio.cc amb una implementació eficient de les operacions push, pop i escriure que ha de tenir el següent format:
#include "Cua_estudiants.hh" void Cua_estudiants::push(const Estudiant &est) { ... // codi de la implementació } void Cua_estudiants::pop() { ... // codi de la implementació } void Cua_estudiants::escriure() 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.
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 (públic o privat).
El joc de proves anomenat public s’explica al fitxer llegeixme.txt. Els jocs de proves privat1,
privat2 i privat3 proven situacions especials.