Hem decidit estendre la classe ListaPalabras que heu vist a la sessió 5 de laboratori (sense el mètode max_frec) amb dues noves funcionalitats:
Hem optat per afegir dues noves operacions públiques amb la següent especificació:
double frec_media_long(int l) const; /* Pre: 0 < l <= Palabra::longitud_maxima() */ /* Post: el resultado es la frecuencia media de las palabras de longitud l en el parámetro implícito (cero si no hay ninguna) */ void borrar_palabra(const Palabra & p); /* Pre: si p pertence al p.i., tiene frecuencia f */ /* Post: si p no pertence al p.i., no cambia nada; si f = 1, p ya no pertenece al p.i.; si f > 1, la frecuencia de p se ha decrementado en 1 */
Això ha suposat afegir atributs nous a la classe. Tenint això en compte, només heu d’implementar eficientment dues operacions públiques: borrar_palabra i
void anadir_palabra(const Palabra &p); /* Pre: el número de palabras en el parámetro implícito es menor que la longitud máxima o p ya está en él; p no es la palabra vacía */ /* Post: si p estaba en el parámetro implícito original, su frecuencia se ha incrementado en 1; si no, p pasa a estar en él, con frecuencia 1 */
Per implementar aquestes operacions heu d’usar una operació auxiliar privada que també heu d’implementar:
void buscar_palabra_posicion(const Palabra &p, bool &b, int &i) const; /* Pre: cierto */ /* Post: b indica si p está en el parámetro implícito; si b, entonces i es la posición en la que está p; si no, i es la longitud del parámetro implícito */
Observació
Heu de lliurar un fitxer solucio.cc amb una implementació eficient de les operacions anadir_palabra, borrar_palabra i buscar_palabra_posicion que ha de tenir el següent format:
#include "ListaPalabras.hh" void ListaPalabras::anadir_palabra(const Palabra &p) { ... // codi de la implementació } void ListaPalabras::borrar_palabra(const Palabra &p) { ... // codi de la implementació } void ListaPalabras::buscar_palabra_posicion(const Palabra &p, bool &b, int &i) 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 o llistes de paraules) innecessaris.
No es pot emprar cap estructura de dades que no hagi
aparegut a les sessions 1-5 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 el que teniu al fitxer llegeixme.txt. El privat1 és molt semblant al public. Els privat2 i privat3 proven situacions especials.