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

Examen #2 [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 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 '*'.

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

 

3) [33 pts] Un "letroso" es una clase que contiene una secuencia de caracteres a la que se le pueden aplicar estas operaciones:
asigne(const char* str)
Usa la hilera "str" para darle valor al letroso.
cuenta()
Cantidad de letras.
q=soyLetroso(p,n,ch)
Retorna "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()
Imprime al letroso.

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

3.d) [11 pts] Un Letrosario es una hilera en la que 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

 

Soluciones

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