Universidad de Costa Rica
|
|
Duración: 2 horas. 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] Un palíndromo es una palabra que se lee igual al derecho que al revés.
1.a) [6 pts]
Use ejemplos
BUnit para especificar la
función
bool palindromo(const std::list<char>& L);
que regresa true
si al recorrer el
contenedor
"L
" hacia adelante se obtiene el mismo resultado que
al recorrerlo hacia atrás. Por ejemplo:
1.b) [10 pts] Implementepalindromo([1 2 3 2 1]) ==> true palindromo([1 2 3 2 0]) ==> false palindromo([r a d a r]) ==> true palindromo([M A J E M]) ==> false
palindromo()
. Recuerde: ¡No se le meta al
Rep!
1.c) [7 pts]
Use ejemplos
BUnit para especificar la
función palindromoOrdenado()
que funciona
de manera similar a palindromo()
pero que usa los
valores de la lista ordenados.
palindromoOrdenado()
. No modifique el
valor original de la lista.
Reutilice
palindromo()
en su implementación.
2) [33 pts]
+--------------------------------+ | MZ..<...'.....7.......o....... | | ..triturar.................... | | ..g...6........)("33$.....J... | | ..P...=...matar........?!??;;^ | | o.z.o.i.o...o...o...o...o..... | | ..n...j...f...b.destruir..V... | | .....bonga..i.H.i.3.i...i...i. | | i...i...i...i.matanga...i.'.i. | | ......}...A...1...$....canga.. | +--------------------------------+ chunga.exe |
Jimmy Neutron descubrió que muchos de los programas
ejecutables que usan los estudiantes de la
ECCI incluyen comandos
satánicos que es necesario censurar. Para eso, propuso
construir un
módulo que
recibe como entrada un programa ejecutable y produce una lista de
las palabras que contiene el texto, en donde "palabra" significa
"varias letras juntas, sin espacios ni caracteres raros".
Escriba un programa que permita extraer todas las hileras de un archivo. Incluya un argumento que indique cuál es el tamaño mínimo de una palabra, para evitar que letras solas aparezcan en la salida. Su programa no debe imprimir cada palabra más de una vez. |
3) [33 pts] En algunas aplicaciones conviene contar con la clase
Acumulador
que sirve para sumar un montón de
valores numéricos, pero eliminando del total tanto al
más grande como al más pequeño de todos los
valores. Por ejemplo, el acumulador aplicado a los valores
(1,5,2,2,3,3,4,5)
sólo sumaría
5+2+2+3+3+4
y eliminaría el 1
y
alguno de los 5
's, que son los valores menor y mayor
de toda la secuencia.
3.a) [3 pts]
Las operaciones más importantes de esta clase son
acumule()
, total()
y
cantidad()
. Especifique en formato
"Doxygen" cada una
de estas
operaciones.
3.b) [2 pts]
Especifique en formato
"Doxygen" la
operación elimine()
que permite borrar uno de
los valores acumulados, sea éste el más grande, el
más pequeño, o cualquiera de los valores
intermedios. De esta manera usted estará modificando la clase
Acumulador
de la tarea
programada, que es una clase que no permite eliminar alguno de los
valores que tiene acumulados.
3.c) [6 pts]
Defina el
Rep para su
clase Acumulador
. Debe usar un vector de valores para
mantener memoria de todos los números que han sido
acumulados.
3.d) [8 pts]
Implemente las operaciones
cantidad()
y total()
y para la clase
acumulador
. Recuerde manejar correctamente los
casos límite.
3.e) [7 pts]
Implemente
Acumulador::acumule()
.
3.f) [7 pts]
Implemente
Acumulador::elimine()
.
Adolfo Di Mare <adolfo@di-mare.com>.
|