Consulta per intervals de notes dels estudiants d’un conjunt

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\leq nota_inf\leqnota_sup \leq nota_maxi­ma(). 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.

Informació del problema

Autoria: Professors de PRO2

Generació: 2026-01-25T13:01:06.689Z

© Jutge.org, 2006–2026.
https://jutge.org