// ==============================================
// Berechnung des Korrelationskoeffizienten
// einer zweidimensionalen Stichprobe      STA A4
// ==============================================
//
// Die Formel fuer den Korrelationskoeffizienten
// wurde zur besseren Uebersichtlichkeit zu-
// naechst in 3 Terme aufgeteilt.
//
//                         term_xy
// Formel :    r = ---------------------------
//                 SQRT(term_x) * SQRT(term_y)
//
//
// Andre Maier, Mathematik Sondergebiete, SS 2000
// ==============================================

import java.io.*;
import java.util.*;

public class sta_a4
{
   public static void main (String args [])
   {
        // Deklaration der Variablen
        int num_of_pairs = 0, i = 0;
        double x_value = 0.0, y_value = 0.0;
        double x_average = 0.0, y_average = 0.0;
        double term_xy = 0.0, term_x = 0.0, term_y = 0.0;
        double r = 0.0;

        // Pruefen des Parameters
        if (args.length!=1)
                {
                       System.out.println("FEHLER : Aufruf des Programms mit");
                       System.out.println("         sta_a4 <dateiname>");
                       System.exit(-1);
                }

        try
                {
                       BufferedReader in = new BufferedReader (new FileReader(args[0]));
                       String line = new String();

                       // ==============================
                       // Anzahl der Wertepaare einlesen
                       // ==============================

                       line = in.readLine();
                       num_of_pairs = Integer.parseInt(line);

                       // ==============================================
                       // Erstellen von Arrays und Mittelwerte bestimmen
                       // ==============================================
		       
		       double xarray[] = new double[num_of_pairs];
		       double yarray[] = new double[num_of_pairs];
		       
		       for (i = 0 ; i < num_of_pairs ; i++)
		       {
		           line = in.readLine();
			   xarray[i] = Double.parseDouble(line);
			   line = in.readLine();
			   yarray[i] = Double.parseDouble(line);

                           x_average = x_average + xarray[i];    /* Aufsummieren fuer */
                           y_average = y_average + yarray[i];    /* den Mittelwert    */
		       }

                       x_average = x_average / num_of_pairs;
                       y_average = y_average / num_of_pairs;

                       System.out.println("x - Mittelwert : " + x_average);
                       System.out.println("y - Mittelwert : " + y_average);
                                      
                       // ====================
                       // Berechnung der Terme
                       // ====================

                       for (i = 0; i < num_of_pairs ; i++)
                               {
                                   term_xy = term_xy + (xarray[i] - x_average) * (yarray[i] - y_average);
                	           term_x = term_x + Math.pow(xarray[i] - x_average,2); 
				   term_y = term_y + Math.pow(yarray[i] - y_average,2);			
			       }
			       
                       // ===================================
                       // Berechnung der Korrelationsfunktion
                       // ===================================

                       r = term_xy / (Math.sqrt(term_x) * Math.sqrt(term_y));

                       System.out.println("Korrelationskoeffizient : " + r);
                }

        // ====================================
        // Behandlung moeglicher Runtime-Fehler
        // ====================================

        catch (IOException e)
                {
                       if (e instanceof FileNotFoundException)
                            System.out.println("FEHLER : Datei " + args[0] + " existiert nicht !");
                       else
                            System.out.println("FEHLER : Fehler beim Lesen der Datei " + args[0] + " !");
                       System.exit(-1);
                }
        catch (ArithmeticException e)
                {
                       System.out.println("FEHLER : Unzulaessige arrithmetische Operation !");
                       System.exit(-1);
                }
        catch (NumberFormatException e)
                {
                       System.out.println("FEHLER : Messwert-Datei " + args[0] + " ungueltig !");
                       System.exit(-1);
                }
        catch (NullPointerException e)
                {
                       System.out.println("FEHLER : Falsche Anzahl von Werten in Datei " + args[0] + " !");
                       System.exit(-1);
                }
   }
}
