| 
  Universidad de Costa Rica  | 
 | 
| ![[<=]](../../../img/back.gif)  ![[home]](../../../img/home.gif)  | ![[<>]](../../../img/index.gif)  | ![[\/]](../../../img/bottom.gif)  ![[=>]](../../../img/next.gif)  | 
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.
![[mailto:]](../../../img/mailbox.gif) Adolfo Di Mare <adolfo@di-mare.com>.
  Adolfo Di Mare <adolfo@di-mare.com>.
| ![[home]](../../../img/home.gif)  |   | ![[/\]](../../../img/top.gif)  |