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>.
|
|
|