Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1101
II Semestre 2012
[<=] [home] [<>] [\/] [=>]
CI-1101 Programación I

Examen Final [solución]

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

1.c) [9 pts] Reescriba la rutina 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.

 

Soluciones

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2012
Derechos de autor reservados © 2012
[home] <> [/\]