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 todas las 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] Una ventaja de los iteradores Java es que basta una sola variable para recorrer un contenedor.
2.a) [22 pts]
Escriba el
archivo de encabezado para el iterador itrAcum.h
que sirve para recorrer una lista visitando el primer elemento una
vez, el segundo dos, hasta retornar el
n-ésimo n veces. Por ejemplo, si L==(a,b,c)
el iterador retornará a los elementos en el orden (a b b c
c c). Incluya la
especificación de
su
iterador junto con
los datos de prueba
BUnit.h. En su
respuesta usted debe usar el siguiente
Rep para el iterador:
TYPE
Rep_Acum = RECORD
c : Lpos_T; { list<>::iterator actual }
i : UNSIGNED; { Número del elemento actual }
{ 0 <= i <= L.size() }
countL, { L.size() }
k : UNSIGNED; { Veces que se ha retornado }
{ el i-ésimo elemento }
L : ^List_P; { Puntero a la lista que se recorre }
END;
2.b) [11 pts] Implemente el iterador.
letroso" es una clase que contiene una secuencia de caracteres a la que
se le pueden aplicar estas operaciones:
asigne(const char* str)str" para darle valor al letroso.
cuenta()q=soyLetroso(p,n,ch)q" la posición en donde se pueden encontrar "n" letras consecutivas e iguales a "ch", pero con la restricción de que p<=q.
grabe()
3.a) [0 pts]
Implemente operator=( const char* ) para la clase letroso.
(No se le meta al
Rep).
3.b) [11 pts]
Especifique soyLetroso().
Use ejemplos BUnit.
3.c) [11 pts]
Defina el Rep para la clase.
Implemente soyLetroso().
soyLetroso()
encuentra las letras "ch" consecutivas en posiciones cada
vez mís altas del índice. Use la clase
letroso para implementar
esLetrosario(n,ch,STR). No se le meta al Rep de letroso:
assertTrue( esLetrosario( 5, 'A', "..A..AA...AAA...AAAA...AAAAA..." ) ); assertTrue( esLetrosario( 3, 'A', "A..AA...AAA..." ) ); assertFalse( esLetrosario( 2, 'A', "..AA..A.." ) ); // están al revés
Adolfo Di Mare <adolfo@di-mare.com>.
|
|
|