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 las tres preguntas. ¡No haga más de lo que se le pide!
1) [33 pts] Una dirección de correo electrónico está compuesta de letras, dígitos y los caracteres
{ '.'
'-' '_' }
rodeando al símbolo de arrobas
'@'
. Suponga que ya usted cuenta con un método
booleano charEmail(ch)
que examina una letra para
determinar si puede formar o no parte de alguna dirección
de correo electrónico, pero que retorna false
si se la aplica a '@'
.
1.a) [0 pts] Corrija estas pruebas que definen cuáles hileras contienen un dirección de correo electrónico válida.
String renglon = "Es el: Pipino Cuevas <pipino@cuevas.com> y punto.com"; String email = saqueEmail(renglon); assertTrue( email == "pipino@cuevas.com" ); assertTrue( "" == saqueEmail("nopes") ); assertTrue( "a@b" == saqueEmail("a@b") ); assertTrue( "-@_" == saqueEmail("-@_") ); assertTrue( ".@." == saqueEmail(".@.") ); assertTrue( "" == saqueEmail("a@") ); assertTrue( "" == saqueEmail("@b") ); assertTrue( "" == saqueEmail(".") ); assertTrue( "" == saqueEmail("-") );
1.b) [6 pts]
Especifique contieneArroba()
que retorna la
posición del primer símbolo de arrobas
'@'
de una hilera.
1.c) [27 pts]
Use su función contieneArroba()
para
implementar saqueEmail(str)
que retorna la
primera dirección de correo electrónico
válida de hilera str
, o la hilera nula si no
contiene ninguna.
2) [33 pts] Suponga que ya usted implementó 2 clases abstractas llamadas
Contenedor_Ordenable
y Algoritmo_Ordenador
las que permiten usar
polimorfismo para implementar muchos métodos de
ordenamiento con la misma interfaz, usando el
método ordene(Contenedor_Ordenable)
.
2.a) [6 pts] Haga la declaración Java de estas 2 clases abstractas.
2.b) [11 pts]
Implemente el mergeSort()
(puede usar
recursividad). Suponga que el vector a ordenar contiene
números enteros.
2.c) [11 pts]
Use como base su implementación de mergeSort()
para obtener otra versión que funciona para cualquier
Contenedor_Ordenable
porque es un
Algoritmo_Ordenador
.
2.d) [5 pts] Explique utilizando uno o más diagramas cómo funciona el mecanismo de polimorfismo que permite reutilizar varios algoritmos de ordenamiento en varios tipos de contenedores.
3) [33 pts] Para generar un laberinto conviene saber cómo hacer una espiral.
3.a) [6 pts]
Explique cómo se obtiene en Java cada una de las
dimensiones de una matriz. Incluya un ejemplo concreto para una
matriz rectangular de enteros de dimensiones NxM
.
3.b) [5 pts]
Especifique el
método
estático
meteEspiral()
que sirve para grabar las letras que
forman una espiral dentro de la matriz de caracteres. Use los
caracteres '-'
(línea horizontal),
'|'
(línea vertical) y '+'
(esquina), como se muestra en los siguientes diagramas:
+ (1x1) |
-+ ++ (2x2) |
--+ +-| +-+ (3*3) |
-------------------+ +-----------------+| |+----------------|| |+----------------+| +------------------+ (5x20) |
3.c) [22 pts]
Implemente el método meteEspiral()
. No es
necesario que use ciclos anidados: puede contar el número
de iteraciones y utilizar índices que funcionen como
"paredes" en los lugares adecuados. Si lo desea, puede hacer la
espiral al revés.
Adolfo Di Mare <adolfo@di-mare.com>.
|