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 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]
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.
Adolfo Di Mare <adolfo@di-mare.com>.
|