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]
L->last ───────────────────────────────────────┐ │ ┌────────────┐ ┌────────────┐ ┌───────────┐ │ │ v │ v │ v v │ ┌────────┬───┐ │ ┌────────┬───┐ │ ┌────────┬───┐ │ │ elem_1 │ ├─┼─┘ │ elem_2 │ ├─┼─┘ │ elem_3 │ ├─┼─┐ │ └────────┴───┘ └────────┴───┘ └────────┴───┘ │ │ ^ next ^ │ │ │ │ │ │ first last v └───────<───────────────<────────────────<─────────┘ |
clist
La clase
clist
es una
lista circular, en que el último nodo apunta al primero. A
diferencia de una lista tradicional, en que en el
Rep hay un
puntero al primer nodo, en una lista circular el puntero del
Rep apunta al último nodo, de manera que se pueden
hacer inserciones eficientemente tanto al principio como al final
de la lista.
1.a) [3 pts] Haga la
declaración
mínima de la clase clist
.
1.b) [10 pts] Especifique una rutina que permite intercambiar el primero y segundo valor de una lista circular.
1.c) [20 pts]
Implemente la
rutina que especificó en el punto anterior. Use
únicamente hasta un máximo de 4 instrucciones de
asignación de
punteros y hasta 2
sentencias "if
". No use otro tipo de sentencias.
Evite copiar los valores almacenados en la lista. Su algoritmo
debe ser general, y debe funcionar para listas que tengan
cualquier cantidad de elementos, inclusive cero (0). En su
solución usted puede usar sólo un puntero como
variable temporal.
1.d) [0 pts] Haga un diagrama que muestra el estado de la lista después de que se ejecuta cada instrucción de asignación.
2) [33 pts] Un palíndromo es una palabra que se lee igual al derecho que al revés.
2.a) [5 pts] Explique por qué y para qué
hace falta usar el archivo "Tdef.h
" para implementar
el algoritmo
bool Palindromo(const Contenedor& C);
2.b) [5 pts] Explique cuál(es)
iterador(es) deben estar definidos para la clase
Contenedor
. En su respuesta, incluya un
declaración (sin implementaciones) de los componentes
más relevantes de esa clase contenedora y de su(s)
iterador(es). En su
implementación
usted NO puede accesar el
Rep del contendor.
2.c) [8 pts] Especifique la función
bool Palindromo(const Contenedor& C);
que regresa "true
" si al recorrer el
contenedor
"C
" hacia adelante se obtiene el mismo resultado que
al recorrerlo hacia atrás.
Por ejemplo:
Palindromo([1 2 3 2 1]) ==> true Palindromo([1 2 3 2 0]) ==> false Palindromo([r a d a r]) ==> true Palindromo([M A J E M]) ==> false Palindromo([A N I T A L A V A L A T I N A]) ==> true
2.d) [10 pts] Implemente Palindromo()
. En
su implementación debe utilizar iteradores.
2.e) [5 pts] Reescriba su implementación pero use
para los operadores sobrecargados el nombre que se les da en la
declaración. Por ejemplo, si en el algoritmo original
aparece a + b
, reescriba la
implementación para que se lea operator+(a,b)
.
3) [33 pts]
Escriba un programa que utilice dos archivos de
implementación [uno.cpp
y
dos.cpp
] y un archivo de encabezados
[uno.h
] que tenga un error pueda sólo ser
detectado por el editor de eslabonamiento ("linker").
3.a) [10 pts] Escriba el código de los tres archivos.
3.b) [15 pts] Explique cómo funciona el sistema de compilación separada de C++. Incluya diagramas explicativos y un ejemplo explicativo usando los módulos que ha programado en la quinta tarea. No se olvide de usar diagramas explicativos en su respuesta.
3.c) [8 pts] Explique cómo funciona la compilación separada de los archivos que forman la solución a la quinta tarea programada. Incluya diagramas explicativos. Mencione también si en este caso podría producirse inclusión múltiple.
4) [33 pts] Haga un programa C++ que lea un archivo y cuente, para cada letra del alfabeto, la cantidad de letras mayúsculas, minúsculas y números e imprima los totales, para cada una de las letras del alfabeto y cada uno de los dígitos decimales. Recuerde que, en Costa Rica, la pareja "CH" es una letra, y que también el alfabeto incluye a la letra "Ñ". Use como base las clases que usted implementó en la quinta tarea programada. Incluya la declaración mínima de esas clases, que contiene únicamente la declaración de la clase y la declaración de los métodos que use en su implementación.
Adolfo Di Mare <adolfo@di-mare.com>.
|