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

Examen Final [solución]

      Duración: Ciento veinte minutos. 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] La función "rotalina(L,i,n)" para la clase "std::list<>" sirve para rotar circularmente una parte de la lista:
(a b [c d e] f) ==> (a b [e c d] f)
      i--->               i--->
       n=3                 n=3

1.a) [11 pts] Especifique "rotalina(L,i,n)". Incluya los datos de prueba BUnit y use el formato Doxygen.

1.b) [11 pts] Implemente "OrdeneLista(L)<>". Use la función "rotalina(L,i,n)", iteradores y el operador de comparación.

1.c) [11 pts] Implemente "rotalina(L,i,n)". Use "splice<>()" para evitar copiar los valores de la lista.

 

2) [33 pts] Para usar bases de datos en programas C++ los programadores usan una biblioteca de rutinas que reciben los comandos y retornan los valores de la base de datos. Suponga que ya la biblioteca define el objeto C++ "tabla" que sirve para acceder a los valores que resultan de una consulta que se formula por medio del objeto "consulta".

2.a) [11 pts] Especifique los método de la clase "tabla" que permiten obtener los renglones de la tabla resultado junto con los valores para cada uno de los campos. Tome en cuenta que los tipos de los campos pueden ser "int", "double" o "char*". También incluya el método "ordenador()" que permite definir el orden en que los renglones de la tabla serán recuperados, de acuerdo a uno o más valores de las columnas.

2.b) [11 pts] Use herencia para incorporar la funcionalidad de su clase "tabla" en un programa que obtiene 2 tablas, llamadas "alumno(carnet,nombre,promedio)" y "curso(carnet,sigla,nota)" para imprimir la lista de clases de un curso (sin notas). Implemente el programa completo.

2.c) [6 pts] Como sus clases "alumno" y "curso" se han obtenido por herencia, en muchos casos el compilador no impedirá que se asigne una variable de un tipo a la otra. Modifique su clase "tabla" para evitar este problema de copia; incluya ejemplos BUnit en los que se detecta este error en tiempo de ejecución.

2.d) [5 pts] Explique si es necesario usar excepciones para manejar el problema de copia. Si es posible, proponga una solución para que el error sea detectado en tiempo de compilación.

 

3) [33 pts] Implemente un programa completo que lea de un archivo un conjunto de palabras clave, todas escritas en letras minúsculas. El segundo argumento de su programa es un archivo lleno de renglones en los que usted buscará las palabras mencionadas en el archivo de palabras clave (ignore las diferencias entre minúsculas y mayúsculas). Después de examinar cada renglón, su programa debe imprimir, para cada palabra clave, todos los renglones del segundo archivo en donde esa palabra aparece. Evite leer más de una vez cualquiera de los archivos. Use los contenedores adecuados que le permitan lograr buena eficiencia en tiempo de ejecución.

 

Soluciones

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