Universidad de Costa Rica
|
|
Duración: Ochenta minutos. Lea bien el examen antes de hacerlo. El examen es a libro abierto. Cuenta la documentación. Cuenta la redacción y la ortografía. Puede hacer el examen con lápiz. Resuelva dos de las preguntas. ¡No haga más de lo que se le pide!
3) [33 pts] En algunas aplicaciones conviene contar con la clase
Acumulador
que sirve para sumar un montón de
valores numéricos, pero eliminando del total tanto al
más grande como al más pequeño de todos los
valores. Por ejemplo, el acumulador aplicado a los valores
(1,5,2,2,3,3,4,5)
sólo sumaría
5+2+2+3+3+4
y eliminaría el 1
y
alguno de los 5
's, que son los valores menor y mayor
de toda la secuencia.
3.a) [3 pts]
Las operaciones más importantes de esta clase son
acumule()
, total()
y
cantidad()
. Especifique en formato
"Doxygen" cada una
de estas
operaciones.
3.b) [2 pts]
Especifique en formato
"Doxygen" la
operación elimine()
que permite borrar uno de
los valores acumulados, sea éste el más grande, el
más pequeño, o cualquiera de los valores
intermedios. De esta manera usted estará modificando la clase
Acumulador
de la tarea
programada, que es una clase que no permite eliminar alguno de los
valores que tiene acumulados.
3.c) [6 pts]
Defina el
Rep para su
clase Acumulador
. Debe usar un vector de valores para
mantener memoria de todos los números que han sido
acumulados.
3.d) [8 pts]
Implemente las operaciones
cantidad()
y total()
y para la clase
acumulador
. Recuerde manejar correctamente los
casos límite.
3.e) [7 pts]
Implemente
Acumulador::acumule()
.
3.f) [7 pts]
Implemente
Acumulador::elimine()
.
4) [33 pts] El programa "
Nmbag.cpp
" sirve para leer
números y contar cuántas veces aparece cada uno.
Implemente la parte de la clase "Nmbag
" que se
necesita para que este programa funcione.
int main() { Nmbag B; // la mega-bolsota long n; // lee todos los valores while (cin >> n) { B.Inc(n); } for (n=0; n<LONG_MAX; ++n) { if (0 != B[n]) { cout << n << " está " << B[n]; cout << " veces en la bolsa" << endl; } } return 0; } // main() |
4.a) [7 pts]
Defina el
Rep
para la clase. Suponga que nunca ocurrirá que necesite
almancenar más de 4096
valores diferentes en
su "Nmbag
".
4.b) [1 pts] Implemente el constructor y el destructor para la clase.
4.c) [11 pts]
Especifique
e implemente la operación
examinadora
"B[n]
".
4.d) [14 pts]
Especifique e
implemente
la operación
mutadora
"B.Inc(n)
".
4.e) [0 pts]
Mejore la eficiencia de la operación "B[n]
" usando
búsqueda binaria. Explique por qué esto no
mejora la implementación de "B.Inc(n)
".
5) [33 pts] Las operaciones más importantes de un conjunto son "
Set::Insert()
" y
"Set::Member()
".
5.a) [0 pts]
Explique por qué estas 2 operaciones son las más
importantes de la clase "Set
".
5.b) [11 pts]
Haga la declaración mínima de la clase
"Set
" que usa una lista para almacenar un conjunto de
valores numéricos.
5.c) [0 pts]
Dibuje el
modelo para la clase "Set
".
5.d) [11 pts]
Especifique en formato
"Doxygen"
Set::Insert()
.
5.e) [11 pts]
Implemente
Set::Insert()
.
Adolfo Di Mare <adolfo@di-mare.com>.
|