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] En este ejercicio, una palabra es una secuencia contigua de caracteres no blancos, en donde un blanco es aquel caracter para el que la función
isspace()
retorna verdadero.
2.a) [13 pts] Especifique la función
PartePalabras()
, que toma una hilera
"str
" llena de palabras, y retorna un vector de hasta
"n
" hileras, en la que aparecen en secuencia las
palabras de la hilera de entrada "str
" (sin blancos).
2.b) [20 pts] Implemente
PartePalabras()
.
3) [33 pts] Para generar un laberinto conviene saber cómo hacer una espiral.
3.a) [6 pts]
Explique cómo se obtiene en Java cada una de las
dimensiones de una matriz. Incluya un ejemplo concreto para una
matriz rectangular de enteros de dimensiones NxM
.
3.b) [5 pts]
Especifique el
método
estático
meteEspiral()
que sirve para grabar las letras que
forman una espiral dentro de la matriz de caracteres. Use los
caracteres '-'
(línea horizontal),
'|'
(línea vertical) y '+'
(esquina), como se muestra en los siguientes diagramas:
+ (1x1) |
-+ ++ (2x2) |
--+ +-| +-+ (3*3) |
-------------------+ +-----------------+| |+----------------|| |+----------------+| +------------------+ (5x20) |
3.c) [22 pts]
Implemente el método meteEspiral()
. No es
necesario que use ciclos anidados: puede contar el número
de iteraciones y utilizar índices que funcionen como
"paredes" en los lugares adecuados. Si lo desea, puede hacer la
espiral al revés.
Adolfo Di Mare <adolfo@di-mare.com>.
|