// Bibliothek zur statistischen Datenverarbeitung public class Statistics { // Berechnet das Maximum der Arrayeintraege // Geht schief bei leerem Array (new double[0]) public static double max(double[] a) { double max = a[0]; for (int i = 0; i < a.length; i ++) { if(a[i] > max) { max = a[i]; } } return max; } // Berechnet den Mittelwert der Arrayeintraege public static double mean(double[] a) { double sum = 0.0; for(int i =0; i < a.length; i++) { sum = sum + a[i]; } return sum / a.length; } // Berechnet die korrigierte Stichprobenvarianz public static double var(double[] a) { double sum = 0.0; double m = mean(a); for (int i = 0; i < a.length; i ++) { sum = sum + (a[i] - m) * (a[i] - m); } return sum / (a.length -1); } // Liest erst die Arraylaenge und dann die // Arrayeintraege von der Konsole ein // und liefert ein entsprechendes Array zurueck public static double[] readArray() { int n = StdIn.readInt(); double[] d = new double[n]; for (int i = 0; i < n; i++){ d[i] = StdIn.readDouble(); } return d; } // Berechnet den Median der Arrayeintraege public static double median(double[] a){ double[] copy = new double[a.length]; for(int i = 0; i< a.length; i++) { copy[i] = a[i]; } sort(copy); int n = copy.length; if (n % 2 == 0) { return (copy[n/2-1] + copy[n/2]) / 2.0; } else { return copy[n/2]; } } // Berechnet die Standardabweichung public static double stddv(double[] a) { return Math.sqrt(var(a)); } // Ermittelt die Position des kleinsten Wertes // aus dem Indexbereich [low,high] public static int minPos(double[] a, int low, int high) { double min = a[low]; int minPos = low; for (int i = low; i < high; i++){ if (min > a[i]) { min = a[i]; minPos = i; } } return minPos; } // Vertauscht den Wert von Eintrag an Position i // mit dem Eintrag an Position j public static void swap(double[] a, int i, int j) { double t = a[i]; a[i] = a[j]; a[j] = t; } // Sortiert die Werte im Array aufsteigend public static void sort(double[] a) { for (int i = 0; i < a.length; i++) { int m = minPos(a, i, a.length); swap(a,m,i); } } // Gibt zunaechst die Arraylaenge und dann die // einzelnen Arrayeintrage auf der Konsole aus public static void printArray(double[] a) { StdOut.print(a.length); for(int i = 0; i < a.length; i++) { StdOut.print(" " + a[i]); } StdOut.println(); } // Main-Methode zum Testen der einzelnen statischen Methoden /* Testfall: Eingabe: 5 0.0 -1.0 -2.0 1.0 2.0 Ausgabe: Maximum 2.0 Mean 0.0 Varianz 2.5 Median 0.0 */ public static void main (String[] args) { double[] input = readArray(); System.out.println("Maximum:" + max(input)); System.out.println("Mean: " + mean(input)); System.out.println("Varianz:" + var(input)); System.out.println("Median: " + median(input)); printArray(input); } }