/* Autor: Burkhard Lenze */
/* Datum: 18.01.2009     */

import java.io.*;
import java.util.*;

public class linassoz 
{
/*  globale Variablen  */
 static float[] x = new float[10];	   /*  Eingabevektorfeld           */
 static float[] y = new float[10];	   /*  Ausgabevektorfeld           */
 static float[] theta = new float[10];	   /*  Schwellwertvektorfeld       */
 static float[][] w = new float[10][10];   /*  Matrixfeld der Gewichte     */
 static int n;				   /*  Anzahl der Eingabe-Neuronen */
 static int m;				   /*  Anzahl der Ausgabe-Neuronen */
 static char com;			   /*  Menuparameter               */

 /* Funktionen  */
 static void lese_x()
 {
  int i;
  System.out.print("\n");
  for(i=1;i<=n;i++)
  {
   System.out.print("x[" + i + "] = ? ");
   Scanner sc = new Scanner(System.in).useLocale(Locale.ENGLISH);
   x[i] = sc.nextFloat();
  }
 }
	
 static void lese_y()
 {
  int j;
  System.out.print("\n");
  for(j=1;j<=m;j++)
  {
   System.out.print("y[" + j + "] = ? ");
   Scanner sc = new Scanner(System.in).useLocale(Locale.ENGLISH);
   y[j] = sc.nextFloat();
  }
 }
	
 static float T (float A)
 {
  return (A);
 }
	
 static void lernen()
 {
  int i, j;
  lese_x();
  lese_y();
  for(j=1;j<=m;j++)
  {
   theta[j] = 0.0f;
   for(i=1;i<=n;i++)
   {
	w[i][j]=w[i][j]+(y[j]*x[i]);
   }
  }
}
	
 static void ausfuehren()
 {
  int i, j;
  float A;
  lese_x();
  for(j=1;j<=m;j++)
  {
   A=0.0f;
   for (i=1;i<=n;i++)
   {
    A=A+(w[i][j]*x[i]);
   }
   y[j]=T(A-theta[j]);
  }
  System.out.print("\n");
  for(j=1;j<=m;j++)
  {
   System.out.print("y[" + j + "] = " + y[j] + "\n");
  }
 }
	
 static void veraendern()
 {
  int i, j;
  Scanner sc = new Scanner(System.in).useLocale(Locale.ENGLISH);
  System.out.print("\n");
  System.out.print("Anzahl n der Neuronen in der Eingabeschicht? ");
  n = sc.nextInt();
  System.out.print("Anzahl m der Neuronen in der Ausgabeschicht? ");
  m = sc.nextInt();
  for (i=1;i<=n;i++) {x[i]=0.0f;}
  for (j=1;j<=m;j++) {y[j]=0.0f;}
  for (j=1;j<=m;j++)
  {
   theta[j]=0.0f;
   for (i=1;i<=n;i++) {w[i][j]=0.0f;}
  }
 }
	
 static void zeigen()
 {
  int i, j;
  System.out.print("\nDie Gewichte w[i][j] lauten: \n");
  for(j=1;j<=m;j++)
  {
   for(i=1;i<=n;i++)
   {
    System.out.print("w[" + i + "][" + j + "] = " + w[i][j] + "   ");
   }
   System.out.print("\n");
  }
  System.out.print("\nDie Schwellwerte theta[j] lauten: \n");
  for(j=1;j<=m;j++)
  {
   System.out.print("theta[" + j + "] = " + theta[j] + "\n");
  }
  System.out.print("\n");
 }
	
 static void speichern()
 {
  int i, j;
  String dat;
  BufferedReader f = new BufferedReader(new InputStreamReader(System.in));
  System.out.println("\nWie lautet die Datei für Gewichte und Schwellwerte? ");
  try 
  {
   dat = f.readLine();
   BufferedWriter in = new BufferedWriter(new FileWriter(dat));
   in.write(n + "\n");
   in.write(m + "\n");
   for(j=1;j<=m;j++)
   {
    for(i=1;i<=n;i++)
    {
	 in.write(w[i][j] + "\n");
    }
   }
   for(j=1;j<=m;j++)
   {
    in.write(theta[j] + "\n");
   }
   in.close();
  } 
  catch (IOException e) 
  {
   System.out.println("Fehler beim Schreiben der Datei!");
  }
 }
	
 static void einlesen()
 {
  int i, j, r;
  String dat;
  BufferedReader f = new BufferedReader(new InputStreamReader(System.in));
  System.out.println("\nWie lautet die Datei für Gewichte und Schwellwerte? ");
  try 
  {
   dat = f.readLine();
   BufferedReader out = new BufferedReader(new FileReader(dat));
   r = Integer.parseInt(out.readLine());
   if (r==n)
   {
    r = Integer.parseInt(out.readLine());
    if(r==m)
    {
     for(j=1;j<=m;j++)
     {
	  for(i=1;i<=n;i++)
	  {
	   w[i][j] = Float.parseFloat(out.readLine());
	  }
	 }
	 for(j=1;j<=m;j++)
     {
	  theta[j] = Float.parseFloat(out.readLine());
	 }
    }
    else
    {
	 System.out.println("\nFehler! m ist in Datei " + r + " statt " + m);
    }
   }
   else
   {
    System.out.println("\nFehler! n ist in Datei " + r + " statt " + n);
   }
   out.close();
  } 
  catch (FileNotFoundException e) 
  {
   System.out.println("Fehler! Datei konnte nicht gefunden werden!");
  } 
  catch (IOException e) 
  {
   System.out.println("Fehler beim Lesen der Datei!");
  }
 }
	
 public static void main(String[] args) 
 {
  veraendern();
  do
  {
   System.out.println("\nlernen ausfuehren zeigen veraendern speichern einlesen beenden:\n");
   Scanner sc = new Scanner(System.in).useLocale(Locale.ENGLISH);
   com = sc.next().charAt(0);
   switch(com)
   {
    case 'l': lernen(); break;
    case 'a': ausfuehren(); break;
    case 'z': zeigen(); break;
    case 'v': veraendern(); break;
    case 's': speichern(); break;
    case 'e': einlesen(); break;
    default:  break;
   }
  }
  while(com!='b');
 }
}
