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] 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.
Adolfo Di Mare <adolfo@di-mare.com>.
|
|
|