Universidad de Costa Rica
|
|
Duración: dos horas. 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 tres de las cuatro preguntas. ¡No haga más de lo que se le pide!
1) [33 pts] Considere la clase
Arbol
, en que cada nodo tiene un
vector que apunta a sus hijos:
class Arbol { class nodo { nodo * m_h[21]; // hasta 21 punteros a los hijos Banana m_val; // valor almacenado en el nodo }; // nodo friend bool Es_Completo(const Arbol & T); nodo * m_raiz; }; // Arbol |
1.a) [0 pts] Dibuje el
modelo (diagrama) que
corresponde a la clase Arbol
.
1.b) [11 pts] Especifique la función
Es_Completo()
que retorna
true
cuando cada nodo tiene el mismo número de
hijos o CERO.
1.c) [11 pts] Defina la
invariante para
la clase Arbol
. Implemente un método que
verifique la invariante de la clase.
1.d) [11 pts] Implemente Es_Completo()
.
2) [33 pts]
2.a) [8 pts] Explique por qué se usa la abstracción en programación. Use código C++ para complementar su explicación.
2.b) [8 pts] Explique por qué se usa la especificación en programación. Use código C++ para complementar su explicación.
2.c) [4 pts] Explique qué es la implementación en programación.
2.d) [13 pts] Explique cuáles son las diferencias entre los conceptos de "Abstracción", "Especificación", e "Implementación". Use código C++ para complementar su explicación.
3) [33 pts] Considere la operación para racionales
Exp(x,y)
, que calcula el valor de
"x
" elevado a la potencia "y
", en donde
"y
" es un número entero.
3.a) [7 pts]
Declare la operación Exp(x,y)
.
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> .
|
3.b) [16 pts]
Implemente Exp(x,y)
. Debe accesar el
Rep de la clase
para asegurar que su implementación es eficiente.
3.c) [4 pts]
¿Porqué debe o no invocar a
rational::simplify()
en la implementación
de Exp(x,y)
?
3.d) [7 pts]
¿Qué desventajas tiene que la función
Exp()
sea un miembro de la clase
rational
?
4) [33 pts]
4.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
.
4.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> .
|
4.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
4.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.
Adolfo Di Mare <adolfo@di-mare.com>.
|