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] La función "
sinalea()" recibe 2 hileras y determina si al
reacomodar letras de la primera es posible obtener la segunda.
Para hacer esta transformación se usan 2
pilas
conectadas una con otra para, de manera que las letras entran a la
primera y cuando salen de la primera caen en la segunda.
Finalmente, si una letra sale de la segunda es porque sale
completamente de la pareja de pilas.
1.a) [3 pts]
Declare
el
Rep
para el
contenedor "Kush". Incluya un
diagrama explicativo.
1.b) [6 pts]
Especifique en formato
Doxygen las
operaciones "push()", "kush()" y
"pop()". No olvide incluir ejemplos en sus
especificaciones.
1.c) [12 pts]
Suponga que ya usted cuenta con la clase
"deque" que usó en la
tercera tarea programada. Usela para
implementar las operaciones "push()",
"kush()" y "pop()" de las pilas
interconectadas.
1.d) [6 pts]
Use las letras U→push()
K→kush() y P→pop() para
representar las 3 operaciones principales de la clase
"Kush". Especifique en formato Doxygen el
método ""ejecute()" que usa una hilera
compuesta de estas 3 letras para obtener el resultado de aplicar
las operaciones a su argumento principal.
1.e) [6 pts]
Use la clase "Kush"como base para implementar la
función booleana
"palindromo()"
que determina si una hilera se lee igual de adelante hacia
atrás que de atrás hacia adelante (ignore los
espacios en blanco).
1.f) [0 pts]
Muestre 1 pareja de hileras compuestas de exactamente las mismas
letras para las que "sinalea()" retornaría
"false".
2) [33 pts] La clase Fecha permite almacenar el día, mes y año de una fecha.
2.a) [5 pts]
Especifique "esBisiesto()". Recuerde que todos
los años bisiestos son divisible por 4, pero los
únicos múltiplos de 100 que son bisiestos
también son múltiplos de 400.
2.b) [6 pts]
Implemente "esBisiesto()".
2.c) [5 pts]
Cuando se restan 2 fechas el resultado es el número de
días entre las 2 fechas. Especifique el método
"diferencia()".
2.d) [6 pts]
Implemente "diferencia()". Recuerde usar
"esBisiesto()" en su implementación.
2.e) [11 pts]
Implemente el
constructor "Fecha(int)" que determina la
cantidad de años meses y días a partir de un
número entero.
3) [33 pts] Una pareja de árboles binarios son homomorfos si tienen la misma raíz y si, recursivamente hablando, ambos subárboles son homomorfos a uno de los hijos del otro árbol (aunque no se vale que dos hijos sean homomorfos al mismo hijo del otro árbol). En otras palabras, cuando 2 árboles son homomorfos existe un reordenamiento de los hijos del primer árbol que resulta en el segundo árbol.
3.a) [9 pts]
Escriba
en formato
Doxygen la
especificación de la rutina
"homomorfo()". Incluya varios ejemplos de
árboles que son y no son homomorfos.
3.b) [24 pts]
Implemente "homomorfo()". Debe usar
recursividad. Recuerde:
¡No se le meta al
Rep del
árbol binario!
3.c) [0 pts]
Use la función
"Mirror()"
para implementar "homomorfo()".
Adolfo Di Mare <adolfo@di-mare.com>.
|
|
|