FUNDAMENTOS DE PROGRAMACIÓN Curso: 2010/11 PRÁCTICA 9. TRATAMIENTOS SECUENCIALES I Versión: 1.0.0 SOLUCIONES Ejercicio 1. Clase Reales public class Reales { public static Double mediaArtimetica(List<Double> datos){ Double suma = 0.0; for(Double e: datos){ suma = suma + e; } int n = datos.size(); suma = suma/n; return suma; } public static Double desviacionEstandar(List<Double> datos){ double suma=0; double media = mediaArtimetica(datos); for(Double e: datos){ suma = suma + Math.pow(e-media,2); } int n = datos.size(); return Math.sqrt(suma/(n-1)); } public static Double maximo(List<Double> datos){ Double maximo = datos.get(0); for(Double e:datos){ if(e.compareTo(maximo)>0){ //e>maximo maximo = e; } } return maximo; } public static Double minimo_CalculadoConMinimoBinario(List<Double> datos){ Double a=null; for(Double e:datos) a = a==null? e: Utiles.min(e,a); //if(a==null) //a = e; //else //a = Utiles.min(e,a); return a; } public static Boolean hayRuido1(List<Double> datos, Double umbral){ Boolean res = false; for(Double e: datos) res = res || (!(-umbral<e && e<umbral)); return res; } Práctica 9: Tratamientos Secuenciales I public static Boolean hayRuido2(List<Double> datos, Double umbral){ Boolean enc = false; int i=0; while(i<datos.size() && enc){ if(-umbral<datos.get(i) && datos.get(i)<umbral){ enc = true; } i++; } return enc; } public static Boolean hayRuido3(List<Double> datos, Double umbral){ Boolean res = false; for(Double e: datos) if(!(-umbral<e && e<umbral)){ res = true; break; } return res; } public static Boolean todosValoresVálidos (List<Double> l){ Boolean res = true; for(Double e: l) res = res && (! e.equals(null)); return res; } } public class TestReales extends Test { public static void main(String[] args) { List<Double> datos = new ArrayList<Double>(); datos.add(1.0); datos.add(2.0); datos.add(3.0); datos.add(4.0); datos.add(5.0); mostrar("----->"); mostrar("Lista de prueba: datos = "+datos); mostrar("-----> a)"); mostrar("La media aritmética de los datos es: " +Reales.mediaArtimetica(datos)); mostrar("-----> b)"); mostrar("La desviación estándar de los datos es: " +Reales.desviacionEstandar(datos)); mostrar("-----> c)"); mostrar("El valor máximo de los datos es: " +Reales.maximo(datos)); mostrar("-----> d)"); mostrar("El valor mínimo de los datos es: " +Reales.minimo_CalculadoConMinimoBinario(datos)); 2 Práctica 9: Tratamientos Secuenciales I mostrar("-----> e)"); mostrar("¿Hay ruido en los datos?: " +Reales.hayRuido1(datos, 1000.0) + " -> Ruido si el valor excede a +1000 o -1000"); mostrar("-----> f)"); mostrar("¿Todos los valores son válidos?: " +Reales.todosValoresVálidos(datos)); } } Ejercicio 2. Clase Personas public class Personas { /* Los métodos se pueden programar de varias formas, procuraremos seguir los esquemas vistos en teoría */ public static Double masAlto(List<Persona> grupo){ Double a=null; for(Persona e: grupo) a = a==null? e.getEstatura(): Utiles.max(e.getEstatura(),a); return a; } public static Boolean todosMayoresQue(Set<Persona> grupo, Integer edad){ Boolean res = true; for(Persona e: grupo) res = res && !(e.getEdad().compareTo(edad)>edad); return res; } public static Double edadMedia(Set<List<Persona>> red){ Set<Persona> grupo = agrupaATodos(red); Double res = 0.0; for(Persona p: grupo) res = res + p.getEdad(); Double n = (double)grupo.size(); return res/n; } private static Set<Persona> agrupaATodos( Set<List<Persona>> red){ //Set pues no queremos tener al mismo tipo dos veces Set<Persona> res = new HashSet<Persona>(); for(List<Persona> e:red) res.addAll(e);//Si uso add me hace falta otro for return res; } public static List<String> listadoDNI(Set<Persona> grupo){ List<String> res = new ArrayList<String>(); for(Persona p:grupo) res.add(p.getDNI()); return res; } } 3