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

Examen #1 [solución]

      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:

palindromo([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
1.b) [10 pts] Implemente 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.

1.d) [10 pts] Implemente 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().

 

Soluciones

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