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

Examen Final [solución]

      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.

 

Soluciones

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