Control - Torn 2 - Problema 1 (Primavera 2019) X79747


Statement
 

pdf   zip   tar

html

Hem decidit estendre la classe Cjt_estudiants que heu vist al laboratori amb dues noves funcionalitats: obtenir el nombre d’estudiants suspesos (és a dir, que tenen nota estrictament menor que 5 -suposem que la nota màxima possible és 10- o sense nota) i obtenir el nombre d’estudiants compensables (és a dir, que tenen nota estrictament menor que 5 i més gran o igual que 4).

Hem optat per afegir dues noves operacions públiques amb la següent especificació:

  int suspesos() const;
  /* Pre: cert */
  /* Post: el resultat és el nombre d'estudiants del paràmetre implícit amb
     nota estrictament menor que 5 o sense nota */
  
  int compensables() const;
  /* Pre: cert */
  /* Post: el resultat és el nombre d'estudiants del paràmetre implícit amb
     nota estrictament menor que 5 i més gran o igual que 4 */

Això ha suposat afegir dos atributs nous a la classe. Tenint això en compte, només heu d’implementar eficientment les següents operacions:

void afegir_estudiant(const Estudiant &est, bool& b);
/* Pre: el paràmetre implícit no està ple */
/* Post: b = indica si el p.i. original conté un estudiant amb el dni d'est;
   si b = fals, s'ha afegit l'estudiant est al paràmetre implícit */

void esborrar_estudiant(int dni, bool& b);
/* Pre: cert */
/* Post: b indica si el paràmetre implícit original tenia un estudiant 
   amb el dni dni; si b, aquest estudiant ha quedat eliminat
   del paràmetre implícit */

Observació

Heu de lliurar un fitxer solution.cc amb una implementació eficient de les operacions afegir_estudiant i esborrar_estudiant. Aquest fitxer no pot contenir la implementació d’altres operacions de la classe.

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 totes les operacions públiques i privades d’aquesta versió de la classe Cjt_estudiants, així com la definició dels camps privats. É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 Cjt_estudiants.
  • Cjt_estudiants.cc: la implementació de totes de les operacions de la nova versió de la classe Cjt_estudiants tret de les operacions afegir_estudiant i esborrar_estudiant.
  • 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 les operacions públiques d’aquesta versió de la classe Cjt_estudiants.
  • llegeixme.txt: instruccions per a generar l’executable del programa pro2 i provar-lo.
  • sample.inp: entrada del joc de proves públic
  • sample.cor: sortida del joc de proves públic
  • solution.cc: plantilla explicada previament

És fonamental que la solució sigui eficient en temps i espai. En particular, s’han d’evitar instruccions innecessàries (especialment bucles o crides a operacions costoses) i no es poden fer servir objectes auxiliars de les classes vector o Cjt_estudiants. 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 s’explica al fitxer llegeixme.txt. El privat1 és molt semblant al public. Els privat2 i privat3 proven situacions especials.

Public test cases
  • Input

    3
    111 4.22
    222 6.66
    333 545
    -3
    -4
    -1 444 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
    -2 333
    -2 888
    -3
    -4
    -5

    Output

    Conjunt:
    3
    111 4.22
    222 6.66
    333 NP
    
    Estudiants suspesos i estudiants compensables: 2 1
    
    Conjunt:
    4
    111 4.22
    222 6.66
    333 NP
    444 5.02
    
    Estudiants suspesos i estudiants compensables: 2 1
    
    Conjunt:
    4
    111 4.22
    222 6.66
    333 4.13
    444 5.02
    
    Estudiants suspesos i estudiants compensables: 2 2
    
    Conjunt:
    3
    111 4.22
    333 4.13
    444 5.02
    
    Estudiants suspesos i estudiants compensables: 2 2
    
    Conjunt:
    5
    111 4.22
    333 4.13
    444 5.02
    445 NP
    555 9.5
    
    Estudiants suspesos i estudiants compensables: 3 2
    
    L'estudiant 445 ja hi era
    
    L'estudiant 888 no hi era
    
    Conjunt:
    4
    111 4.22
    444 5.02
    445 NP
    555 9.5
    
    Estudiants suspesos i estudiants compensables: 2 1
    
    
  • Information
    Author
    Professors de PRO2
    Language
    Catalan
    Official solutions
    C++
    User solutions
    C++