Eulerzahl - Eingabe von Schritten: Wie?

Status
Nicht offen für weitere Antworten.
L

ludi

Gast
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!

Code:
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]
 
G

Guest

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


Code:
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
 
S

SlaterB

Gast
> 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?!
 
G

Guest

Gast
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?


Code:
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
 
S

SlaterB

Gast
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

Top Contributor
Code:
    //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);
    }
 
S

SlaterB

Gast
@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

Top Contributor
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.
 
S

SlaterB

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

Guest

Gast
da nutzt wohl jemand java code aus dem netz, da werden die leute an der btu aber nicht sehr erfreut drüber sein...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben