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