BBDD&POO
Bases de datos y programación orientada a objetos.
Curso: 2016/17. Parte POO
Máster en Modelización Matemática, Estadística y Computación
Octubre | Noviembre | Diciembre | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
N no lectivo, N fiesta, N estudio, N exámenes, |
La propuesta de ejercicio extra consiste simplemente en montar la base de datos para bibliografía con MySQL y procesar los datos y cargarlos directamente en ella desde Java (en vez de generar ficheros como se ha propuesto en el ejercicio original). No es obligatorio realizarlo, pero podrá ayudar a la nota final (que en todo caso se combinará con la parte de bases de datos).
OCTUBRE
Se trata de calcular el número π con precisión de cuatro decimales mediante la serie:
La especificación de cuatro decimales hace referencia al criterio de parada en la suma de términos de
la serie, no a la presentación de la solución, que se hará normalmente mediante System.out.println(.)
y que nos mostrará un número de decimales que no podemos controlar por ahora.
public class Pi { //Esto de la precisión es algo aproximado por no ser trivial. private static final double PRECISION=1E-5; public static void main(String args[]){ double pi=pi(); System.out.println(pi+ "\t"+Math.PI+"\tdiferencia: "+(Math.PI-pi)); } static double pi(){ double piCuartos=0.0, denominador=-1, incr=1.0; while (Math.abs(incr)>PRECISION/4) piCuartos += 1 / (denominador+=2) - (incr = 1/ (denominador+=2)); return 4*piCuartos; } }
Escriba una RUTINA que determine si un número dado es perfecto o no.
static boolean isPerfect(long n) { boolean esPerfecto=false; //TODO hacer lo necesario para que "isPerfect" refleje si n es perfecto o no. return esPerfecto; }
Un número perfecto es un entero positivo igual a la suma de sus divisores propios. Los divisores propios de un entero positivo son todos sus divisores a excepción de sí mismo. (Ejemplo de número perfecto: el 6, porque sus divisores propios son 1, 2 y 3 y 6=1+2+3.)
Utilizando dicha rutina debera obtener una lista de números perfectos entre el 1 y el 100.000
NOVIEMBRE
Ejercicios:
A falta de ver lo referente a control de errores, es prácticamente imposible desarrollar una solución a un problema con objetos con Java.
Incluso sería necesario contar con los paquetes básicos de la bibliboteca para que el problema planteado tuviese algo de sentido.
Así que lo que vamos a plantear son dos ejercicios un tanto atípicos:
Escribir una clase en la que se defina un array de Strings constantes (p.ej. una frase de un texto por cada elemento del array) y programar funciones como por ejemplo:
int indexOf(String palabra)
int indexOf(String palabra, int n)
int[] indexOf(String palabra)
Con un método main(.)
probar las funciones.
Supongamos que tenemos que hacer una aplicación para gestionar la venta de entradas de unos multicines. Es decir, tendremos un cierto numero de salas de proyección, cada sala contará con un determinado número de filas de butacas y cada fila con un número de butacas (pensemos que es el mismo para todas las filas). Además cada sala se utilizará para varias sesiones cada día a lo largo de todos los días del año.
Lo que tendremos que plantearnos es por tanto qué clases necesitamos y cual será su estructura, tanto en campos como métodos.
Un enfoque típico parte del análisis de los "casos de uso" que, planteado en una línea, consiste en analizar las diferentes acciones (usos) que debe soportar la aplicación en relación con los diferentes usuarios de la misma. (más info: soporte dado por UML)
En nuestro caso podemos pensar que la aplicación sera manejada únicamente por un empleado de la taquilla y un gestor de las salas. Debemos plantear los usos que le darán, y de ahí pasar a una estructuración de clases que los soporten del mejor modo posible.
Por ejemplo...
En general una buena solución es la que generará una serie de clases, en uno o más paquetes, que puedan verse como una biblioteca más o menos específica para soportar el desarrollo de la aplicación, de modo que esta sea una combinación razonablemente sencilla de elementos de dichos paquetes.
DICIEMBRE
En "http://gtts.ehu.es/German/Docencia/MUMMEC/ejercicios/20161215.txt" hay un fichero de datos "real" (es un alineamiento del texto del acta del Parlamento Vasco del 15 de diciembre de 2016 covertido a su representación fonética con la secuencia obtenida del audio mediante un decodificador automático)
Haremos un programa que lo lee y procesa de algún modo (no importa mucho, es cuestión de practicar). Por ejemplo calcularemos la media y la desviación típica de las duraciones de los fonemas (si una linea tiene tres números reales, los dos primeros son los correspondientes a los tiempos de inicio y de fin del fonema)
Otros planteamientos con los que podríamos practicar:
{ fonemaCorrecto::char, fonemaReconocido::char, fonemaInicial::boolean, tiempoInicial::double, tiempoFinal::double, confianza::double }
Otros temas interesantes que no pueden abordarse en el curso por su extensión. (Enlaces a los tutoriales de Oracle)
En ocasiones no tengo respuesta inmediata a alguna pregunta por no ser frecuente o sencilla. En estos casos, si puede ser de interés general, queda reflejada aquí.