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] 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 "Ñ". (Sugerencia: use como base las clases que usted implementó en la segunda tarea programada, en cuyo caso únicamente ponga la declaración de la clase y la declaración de los métodos que use en su implementación).
2) [33 pts] Considere la clase
lista
que usted ya ha
usado y suponga, además, que la lista
cuenta
con el iterador lista::iter
que sirve para recorrerla
desde principio a fin.
2.a) [5 pts]
Declare el iterador lista::ordenado
que sirve para
obtener los elementos almacenados en la lista en orden de menor a
mayor.
2.b) [28 pts]
Implemente las operaciones de su iterador
lista::ordenado
usando como base el iterador
lista::iter
. Su iterador debe hacer un muy eficiente
uso de la MEMORIA, aunque sea muy lerdo; por eso, en su
implementación no use listas ni vectores, ni cualquier tipo
de contenedor. Explique cómo funciona su
implementación.
3) [33 pts] La clase
Dia
sirve para usar en los programas fechas,
y la clase Hora
para usar horas, minutos y segundos.
3.a) [4 pts]
Haga la
declaración
de la clase Dia
. Incluya las operaciones más
relevantes que un
programador
cliente de la clase usaría. (Recuerde que en el libro
de
Deitel & Deitel
está una implementación que usted puede usar de
modelo). Omita declarar las operaciones de entrada salida y
comparación.
3.b) [7 pts]
Haga la
declaración
de la clase Hora
. Incluya las operaciones más
relevantes que un
programador
cliente de la clase usaría. Omita declarar las
operaciones de entrada salida y comparación.
3.c) [11 pts]
Un Momento
incluye tanto la fecha como la hora, por
lo que tiene sentido implementar la clase Momento
en
términos de las clases Dia
y
Hora
. Declare la clase Momento
de tres
formas: primero derivándola de Dia
, segundo
derivándola de Hora
y, por último,
incluyendo dos campos en el
Rep para
almacenar el día y la hora. No olvide declarar los
operadores aritméticos e incluir una pequeña
especificación
para cada uno de ellos.
3.d) [11 pts]
Tomando en cuenta las operaciones para las clases Dia
y Hora
que usted ha declarado, indique cuál es
la forma ideal de implementar la clase Momento
(suponga que no debe usar herencia múltiple).
¿Qué problemas hay con la suma y la resta?
4) [33 pts] Juan Stvdivm estudia día a día su materia, y descubrió que en el libro de Deitel & Deitel está implementada la clase
HugeInt
, la que utilizó para implementar la
primera parte de la
tercera tarea programada. Luego de
hacer todo el trabajo para implementar los algoritmos de la clase
MegaNum
con vectores, decidió robarle la
vuelta al profesor, e implementar un
vector usando como base la
clase lista para evitar programar todos los algoritmos para la
clase MegaNum
de nuevo, usando listas.
4.a) [11 pts]
Haga la
declaración
de la clase Vector
, y declare todas las operaciones
que se necesitan para que la implementación de los
algoritmos de la clase MegaNum
que usan un arreglo de
número compile correctamente al cambiarle el
Rep por
su Vector
simulado. De esta manera usted
sustituirá el arreglo de números por su
Vector
simulado, que está basado en la
lista
.
4.b) [11 pts]
Describa qué cambios hay que hacer en la
implementación de los algoritmos de la clase
MegaNum
para que los programas compilen bien. Use la
directiva #include
del compilador para poder usar el
mismo archivo para ambas implementaciones. Explique por qué
el programa que antes usaba vectores compilará
correctamente si se usa su nueva clase Vector
.
4.c) [11 pts]
Especifique e implemente el operador de acceso al vector por medio
de un subíndice: A[i]
. Puede usar los
iteradores de la lista, pero no accese directamente el
Rep de la lista.
Adolfo Di Mare <adolfo@di-mare.com>.
|