FUNDAMENTOS DE PROGRAMACIÓN PRÁCTICA 9: TRATAMIENTOS SECUENCIALES I Curso: 2010/11 Versión: 1.0.0 OBJETIVOS Resolución de cuestiones que requieran un tratamiento iterativo de un agregado de datos. Uso de los esquemas de resolución de tratamientos secuenciales vistos en clase. EJERCICIOS PROPUESTOS Nota: La metodología de trabajo de esta práctica es parecida a la de la práctica 6. En este caso utilizaremos los esquemas vistos en teoría y trabajaremos con estructuras de datos más elaboradas. Ejercicios más representativos: 1a, 1c, 1f, 2b y 2c. EJERCICIO 1 En este ejercicio vamos a resolver una serie de cuestiones relacionadas con un grupo de números reales. Cada cuestión será resuelta en un método static de una clase que llamaremos Reales y tendrá como parámetro de entrada un List<Double>. a) Dado un grupo de números reales, calcule la media aritmética de dichos valores. Indicación: en la clase Reales, programe un método con la signatura: public static Double mediaArtimetica(List<Double> datos){…} Cree una clase llamada TestReales que herede de Test con un método main, en la que se creará un List<Double> de prueba y se hará una llamada al método con el objetivo de comprobar el correcto funcionamiento del mismo: mostrar(“…”+Reales.mediaArtimetica(l)); b) Dado un grupo de números reales calcule la desviación estándar de dichos valores. c) Dado un grupo de números reales calcule el valor máximo de dichos números. d) Dado un grupo de números reales calcule el valor mínimo de dichos números. Nota: utilice el esquema visto en teoría que se basa en el método auxiliar de la clase Utiles que calcula el mínimo binario de dos elementos Utiles.min(e,a) (se encuentra en el paquete utilidades) e) Dado un grupo de valores reales, se dice que “hay ruido” cuando existen valores mayores o menores que un cierto umbral de tolerancia. Programe el siguiente método que establece si hay o no ruido para un cierto grupo de números: public static Boolean hayRuido1(List<Double> datos, Double umbral){ f) Dado un grupo de valores reales determine si todos los valores son válidos (es decir, que no hay ningún elemento que sea un null) public static Boolean todosValoresVálidos (List<Double> l){ Práctica 9: Tratamientos secuenciales I 2 EJERCICIO 2 En este ejercicio vamos a resolver una serie de cuestiones relacionadas con grupos de objetos de tipo Persona; para ello veamos previamente la descripción de este tipo. Tipo Persona: Nombre, apellidos, DNI de tipo String consultables. Edad, de tipo Integer consultable y modificable. Estatura, de tipo Double consultable y modificable. Sexo, de tipo Char consultable y modificable. Igualdad: mismos apellidos, nombre y DNI. Orden: por apellidos, nombre y DNI respectivamente. Cada cuestión se programará en un método static de una clase de nombre Personas (no confundir con la interfaz Persona ni la clase PersonaImpl). Dicha clase ya está empezada, bastará con completar el código para cada método. Cada método de la clase Personas es testeado mediante un caso de prueba en la clase TestPersonas para ver su correcto funcionamiento. Este código se da ya hecho; no obstante observe y ejecute dicho código. Se pide: a) Dado un List<Persona> calcule la altura de la persona que sea más alta. public static Double masAlto(List<Persona> grupo){…} b) Dado un Set<Persona> y una determinada edad, ¿todas esas personas son mayores de esa edad? public static Boolean todosMayoresQue(Set<Persona> grupo, Integer edad){…} c) Dado un Set<List<Persona>> calcule la edad media de todas las personas guardadas en la estructura de datos dada public static Double edadMedia(Set<List<Persona>> red){…} Indicación: como paso previo programe el siguiente método que nos permitirá agrupar a todas las personas dadas en un único conjunto auxiliar: private static Set<Persona> agrupaATodos(Set<List<Persona>> red){…} //Se almacenan todas las personas de la red en un conjunto auxiliar d) Dado un Set<Persona> calcule un listado con todos sus DNIs. public static List<String> listadoDNI(Set<Persona> grupo){..}