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 las tres preguntas. ¡No haga más de lo que se le pide!
1) [33 pts] Considere la rutina
bUNga()
:
template <class T> void starList( std::string& str, const std::list<T>& L ); void bUNga(long BUNGA,std::list<long>&bunga ){long BunGa=1;bool noEs = false;while ( (!noEs)&&(BunGa<BUNGA/2)){++ BunGa;noEs=(BUNGA%BunGa==0);}if( noEs){bunga.push_back(BunGa);bUNga (BUNGA/BunGa,bunga);}}
1.a) [0 pts] Justifique cada una de las reglas de indentación usadas en el curso. Discuta si esas reglas son convenciones de programación apropiadas para C++.
1.b) [0 pts]
Especifique e implemente la rutina emplantillada
starList()
que toma la lista L=(1,2,17)
y la almacena en "str
" separando los valores de la
lista con una estrella '*'
.
bUNga()
de
acuerdo a las convenciones de
programación que ha practicado
en sus programas.
1.d) [9 pts]
Escriba la
especificación completa para esta rutina. Incluya los
datos de prueba
BUnit.
1.e) [15 pts]
Muestre el resultado de ejecutar la rutina con el valor
20
y una lista vacía. Muestre cómo se
ve la pila de ejecución junto con los registros de
activación,
paso por paso, en la
recursividad.
1.f) [0 pts]
Modifique su rutina para que funcione correctamente.
2) [33 pts] Jimmy Neutron ha estado muy ocupado descubriendo los secretos de la CIA, para lo que ha interceptado mucho archivos que contienen renglones. Para pre-procesarlos, necesita encontrar los 2 tipos de renglones más largos de cada archivo, y almacenarlos en un archivo de texto. Recuerde que si hay varios renglones de longitud máxima, el programa debe extraerlos todos. Por ejemplo, si ha 3 renglones de 155 letras y 4 de 154 letras, en donde la longitud máxima del renglón es 155, el programa deberá extraer un total de 7 renglones. Implemente el programa completo.
3) [33 pts] La matriz chisquirrisquitirrisquititica no incluye una clase vector que le permita al programador cliente de la clase manipular una columna completa. Diseñe 2 clases amigas, "
Matriz
" y
"Columna
", de manera que el programador cliente pueda
obtener y manipular una columna completa de la matriz.
M |-----------------> m_ptr[]->[*][*][*][*][*][*][*] | | | | | | | v v v v v v v / [*][*][*][*][*][*][*] | [*][*][*][*][*][*][*] Matriz[NxM]: | [*][*][*][*][*][*][*] - N filas N| [*][*][*][*][*][*][*] - M Columnas | [*][*][*][*][*][*][*] \ [*][*][*][*][*][*][*] |
3.a) [6 pts]
Declare el
Rep
de las clases "Matriz
" y "Columna
" de
manera que cada "Columna
" contenga un vector y
"Matriz
" contenga un vector de
punteros a cada una
de las columnas. Suponga que la matriz es densa. Respecte los
siguientes requerimientos en el Rep:
m_ptr[]
" es un vector de "M" punteros.m_ptr[i]
" es un vector de "N" valores.Matriz[i][j]
" siempre toma 2 brincos,
pues es necesario usar el vector indirecto de "M"
punteros.3.b) [7 pts] Especifique e implemente una operación que le permita al programador cliente obtener una columna completa de la matriz. No copie la columna.
3.c) [7 pts] Especifique e implemente una operación que le permita al programador usuario accesar uno de los valores de la matriz.
3.d) [6 pts] Especifique e implemente una operación que le permita al programador usuario intercambiar 2 filas de la matriz.
3.e) [7 pts] Especifique e implemente una operación que le permita al programador usuario intercambiar 2 columnas de la matriz. Su implementación debe ser rápida y eficiente.
Adolfo Di Mare <adolfo@di-mare.com>.
|