# Eulerzahl - Eingabe von Schritten: Wie?



## ludi (10. Nov 2008)

Hallo Leute, 

die Woche haben wir wieder eine nette Aufgabe bekommen. Soweit geht das Programm schon, aber ich krieg wieder keine Eingabe hin. Kann mir jemand eine eingabe für die Schrittanzahl einbinden? Vielleicht sehe ich dann endlich, wie ich da vorgehen muss! 

Programm soll Eulerzahl in bestimmten Schritten, die der Benutzer eingeben kann, ausrechnen!


```
public class Fakultaet1 {
    int fak=6;
    Fakultaet1(){
        System.out.println("Die Eulersche Zahl betraegt nach "+fak+" Schritten:"+euler(fak));
        
    }
    
    public double factorial(int a){
        double b=1;
        for(int i=1;i<=a;i++){
            b*=i;
        }
        
        return b;
    }
    public double euler(int a){
        double b=0;
        for(int i=0;i<=a;i++){
            b+=1/factorial(i);
        }
            
        
        return b;
    }





    public static void main(String[] args) {
        Fakultaet1 blubb = new Fakultaet1();
    }
}
```

MfG ludi[/code]


----------



## SlaterB (10. Nov 2008)

int x = System.in.readInt();


----------



## Guest (11. Nov 2008)

Danke für die Antwort, ich hab jetzt nochmal rumprobiert und bin nun dabei stecken geblieben:



```
import dssz.io.*;
public class Fakultaet1 {
    int fak;
    fak = in.getInt("Eingabe der Schritte");
    Fakultaet1(){
        
		System.out.println("Die Eulersche Zahl betraegt nach "+fak+" Schritten:"+euler(fak));
        
    }
    
    public double factorial(int a){
        double b=1;
        for(int i=1;i<=a;i++){
            b*=i;
        }
        
        return b;
    }
    public double euler(int a){
        double b=0;
        for(int i=0;i<=a;i++){
            b+=1/factorial(i);
        }
            
        
        return b;
    }





    public static void main(String[] args) {
        Fakultaet1 blubb = new Fakultaet1();
    }
}
```

Nach der heutigen Vorlesung ist wurde mir alles ein wenig klarer, so musste ich noch eine Umgebungsvariable in XP integrieren, damit ich überhaupt eingaben zulassen kann. Nun bin ich soweit gekommen, doch es funktiniert noch nicht ... Wo ist mein Fehler? 

MfG ludi


----------



## SlaterB (11. Nov 2008)

> fak = in.getInt("Eingabe der Schritte"); 

steht direkt in der Klasse, in der Klasse ist aber kein Code erlaubt,
muss in einen Konstruktor/ eine Methode,

ansonsten musst du deinen Compiler anwerfen und etwaige Fehler doch auch hier posten?!


----------



## Guest (11. Nov 2008)

Vielen Dank für die Tips, ich habs damit geschaft eine Eingabe einzubauen die funktioniert! Vielen vielen Dank!  :toll: 
Aber nun hab ich folgendes Problem:

Wenn ich den Schritt 0 eingebe, ist er bei 1.0, was ja ok ist, aber wenn ich 1 Schritt eingebe springt er auf 2.0 ... Normalerweise müsste er ja auf 1,5 springen (1/1+1/2=1,5). Paar Tips, wie ich die Formel abändern muss?



```
import dssz.io.*;
public class Fakultaet1 {
    
	stdin in = new stdin();
	int fak;
    
    Fakultaet1(){
        fak = in.getInt("Eingabe der Schritte");
		System.out.println("Die Eulersche Zahl betraegt nach "+fak+" Schritten:"+euler(fak));
        
    }
    
    public double factorial(int a){
        double b=1;
        for(int i=1;i<=a;i++){
            b*=i;
        }
        
        return b;
    }
    public double euler(int a){
        double b=0;
        for(int i=0;i<=a;i++){
            b+=1/factorial(i);
        }
            
        
        return b;
    }





    public static void main(String[] args) {
        Fakultaet1 blubb = new Fakultaet1();
    }

	
}
```

Nochmal vielen Dank SlaterB!

MfG ludi


----------



## SlaterB (11. Nov 2008)

schau dir alle Teile des Programmablaufs an, du kannst doch so viele System.out.println einbauen wie du willst,

factorial(0) ist 1,
factorial(1) ist aber auch 1, so wie die Schleife dort aufgebaut ist,

wie soll da 2 entstehen? du musst die Schleife ändern oder a erhöhen oder sonst was


----------



## Landei (11. Nov 2008)

```
//imperative Version, absichtlich verwirrend geschrieben
    public static double fac1(int n) {
        double result = 1;
        while(0 <-- n) {
            result*=n;
        }
        return result;
    }

    //rekursive Version, absichtlich verwirrend geschrieben
    public static double fac2(int n) {
        return n < 2 ? 1 : n*fac2(n-1);
    }
```


----------



## SlaterB (12. Nov 2008)

@Landei

und wie soll dabei fac1(1) == 2 werden oder auch fac2(1) == 2? 


vielleicht soll das gar nicht so ein und erst fac1(2) == 2,
dann funktioniert aber doch die Originalmethode factorial(int a) genauso gut, oder?


----------



## Landei (12. Nov 2008)

Die Fakultät ist definiert als n! = 1*2*...*n, und alles andere sollte man nicht so nennen.
Sorry, ich hatte wegen deines Kommentars den Eindruck, dass die obige Funktion gar nicht läuft und habe nicht noch mal genauer hingeguckt...


> Wenn ich den Schritt 0 eingebe, ist er bei 1.0, was ja ok ist, aber wenn ich 1 Schritt eingebe springt er auf 2.0 ... Normalerweise müsste er ja auf 1,5 springen (1/1+1/2=1,5). Paar Tips, wie ich die Formel abändern muss?


Nein, die ersten Schritte sind 1/1 + 1/1 + 1/2 + 1/6, dein Programm müsste eigentlich korrekt  sein.


----------



## SlaterB (12. Nov 2008)

ach ja, Fakultät,
ich hatte gar nicht über den tieferen Sinn nachgedacht und nur einen abstrakten 'Faktor in der Berechnung' gelesen


----------



## Guest (16. Nov 2008)

da nutzt wohl jemand java code aus dem netz, da werden die leute an der btu aber nicht sehr erfreut drüber sein...


----------



## Dgimis (18. Nov 2008)

good guest page.
thank you.


----------

