Universidad de Costa Rica
|
|
Duración: Ciento veinte 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 todas las preguntas. ¡No haga más de lo que se le pide!
1) [33 pts]
1.a) [3 pts] Haga el
modelo (diagrama) de
la clase Paralelo
que contiene dos vectores, el
primero de enteros pequeños int
y el segundo
vector de enteros grandes long
.
1.b) [6 pts]
Declare la clase Paralelo
. Todos los campos del
Rep de su clase
deben ser privados.
Recuerde que la diferencia entre "definir" y "declarar" un objeto
en C++ es que las declaraciones se ponen en los archivos de
encabezados <*.h> y <*.hpp> ,
mientras que las definiciones están en los archivos de
implementación <*.c> y
<*.cpp> .
|
1.c) [12 pts]
Considere la clase Bolsa
que se muestra
a continuación. Supongo que el
Rep de la
Bolsa
tiene el campo "m_vec
" que es de
tipo Paralelo
.
Implemente el
método
Bolsa::Esta()
.
class Bolsa {
public:
int Esta(long i); // # de veces que "i" Está() en la Bolsa
void Agrega(long i); // incrementa "Esta(i)"
// ...
}; // Bolsa
Bolsa
1.d) [12 pts]
Especifique e implemente todos los métodos de la clase
Paralelo
que usó en la implementación
de Bolsa::Esta()
.
Use el formato
Doxygen e incluya los datos
de prueba
BUnit.
2) [33 pts] Considere la clase
lista
que cuenta con
las operaciones lista::intercambie(i)
,
lista::pop()
y lista::push(v)
. La
primera intercambia los valores que es encuentran en la
posición
"*i
" y "*(++i)
" de la lista, la segunda
remueve de la lista el primer valor y luego lo retorna y la
tercera agrega un valor al principio de la lista.
2.a) [3 pts]
Especifique lista::intercambie(i)
.
Recuerde usar siempre el formato
Doxygen e incluir los datos
de prueba
BUnit.
2.b) [3 pts]
Especifique lista::push(v)
y
lista::pop()
.
2.c) [7 pts]
Especifique Particion()
que separa una lista en dos
listas, de manera que los valores que quedan en la primera lista
son mayores que el parámetro
"pivote
" de Particion()
, y los
de la segunda son los demás valores almacenados en la lista
original.
2.d) [20 pts]
Implemente Particion()
. Como esta función no
es amiga (friend
) de la clase lista
, al
escribir su implementación use la operaciones
lista::push(v)
y lista::pop()
y alguna
de lista::intercambie(i)
o
lista::isEmpty()
.
3) [33 pts] La función "
rotalina(L,i,n)
" para la clase
"std::list<>
" sirve para rotar circularmente una
parte de la lista:
(a b [c d e] f) ==> (a b [e c d] f) i---> i---> n=3 n=3
3.a) [11 pts]
Especifique "rotalina(L,i,n)
". Incluya los datos
de prueba
BUnit y use el formato
Doxygen.
3.b) [11 pts]
Implemente "OrdeneLista(L)<>
". Use la
función "rotalina(L,i,n)
",
iteradores
y el operador de comparación.
3.c) [11 pts]
Implemente "rotalina(L,i,n)
". Use
"splice<>()
" para evitar copiar los valores de la
lista.
Adolfo Di Mare <adolfo@di-mare.com>.
|