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] Implemente un programa completo que lea de un archivo un conjunto de palabras clave, todas escritas en letras minúsculas. El segundo argumento de su programa es un archivo lleno de renglones en los que usted buscará las palabras mencionadas en el archivo de palabras clave (ignore las diferencias entre minúsculas y mayúsculas). Después de examinar cada renglón, su programa debe imprimir, para cada palabra clave, todos los renglones del segundo archivo en donde esa palabra aparece. Evite leer más de una vez cualquiera de los archivos. Use los contenedores adecuados que le permitan lograr buena eficiencia en tiempo de ejecución.
2) [33 pts] Un polinomio se puede implementar usando un vector de números reales que contiene, en su entrada "
i
", el coeficiente del i-ésimo término
del polinomio. El campo "m_grad
" del
Rep indica el
grado del polinomio. Los términos superiores a
"m_grad
" no están inicializados en cero. El
polinomio cero se representa con un cero en el coeficiente y con
el grado() = 0
. Por ejemplo, el
polinomio x^3 + 2x^2
se ve así:
2.a) [6 pts]
Haga la declaración
de las clases
2.b) [6 pts]
Especifique el método
2.c) [16 pts]
Implemente el operador suma para polinomios. Su
implementación debe estar hecha de manera que sirva para
cualquiera de las dos escogencias del Rep (tenga cuidado
cuando el resultado es cero).
2.d) [5 pts]
Explique por qué su implementación del operador suma
es independiente del Rep de su clase
2.e) [0 pts]
Explique cómo declarar la clase
polinomio grado
2x^2 + x^3 3
0 1 2 3 4 5 6 7 8 9 ....
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 0 |2.0|1.0| $ | ! | % | % | % | ( | = | | | |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
^
|
+------------- grado() == 3
poli_VEC
y poli_DEQUE
usando dos
tipos diferentes de vector en el Rep: un vector y la clase
std::deque<>
de la biblioteca STL de C++. Escriba
declaraciones resumidas, incluyendo apenas lo suficiente.fromString()
que toma una hilera de la forma
"x^3 + 2x^2
" y produce un polinomio. Luego
especifique el operador suma para polinomios. Recuerde incluir
suficientes ejemplos BUnit.poli
.poli
de manera que
quien la use pueda escoger si usar un vector o un deque
para los coeficientes del polinomio. Además, indique cómo
generalizar esta solución para usar en la implementación el diccionario
std::map<>
de la biblioteca estándar.letroso
" es una clase que contiene una secuencia de caracteres a la que
se le pueden aplicar estas operaciones:
asigne(const char* str)
str
" para darle valor al letroso.
cuenta()
q=soyLetroso(p,n,ch)
q
" la posición en donde se pueden encontrar "n
" letras consecutivas e iguales a "ch
", pero con la restricción de que p<=q
.
grabe()
3.a) [0 pts]
Implemente operator=( const char* )
para la clase letroso
.
(No se le meta al
Rep).
3.b) [11 pts]
Especifique soyLetroso()
.
Use ejemplos BUnit.
3.c) [11 pts]
Defina el Rep para la clase.
Implemente soyLetroso()
.
soyLetroso()
encuentra las letras "ch
" consecutivas en posiciones cada
vez mís altas del índice. Use la clase
letroso
para implementar
esLetrosario(n,ch,STR)
. No se le meta al Rep de letroso
:
assertTrue( esLetrosario( 5, 'A', "..A..AA...AAA...AAAA...AAAAA..." ) ); assertTrue( esLetrosario( 3, 'A', "A..AA...AAA..." ) ); assertFalse( esLetrosario( 2, 'A', "..AA..A.." ) ); // están al revés
Adolfo Di Mare <adolfo@di-mare.com>.
|