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. ¡No haga más de lo que se le pide!
1) [25 pts] Considere la clase de números racionales que usted implementó en la Tarea #3.
1.a) [10 pts]
Haga la declaración C++ de la clase TRational
,
pero en lugar de usar dos campos numéricos
"(num, den)
" en el
Rep de la
clase, use un lista en donde se almacen esos valores. Suponga que,
en su clase TRational
, los números enteros se
representan con una lista que tiene un único elemento, y el
cero con la lista nula.
1.b) [5 pts]
Implemente la operación privada
TRational::Divide(const TRational&)
.
1.c) [5 pts]
Implemente
operator / (const TRational&, const TRational&)
.
1.d) [5 pts] Discuta las ventajas y desventajas de usar la lista como Rep para números racionales.
2) [25 pts]
Use la implementación de su clase
TList
, que
programó en la
Tarea #4, para implementar la
operación TList::Reverse()
.
2.a) [5 pts] Describa cuál es el modelo (diagrama) que usted usó en su implementación. Describa también el Rep que usó. Justifique por qué escogió ese modelo.
2.b) [10 pts]
Especifique la operación TList::Reverse()
.
2.c) [10 pts]
Implemente la operación TList::Reverse()
.
3) [25 pts] Considere los iteradores que usted usó en la Tarea #5 para implementar polinomios.
3.a) [4 pts] Explique qué es un iterador.
3.b) [3 pts] Incluya una sección de código C++ que muestre cómo se usa un iterador.
3.c) [8 pts] Especifique todas las operaciones de un iterador que permita recorrer, en orden inverso, todos los elementos de la lista.
3.d) [10 pts] Implemente el iterador. Asuma que el Rep de la lista es un puntero al último elemento, y que la lista es circular.
4) [25 pts] Escriba el programa
LNGST.c++
que lea un archivo y
cuenta la cantidad de líneas que contiene, y que indique
también cuál es la longitud de la línea
más larga del archivo. El formato de salida del programa es
el siguiente:
C:\> lngst archivo.*
lines:max file: line
5345:40 archivo.uno: 123456789.123456789.123456789.123456789
125:850 archivo.dos: 123456789.123456789.123456789.123456789. >>>
2235:26 archivo.txt: El Pacuare está en peligro
Recuerde que un renglón puede ser arbitrariamente grande,
de varios megabytes de longitud. Sin embargo, limítese a
imprimir únicamente los primeros 40 caracteres del
renglón. Cuando el renglón sea más largo,
imprima los símbolos ">>>
" al final.
Para facilitar su trabajo, no es necesario que el programa procese
varios archivos desde la línea de comandos.
Adolfo Di Mare <adolfo@di-mare.com>.
|