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