/* Programm von Michael Mardaus und Tobias Nagel
 * Einführung in die Programmierung
 * Übungsgruppe 5 Rene Pickhardt
 * Blatt 4 Aufgabe 1
 * Dieses Programm berechnet die Fibonacci Folge
 * einmal explizit und einmal implizit und vergleicht sie dann.
 */


package mardaus.blatt4;

class aufgabe1{
	public static void main(String argv[]) {
		int i,n=40;
		int []f = new int[n]; // 2 felder mit groesse 100
		double []g = new double[n];
		boolean gleich=true; // boolsche var. fuer vergleich
		
		f[0]=0; f[1]=f[2]=1; // die ersten folgenglieder zu fuss
		for(i=3;i<=n-1;i++) // den rest rekursiv aus den jeweils
			f[i] = f[i-1]+f[i-2]; // letzten beiden
		
		System.out.println("Fibonacci Folge:"); // ausgabe fibo
		for(i=0;i<=n-1;i++)
			System.out.print(f[i]+" ");
		System.out.println();
		
		for(i=0;i<=n-1;i++) // implizite rechnung 
			g[i] = 1/Math.sqrt(5)*(Math.pow((1+Math.sqrt(5))/2,i) - Math.pow((1-Math.sqrt(5))/2,i));
		
		System.out.println("Folge mit Phi:"); // ausgabe phi
		for(i=0;i<=n-1;i++)
			System.out.print(g[i]+" ");
		System.out.println();
		
		for(i=0;i<=n-1;i++) // vergleich ob alle gleich sind
			if (Math.abs(f[i]-g[i])>1e-7) gleich=false;
		
		if (gleich) // vergleichsausgabe
			System.out.println("Alles OK die Zahlen sind gleich, bis auf Maschinengenauigkeit");
		else 
			System.out.println("Hier stimmt was nicht");
	}
}