Examen 3. Lenguajes de programaciòn 3. Instrucciones: El exàmen es para llevar a casa, para resolver en equipo. El nùmero mìnimo de personas en el equipo es de 2 y el màximo es de 4. No se recomienda que 1 persona lo haga de manera individual, ya que no sera capaz de acabar los ejercicios El exàmen plantea 15 problemas a resolver. El mìnimo de problemas a resolver son 10. Sòlo se admiten equipos de 5 personas si los 15 problemas son resueltos en su totalidad. Quien resuelva los 15 problemas de manera correcta, tendra una calificaciòn de 15; si y solo sì son de 2 a 4 integrantes en el equipo. Los problemas que deber ser resueltos son: 1, 3, 4, 5, 6, 9, 11, 12, 13, 15 Los problemas opcionales son: 2, 7, 8, 10, 14 Se debe entregar SOLO còdigo fuente. Se debe subir sòlo còdigo fuente a la pàgina WWW de algùn integrante del equipo; en formato ZIP. NO SUBIR CODIGO EJECUTABLE NI DOCUMENTACION HTML, salvo para el ejercicio 6, en el cual se debe subir la librerìa dinàmica generada. Entrega que no siga esta regla, no serà evaluada Se debe enviar un correo a gusdelact@yahoo.com.mx; indicando la direcciòn Web de la pàgina donde se ubica el resultado del examen. El correo debe tener en su texto, el nombre completo de cada integrante. Cualquier otro mecanismo de entrega no es aceptado, incluyendo enviar correo electrònico con archivos adjuntos. EL EXAMEN SE PUEDE ENVIAR RESUELTO HASTA LAS 11:59 P.M. DEL DIA 06 DE JUNIO DEL 2005. DESPUES DE ESTA HORA, NO SE ACEPTAN EXAMENES. El còdigo debe seguir las siguientes reglas: a) Los mètodos deben estar comentados y listos para que se genere la documentaciòn por medio de JavaDoc b) El còdigo debe ser legible, bien indentado y sin errores de sintàxis. Debe seguir las convenciones de Java, en lo que se refiere a nombres de las clases, nombres de mètodos, propiedades y constantes c) El còdigo debe estar en el paquete mx.edu.ulsa.cib4132005.examen3.problemaX; donde X representa el nùmero del problema a resolver d) Còdigo que no compile, no es calificado e) La distribuciòn recomendada de los directorios de trabajo son src - còdigo fuente bin - resultado de compilaciòn doc - documentaciòn HTML se recomienda a los equipos seguir esta estructura, ya que el profesor calificarà usando dicha organizaciòn f) El applet del problema 1, DEBE SER PUESTO EN Internet, en la pàgina de donde se tome el exàmen. Si no se hace asì, el problema 1 no se califica g) Para los programas que usen archivos, se recomienda NO PONER RUTAS ABSOLUTAS (por ejemplo, C:); poner las rutas, relativas a donde se ejecuten los programas java h) Utilizacion de tecnicas de encapsulamiento, herencia y polimorfismo Si algun ejercicio es copiado de otro equipo, implica una evaluaciòn de 0 puntos de todo el examen, tanto por el equipo que copio y del equipo original. NO SE RECOMIENDA QUE EL GRUPO 413 EN SU TOTALIDAD SE ORGANICE A RESOLVER TODOS LOS PROBLEMAS. El esfuerzo debe ser por cada equipo formado. NO ARRIESGUEN LA CALIFICACIÒN DEL TERCER PARCIAL, ES MEJOR HACER UN SOLO EJERCICIO A TENER 15 EJERCICIOS COPIADOS. Muchos ejercicios fueron tomados del libro Java Como Programar, Quinta Edicion, Deitel&Deitel, Ed. Pearson. En la biblioteca existe un ejemplar, por lo que se recomienda que saquen copias de los ejercicios requeridos, para dejar que todos los integrantes del grupo 413 puedan consultarlo 1. Torres de Hanoi Cuenta la leyenda que en un templo del Lejano Oriente, los sacerdotes tratan de mover una pila de discos de una esta a otra. La estaca inicial tiene 64 discos ensartados y ordenados, de abajo hacia arrabia, en orden de tamaño decreciente. Los sacerdotes intentan mover la pila de esta estaca hacia una segunda estaca, con las restricciones de mover sòlo un disco a la vez, y qu ningùn disco màs grande debe colocarse encima de uno màs pequeño. Una tercera estaca està disponible para alojar discos temporalmente. En teorìa el mundo se acabarà cuando los sacerdotes completen su tarea. El algoritmo que despliegua la secuencia precisa correspondiente a la transferencia de discos de una estaca a otra, utiliza recursividad, de tal manera que el proceso de mover n discos puede considerarse en tèrminos de mover solamente n-1 discos, de la siguiente forma a) Mover n-1 discos de la estaca 1 a 2, utilizando la estaca 3 como un àrea de almacenamiento temporal b) Mover el ùltimo disco (el mas grande) de la estaca 1 a 3 c) Mover los n-1 discos de la estaca 2 a la 3, utilizando la estaca 1 como àrea de almacenamiento temporal El proceso termina cuando la ùltima tarea involucra mover el disco n=1. Esta tarea se logra moviedno simplemente el disco, sin necesidad de usar un àrea de almacenamiento temporal. Escribir un applet para resolver el problema de las Torres de Hanoi. Debe permitir al usuario introducir el nùmero de discos en un objeto JTextField. Usar un mètodo recursivo llamado torre, con cuatro paràmetros. a) El nùmero de discos a mover b) La estaca en la que estaràn ensartados inicialmente estos discos c) La estaca a la que se moverà esta pila de discos d) La estaca que se va a utilizar como àrea temporal de almacenamiento El applet debe mostrar en un objeto JTextArea, con funcionalidad de desplazamiento (slider), las instrucciones precisas que se necesitaràn par mover los discos de la estaca inicial hasta la estaca final.Por ejemplo, para mover una estaca de tres discos desde la estaca 1 hasta la estaca 3, el programa debe impmir los siguiente movimientos. 1->3 (mover un disco de la estaca 1 a la 3) 1->2 3->2 1->3 2->1 2->3 1->3 2. Construir su propia computadora usando Java. Del libro Java Como Programar, Quinta Edicion, de Deitel & Deitel; resolver los ejercicios 7.43 a 7.44 3. Aplicaciòn de dibujo. Del libro Java Como Programar, Quinta Edicion, de Deitel & Deitel; resolver el ejercicio 10.9 4. Clave Morse. Del libro Java Como Programar, Quinta Edicion, de Deitel & Deitel; resolver el ejercicio 11.27 5. Calculadora Simple. Usando Java y Swing, codificar la Calculadora, con las mismas especificaciones de la Calculadora de Windows, en modo estàndar. 6. Interfase entre C y Java. Java puede invocar funciones de lenguaje C, usando Java Native Interface (JNI). Para este ejercicio, se debe tener un compilador de C y herramientas para generar librerìas dinàmicas. Puede construirse tanto en Windows, Solaris o Linux. El còdigo C que debe invocarse es el siguiente: /*Rutina en C que calcula la secuencia de Fibonacci*/ int fibonacci(int n){ if (n<0) return -1; if (n==0 ) return 1; if (n==1 ) return 1; return fibonacci(n-1) + fibonacci(n-2); } Construir una clase Java denominada Fibonnaci, que declare un metodo nativo calcular, y que haga uso de la rutina C indicada. public class Fibonnaci { public native int calcular(int n); } Usar Swing para que, por medio de un JFrame que contenga un JTextField en el que se capture el numero de la secuencia de Fibonacci; despliegue el resultado del metodo calcular en un componente JLabel 7. Aplicaciòn de dibujo completo Del libro Java Como Programar, resolver los ejercicios 13.27 a 13.31, 14.12 a 14.16 para poder construir la aplicaciòn pedida en el ejercicio 14.17 8. Lectores y escritores Del libro Java Como Programar, resolver el ejercicio 16.14 9. Pelota que rebota Del libro Java Como Programar, resolver el ejercicio 16.15 10. Generador de palabras de nùmeros telefònicos Del libro Java Como Programar, resolver el ejercicio 17.11 11. Persistencia de objetos. Hacer un programa que realice altas, bajas, cambios y consultas de registros de la siguiente estructura: Campo Tipo Llave entero Nombre cadena de caracteres Sueldo nùmero de precisiòn doble Cada registro debe almacenarse en memoria en la estructura de datos java.util.TreeMap, provista por JavaSoft Utilizar Swing para proporcionar la interfase gràfica para cada operaciòn de altas, bajas, cambios y consultas. Por medio de serializaciòn;y usando ObjectInputStream y ObjectOutputStrem; guardar en disco a la estructura de datos TreeMap. El programa debe permitir cargar el archivo con la imagen serializada (Archivo SER). 12. Navegador de Web en Java. En Swing existe un componente llamado JEditorPane, que es capaza de desplegar contenido HTML. En base a esto, codificar un navegador de internet sencillo, usando la clase java.net.URL o java.net.URLConnection. Solo preocuparse por desplegar contenido HTML. 13. Servidor XML y Navegador XML XML es el formato estàndar para representar datos en un formato independiente de una plataforma de còmputo. Un ejemplo de un documento XML es: Brian Kernighan bkerni@programmers.org EUA Linus Tovarld ltovarld@freeware.org Finlandia Escribir un programa en Java, que sea un servidor que por medio Sockets, entregue documentos XML. Dichos documentos deben estar depositados en un directorio de la computadora, y de ahi seran tomados para su entrega a un programa cliente. El programa servidor debe implementarse, usando multithreading; para soportar clientes concurrentes El programa cliente, debe conectarse por medio de Socketes, al programa servidor, cada vez que el usuario necesite un documento XML. Dicho programa debe realizarse con Swing. Debe tener campos de captura para la direccion o nombre del servidor remoto, el puerto del servidor y la ruta del documento XML a tomar del servidor remoto. El contenido del documento XML, debe desplegarse de manera arborescente, usando al componente JTree e implantando la interfase TreeModel. Por ejemplo, para el documento explicado, el arbol correspondiente es: personas |-------persona | |----nombre | | |---Brian Kernighan | |----email | | |---bkerni@programmers.org | |----pais | |---EUA |-------persona | |----nombre | | |---Linus Tovard | |----email | | |---ltovarld@freeware.org | |----pais | |---Finlandia Se deja al programador, que manipule el documento XML y escriba su propio parser o puede utilizar algun Parser de XML ya existente, basado en SAX. 14. J2ME Java 2 Micro Edition es la especificaciòn para ejecutar aplicaciones basadas en Java en dispositivos mòviles. Hacer un ejemplo sencillo de J2ME, que muestre el uso de componentes de interfase de usuario; usando el emulador proporcionando por JavaSoft; ya sea para un telefono celular, PDA o PAger. 15. Patrones de diseño Los patrones de diseño son utilizados por los desarrolladores para construir aplicaciones orientadas a objetos flexibles y reutilizables. En el libro "Design Patterns: Elementos of Reusable Objects" de Gamma, Helm, Johnson y Vlissides; se explican varios patrones; que estàn clasificados en tres familias: Creaciòn, Estructura y Comportamiento. Codificar en Java, 3 programas, que muestren un patron de Creacion, otro de Estructura y otro de Comportamiento