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>.
|
|
|