Universidad de Costa Rica
|
|
Duración: tres horas. 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 sólo cuatro preguntas. ¡No haga más de lo que se le pide!
1) [25 pts]
Escriba la
especificación
de clase TOrden
, que permite almacenar una cantidad
no especificada de valores, para los que está definida la
operación de comparación
"x<y
", que determina si el valor
"x
" es "menor" que
"y
". Describa la forma en que usted
implementaría este objeto.
Luego escriba un iterador que retorne los elementos almacenados en
TOrden
de menor a mayor. Explique primero su
implementación. Su iterador debe hacer un muy eficiente uso
de la MEMORIA, aunque sea muy lerdo. La idea es que su iterador
libere memoria dinámica tan pronto como pueda. Incluya un
ejemplo de uso de su iterador y su clase.
2) [25 pts]
Considere el algoritmo Sort()
que ordena valores para
los que está definida la operación de
comparación "x<y
", que que
determina si el valor "x
" es
"menor" que "y
".
2.a) [5 pts] Especifique Sort()
.
2.b) [20 pts] Haga los casos de prueba y los datos de
prueba para Sort()
.
3) [25 pts]
Declare la clase TDibujo
. Un TDibujo
es
un área de nxm celdas, y cada celda puede estar llena o
vacía. Si todas las celdas están vacías, se
dice que el TDibujo
está en blanco o que no
hay TFiguras. Si una o más celdas están llenas se
dice que el dibujo tiene TFiguras
.
Las TFiguras
pueden ser de cuatro tipos: punto,
línea recta, rectángulo y círculo. El punto
se identifica por una celda; la recta por dos celdas; el
rectángulo por la celda de la esquina superior izquierda,
el ancho y el largo y el círculo por la celda central y el
radio.
Un ejemplo de una aplicación práctica de este clase es hacer un dibujo, donde se puedan agregar figuras, eliminar figuras, cambiar la dimensión de una figura, etc. En todos los casos se debe identificar completamente la figura con la que se desea trabajar.
3.a) [10 pts]
Declare la clase TDibujo
. Especifique tanto el
modelo como las
operaciones. Si lo
considera necesario puede declarar su clase como
combinación de otros clase más básicas o
utilizando otra clase pero, en cualquier caso, deber declarar
todos las clases involucradas.
3.b) [15 pts]
Describa una posible implementación para el modelo de la
clase TDibujo
. Comente las ventajas y desventajas de
su implementación.
4) [25 pts]
Especifique e implemente el operador Particion()
para
la clase List2
de la
segunda tarea programada, el 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. Evite copiar cualquier valor almacenado en la lista.
5) [25 pts]
Especifique e implemente el operador Reverse()
que
toma a la lista L
y la vuelve al revés. Por
ejemplo, si L = (1,2,3,4,5)
entonces
Reverse(L)
la transforma en (5,4,3,2,1)
.
Al implemetar Reverse()
, debe usar recursividad
adecuadamente. Note que usted deberá accesar el
Rep
de la lista circular, no el de la lista doblemente enlazada. Su
implementación debe cambiar la dirección de los
punteros de la lista L
, sin copiar, destruir o
construir nodos.
6) [25 pts] Para hacer una simulación usted debe manejar un arreglo de listas de árboles cuyos nodos son personas. Usando las clases que usted ha usado a lo largo del curso, diga como debe combinarlas para obtener esa clase. Declare todas las clases.
Adolfo Di Mare <adolfo@di-mare.com>.
|