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

Examen Final [solución]

      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 todas las preguntas. ¡No haga más de lo que se le pide!

1) [33 pts] Escriba el programa Palabras.cpp que sirve para corregir errores en un archivo de texto. Lee del archivo CORRECCION parejas de hileras, que corresponden a una palabra incorrecta y a la correspondiente corrección. Por ejemplo, si en el archivo CORRECCION aparece la pareja de palabras (acc, accidente), es porque hay que sustituir la palabra "acc" por "accidente". Por supuesto, la sustitución debe hacerse inteligentemente, únicamente cuando la hilera "acc" es, por sí sola, una palabra, para evitar que "accidente" termine siendo la palabra "accaccidente". A diferencia de la sétima tarea, una palabra es cualquier hilera de letras que no tiene blancos en el medio.

 

2) [33 pts]

           L
           |
           v
     +-------------+   +-------------+   +-------------+   +-------------+
     |   |     | *-+-->|   |     | *-+-->|   |     | *-+-->|   |     | *-+-> NIL
     |   | 2.2 |   |   |   | 4.5 |   |   |   | 2.2 |   |   |   | 1.3 |   |
NIL<-+-* |     |   |<--+-* |     |   |<--+-* |     |   |<--+-* |     |   |
     +-------------+   +-------------+   +-------------+   +-------------+

2.a) [0 pts] Escriba la declaración de las clases Arbol y Lista, que tienen la característica que usan el mismo tipo de nodo.

2.b) [7 pts] Especifique la función Arboleador() que toma una lista, similar a la de la figura de arriba, y la convierta en un árbol binario ordenado el que, al ser recorrido en inorden, tiene en orden creciente los nodos, aún si hay duplicados. Incluya un ejemplo de qué hace esta función. Si lo desea, puede basarse en la especificación genérica para la operación Move().

2.c) [26 pts] Implemente la función Arboleador(), pero evite copiar nodos en su implementación. Además, debe usar recursividad. Use los campos "_izq" y "_der" del nodo de la lista para crear el árbol, sin usar nuevos nodos. Como documentación interna, explique cómo funciona su implementación.

 

3) [33 pts] Para programar el Sistema de Matrícula de la Escuela es necesario usar una matriz que contenga los niveles de requisitos de los cursos de la carrera. A continuación se muestra cómo surge esta matriz.

                Requisitos inmediatos
                =====================

Requisito: CI-1100 ==> CI-1201    CI-1100     CI-1101
Requisito: CI-1101 ==> CI-1201          \      /
Requisito: CI-1201 ==> CI-1301          CI-1201
                                           |
                                        CI-1301

      En esta tabla se muestra que CI-1201 es requisito de nivel 1 para CI-1301, y que los dos requisitos de nivel 1 para CI-1201 son CI-1100 y CI-1101. Por transitividad resulta que CI-1100 y CI-1101 son requisitos de nivel 2 para CI-1301. La matriz de niveles de requisitos para esta tabla es la siguiente:

         CI-1100     CI-1101    CI-1201   CI-1301
CI-1100     0           0          1         2
CI-1101     0           0          1         2
CI-1201     0           0          0         1
CI-1301     0           0          0         0

3.a) [3 pts] Dibuje el modelo (diagrama) para esta clase. Explique por qué lo ha escogido.

3.b) [3 pts] En el caso de una pila, las operaciones que le caracterizan son Push() y Pop(). Explique cuáles son las operaciones que caracterizan a la clase Matriz_Requisito.

3.c) [7 pts] Escriba las declaraciones C++ para clase Matriz_Requisito. Su respuesta debe ser completa pues debe incluir las operaciones básicas de la clase.

3.d) [8 pts] Especifique las operaciones que caracterizan a la clase Matriz_Requisito.

3.e) [8 pts] Implemente en C++ la operación que sirve para cargar los valores de Matriz_Requisito. Su implementación debe ser eficiente (puede usar la biblioteca STL).

3.f) [4 pts] Implemente en C++ la operación que sirve para usar los valores almacenados en la clase Matriz_Requisito.

3.g) [0 pts] Discuta si la clase Matriz_Requisito es o no un contenedor.

Soluciones

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