Universidad de Costa Rica
|
|
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.
Adolfo Di Mare <adolfo@di-mare.com>.
|