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] El programa "
Nmbag.cpp
" sirve para leer
números y contar cuántas veces aparece cada uno.
Implemente la parte de la clase "Nmbag
" que se
necesita para que este programa funcione.
int main() { Nmbag B; // la mega-bolsota long n; // lee todos los valores while (cin >> n) { B.Inc(n); } for (n=0; n<LONG_MAX; ++n) { if (0 != B[n]) { cout << n << " está " << B[n]; cout << " veces en la bolsa" << endl; } } return 0; } // main() |
1.a) [7 pts]
Defina el
Rep
para la clase. Suponga que nunca ocurrirá que necesite
almancenar más de 4096
valores diferentes en
su "Nmbag
".
1.b) [1 pts] Implemente el constructor y el destructor para la clase.
1.c) [11 pts]
Especifique e
implemente la operación
examinadora
"B[n]
". Use el formato
Doxygen e incluya los datos
de prueba
BUnit.
1.d) [14 pts]
Especifique e
implemente
la operación
mutadora
"B.Inc(n)
". Use el formato
Doxygen e incluya los datos
de prueba
BUnit.
1.e) [0 pts]
Mejore la eficiencia de la operación "B[n]
" usando
búsqueda binaria. Explique por qué esto no
mejora la implementación de "B.Inc(n)
".
2) [33 pts] La forma natural de ver el valor de un número racional es como una fracción de la forma
[a/b]
. Suponga
que ya usted cuenta con la función pchr2rat()
que sirve para extraer un valor racional de una hilera.
2.a) [11 pts]
Especifique la función pchr2rat()
que
obtiene un valor racional de la hilera que recibe como argumento y
luegor returna un puntero (const char*)
a la
hilera que recibe como argumento, indicando adónde
está el resto de la hilera que hay que procesar. Por
ejemplo, si la hilera str
contiene el valor
"...[25/5]---"
, la invocación
pchr2rat(&str[3], rat)
le cambiará a la
variable racional "rat
" su valor para que contenga
[5/1]
y el puntero retornado por
pchr2rat()
apuntará al primer guión
"-
" de la hilera str
que aparece
después de [25/5]
. Use el formato
Doxygen e incluya los datos
de prueba
BUnit.
2.b) [11 pts]
Especifiquie la función make_MatrixRational()
que permite obtener el valor de una matriz de números
racionales a partir de una hilera. Debe funcionar de manera
similar a la de la
segunda tarea programada. Use el
formato
Doxygen e incluya los datos
de prueba
BUnit.
2.c) [11 pts]
Implemente
make_MatrixRational()
.
3) [33 pts] El "candado" es un juego que consiste en rotar las columans de una matriz 1, 2, 3, etc veces, de izquierda a derecha.
1 a V 2 c Y 2 b W ==\ 3 d Z 3 c X > 4 e V 4 d Y ==/ 5 a W 5 e Z 1 b X
3.a) [11 pts]
Especifique a función rotaCol()
que sirve
para rotar los valores de una columna en una matriz. Use el
formato
Doxygen e incluya los datos
de prueba
BUnit.
3.b) [11 pts]
Especifique la función candado()
para
matrices. Use el formato
Doxygen e incluya los datos
de prueba
BUnit.
3.c) [11 pts]
Implemente
candado()
.
Adolfo Di Mare <adolfo@di-mare.com>.
|