Preliminars
En aquest exercici extendrem la classe List
suposant que el tipus T dels elements de la
llista té definida la operació de suma +, és a
dir, que dues variables de tipus T es poden
sumar. Aquesta suma satisfarà la propietat d’associativitat usual
(),
i tindrà element neutre (per exemple,
és el neutre per a la suma d’enters, i l’string buit és el neutre per a
la suma d’strings).
També suposem que una variable x de tipus
T permet una assignació
x = 0, de manera que, internament, a
x se li assigna el neutre de la suma.
Testejarem l’exercici amb el tipus int i
amb un tipus contenidor d’string que permetrà
fer assignacions x = 0 (internament
s’assignarà l’string buit). Fixeu-vos que en el cas
d’strings la suma és de fet la concatenació
d’strings, i que no és commutativa. Per
exemple, "a"+"b" = "ab"
"ba" = "b"+"a".
Exercici
Implementeu un nou mètode de la classe List que retorni la suma dels elements continguts a la llista des del principi fins al final. És a dir, si és el contingut de la llista, el mètode ha de retornar .
D’entre els fitxers que s’adjunten en aquest exercici, trobareu
list.hh, a on hi ha una implementació de la
classe genèrica List. Haureu de buscar dins
list.hh les següents línies:
// Pre: Sigui [a1,...,an] el contingut actual de la llista.
// Post: Retorna a1+...+an.
// Descomenteu les següents dues linies i implementeu el mètode:
// T sum() {
// }
Descomenteu les dues linies que s’indiquen i implementeu el mètode. No toqueu la resta de la implementació de la classe, excepte si, per algun motiu, considereu que necessiteu afegir algun mètode auxiliar a la part privada.
Observació: Una implementació senzilla inicialitzant una variable de tipus T a (que es transformarà automàticament en el neutre de la suma) i recorrent i sumant-hi els elements de la llista hauria de ser suficient per a superar tots els jocs de proves.
D’entre els fitxers que s’adjunten a l’exercici també hi ha
main.cc (programa principal), i el podeu
compilar directament, doncs inclou list.hh.
Només cal que pugeu list.hh al jutge.
L’entrada del programa té una primera línia amb o bé
int o bé
string, que indica el tipus T
dels elements de la llista l amb la que
treballarà el programa, que se suposa inicialment buida. Després, hi ha
una seqüència d’instruccions del següent tipus que s’aniran aplicant
sobre la llista i un iterador que se suposa situat inicialment al
principi (i final) de la llista:
push_front x (x és de tipus T)
push_back x (x és de tipus T)
pop_front
pop_back
it = begin
it = end
it = erase it
it++
it--
++it
--it
*it = x (x és de tipus T)
insert it x (x és de tipus T)
cout << *it
cout << sum
cout << l
Se suposa que la seqüència d’entrada serà correcta, és a dir, que no es produeixen errors d’execució si s’apliquen correctament sobre una llista i un iterador amb les condicions abans esmentades.
El programa principal que us oferim ja s’encarrega de llegir aquestes
entrades i fer les crides als corresponents mètodes de la classe list.
Només cal que implementeu el mètode sum abans
esmentat.
Per a cada instrucció cout << *it
s’escriurà el contingut apuntat per l’iterador. Per a cada instrucció
cout << l s’escriurà el contingut de
tota la llista. Per a cada instrucció
cout << sum s’escriurà la suma de la
llista. El programa que us oferim ja fa això. Només cal que implementeu
el mètode sum abans esmentat.
Avaluació sobre 10 punts: (Afegiu comentaris si el vostre codi no és prou clar)
Solució lenta: 6 punts.
solució ràpida: 10 punts.
Entenem com a solució lenta una que és correcta i capaç de superar els jocs de proves públics. Entenem com a solució ràpida una que és correcta i capaç de superar els jocs de proves públics i privats.
Autoria: PRO2
Generació: 2026-01-27T18:54:08.546Z
© Jutge.org, 2006–2026.
https://jutge.org