Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1201
I Semestre 2000
[<=] [home] [<>] [\/] [=>]
CI-1201 Programación II

Examen Final [solución]

      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.

Soluciones

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2000
Derechos de autor reservados © 2000
[home] <> [/\]