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

Examen #2 [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 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.

 

Soluciones

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