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

Examen #1 [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] Una forma de grabar el valor de uno de los polinomios de la segunda tarea programada es utilizar el siguiente algoritmo:
void graba( const poly& P ) {
    iterPoly it( P ); // iterador sobre los coeficientes del polinomio
    int i=0;
    while ( it.hasNext() ) {
        float coef = it.next();
        if ( coef != 0.0 ) {
            cout << coef;
            if ( i > 0 ) { cout << " X"; }
            if ( i > 1 ) { cout << "^" << i; }
            if ( it.hasNext() ) { cout << " + " }
        }
        ++i;
    }
}

1.a) [0 pts] Suponga que el Rep de la clase iterPoly contiene 2 campos: un número entero que indica el grado del siguiente coeficiente que será retornado por next() [poly::grado()] y un puntero al polinomio sobre el que next() y hasNext() trabajan. Explique si el constructor de la clase está bien implementado:
      iterPoly( const poly& P ) : m_grd(0), m_P(& P) { }

1.b) [7 pts] Explique si es necesario o no que hasNext() puede ser invocado una cantidad infinita de veces (pues es un método const). Explique lo mismo para next(), que es el método que se encarga de retornar los coeficientes del polinomio [poly::coef()].

1.c) [12 pts] Especifique los métodos next() y hasNext().

1.d) [14 pts] Implemente next() y hasNext(): ¡No se le meta al Rep de la clase polinomio!

 

2) [33 pts] Es una verdad bien conocida que los autores del Código Da Vinci descubrieron frases secretas codificadas en la Biblia. Usted creará una biblioteca que permita encontrar esas frases.

2.a) [5 pts] Especifique la función "CuentaLetras()" que toma una hilera C++ y le elimina todos los caracteres alfabéticos sustituyéndolos por el número de veces que aparece esa letra en el renglón, módulo 7. Recuerde usar la función booleana "isalpha()" que retorna "true" si su argumento es alfabético. Incluya ejemplos de prueba BUnit en su especificación.

2.b) [12 pts] Implemente "CuentaLetras()".

2.c) [16 pts] Especifique e implemente la función "Bomba(s,b)" que busca la hilera "s" como una subsecuencia dentro de la hilera "b".

2.d) [0 pts] Explique cómo usar estas 2 funciones para encontrar los mensajes secretos ocultos en la Biblia.

 

3) [33 pts] Una Escalera es un contendor que en cada posición contiene un valor adicional a la cantidad de valores almacenados en la posición anterior. Por ejemplo, si la escalera contiene letras, al construir la escalera a partir de la hilera "ijos4", el valor almacenado sería este:
[0] i
[1] jj
[2] ooo
[3] ssss
[4] 44444

3.a) [7 pts] Diseñe el contenedor Escalera. Escriba la declaración del Rep. Use plantillas.

3.b) [7 pts] Implemente el constructor que recibe un vector de objetos. Recuerde que todos los valores de un peldaño son iguales.

3.c) [3 pts] Implemente el constructor de copia para la Escalera.

3.d) [3 pts] Especifique e implemente la operación push_front() para la Escalera. Use el formato Doxygen e incluya los datos de prueba BUnit.

3.e) [3 pts] Especifique e implemente la operación pop_back() para la Escalera. Use el formato Doxygen e incluya los datos de prueba BUnit.

3.f) [10 pts] La operación valid(i,j) retorna un puntero al valor almacenado en el peldaño "i" de la escalera, siempre y cuando "j" no se salga de la cantidad de valores almacenados en la escalera. De otra manera, valid() retorna el puntero nulo (0). Especifique e implemente valid(). Use el formato Doxygen e incluya los datos de prueba BUnit.

 

Soluciones

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