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>.
|
|
|