Control - Torn 2 (Primavera 2016) X30094


Statement
 

pdf   zip   tar

html

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:

  • Cua_estudiants.hh: l’especificació Pre/Post de totes les operacions públiques de la classe Cua_estudiants, així como la definició dels camps privats. Fixeu-vos que hi ha un atribut double suma, que conté la suma de les notes dels estudiantes amb nota de la cua, i un atribut int nest_amb_nota, que conté el nombre d’estudiants amb nota de la cua. Aquests atributs ens han permès implementar amb la màxima eficiència l’operació nota_mitjana i cal actualitzar-los en les operacions modificadores de la classe. És molt important que la implementació de les operacions que us hem encarregat tingui en compte i preservi l’invariant de la representació de la classe Cua_estudiants. No podeu afegir noves operaciones públiques o privades a la classe ni modificar els seus atributs.
  • Cua_estudiants.cc: la implementació de totes de les operacions de la classe Cua_estudiants tret de les operacions push, pop i escriure.
  • Estudiant.hh: l’especificació de la classe Estudiant i la definició dels seus atributs. No presenta cap novetat.
  • Estudiant.cc: la implementació dels mètodes de la classe Estudiant.
  • pro2.cc: un programa principal que podeu fer servir per provar les operacions públiques de la classe Cua_estudiants.
  • llegeixme.txt: instruccions per a generar l’executable del programa pro2 i provar-lo.

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.

Information
Author
Professors de PRO2
Language
Catalan
Official solutions
Unknown.
User solutions
C++