import java.util.Scanner; /* Calcula el mayor, menor, promedio y máximo de un conjunto de valores reales */ public class Estadisticas { public static void main(String args[]) { // Para leer valores de la entrada estándar (teclado) Scanner teclado = new Scanner(System.in); // No conocemos el tamaño del conjunto de datos, sólo el usuario, preguntarlo System.out.print("Ingrese la cantidad de datos (n): "); long n = teclado.nextLong(); // Acumula la suma de todos los valores ingresados por el usuario // para calcular el promedio double suma = 0.0; // Acumula el cuadrado de todos los valores ingresados por el usuario // para calcular la desviacion estandar double suma2 = 0.0; // Tras ingresar todos los valores, esta variable conservará el valor mínimo double minimo = 0.0; // Tras ingresar todos los valores, esta variable conservará el valor máximo double maximo = 0.0; // Preguntar al usuario cada uno de los valores de su conjunto de datos for ( long i = 1; i <= n; i = i + 1 ) { // Almacena el i-esimo dato: xi double xi = 0.0; // Preguntar un double, pero si el usuario lo escribe mal, darle oportunidad // de que lo ingrese nuevamente, hasta que sea válido. Asumir que no lo es boolean valido = false; // Darle oportunidad al usuario de escribir el valor hasta que lo haga bien do { try { // Leer el dato xi del teclado, esperando que no ocurra una excepción System.out.print("x" + i + ": "); xi = teclado.nextDouble(); // Si llegó aquí es porque no hubo una excepción y el dato era válido valido = true; } catch ( java.util.InputMismatchException e ) { // El usuario escribió algo que no es un número, avisarle System.out.println("Ingrese un real válido"); // Ignorar lo que escribió. Si esto se omite, se genera un ciclo infinito teclado.nextLine(); } } while (valido == false); // La suma de todos los valores xi sirve para calcular el promedio suma += xi; // La suma de cuadrados sirve para calcular la desviación estandar suma2 += xi * xi; // Si este es el primer dato, asumirlo tanto como mínimo y máximo // De lo contrario, si es el segundo, tercer o cualquier otro dato, ver si // es menor que el mínimo que actualmente conocemos, y en tal caso, actualizamos // nuestro mínimo. Lo mismo para el máximo if ( i == 1 ) maximo = minimo = xi; else if ( xi < minimo ) minimo = xi; else if ( xi > maximo ) maximo = xi; } // Calcular las estadísticas faltantes double promedio = (double)suma / n; double desviacionEstandar = Math.sqrt( (-n * promedio * promedio + suma2) / (n - 1) ); // Imprimir las estadísticas System.out.println("minimo: " + minimo); System.out.println("maximo: " + maximo); System.out.println("promedio: " + promedio); System.out.println("desviación estándar = " + desviacionEstandar); } }