Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Es soll ein Näherungswert der Eulerschen Zahl für n Element der natürlichen Zahlen berechnet werden.
Implementieren Sie ein kleines Programm, welches die oben genannte Formel fur die positive Integer-Zahl n implementiert. Die Zahl n wird dem Programm als Kommandozeilenargument übergeben. Der Aufruf java EulersNumber 6 setzt beispielsweise n auf den Wert 6. Geben Sie am Ende Ihrer Berechnung das Ergebnis, d.h. die Approximation der eulerschen Zahl für die Zahl n, auf dem Terminal aus. Dazu können Sie die Methode System.out.println() nutzen. Sie konnen annehmen, dass die Zahl n eine positive Integer-Zahl ist.
Mein Code:
Java:
public class EulersNumber {
public static void main(String[] args) {
double e;
double summand;
int n;
e=1.0;
summand=1.0;
for(n = 1;n <= args.length;n++) {
summand = summand/args.length;
e = e + summand;
}
System.out.println(e);
}
}
Wie kann ich für n als Kommandozeilenargument einen Wert übergeben? Wenn ich den Aufruf mit einer höheren Zahl als 1 ausführe kommt immer nur 2.0 als Ergebnis raus.
Irgendwas stimmt mit meiner Rechnung nicht. Wenn ich z.B java EulersNumber 3 ausführe, kommt 7 raus, was ja nicht stimmt. Weiß jemand was an der Rechnung falsch ist.
Veränderter Code:
Java:
public class EulersNumber {
public static void main(String[] args) {
double e;
double summand;
int n;
e=1.0;
summand = Double.parseDouble(args[0]);
for(n = 0;n <= args.length;n++) {
summand = summand/args.length;
e = e + summand;
}
System.out.println(e);
}
}
Ja klar stimmt was mit deiner Rechnung nicht. Was machst du denn da mit args.length ? Das ist immer 1 !!!! Das heisst du gehst zweimal durch die Schleife, rechnest also 1.0 + 3.0 + 3.0 und das ist 7. Kannst du mal die Formel posten mit der du e ausrechnen sollst ??!!
Fangen wir doch mal andersherum an. Wie kommst du zu der Annahme, dass dein Algorithmus die Zahl e annähern könnte?
Was du vermutlich machen willst, ist die Reihenentwicklung der Exponentialfunktion an der Stelle x=1 auszuwerten, dein Code hat damit aber noch nicht wirklich viel zu tun...
Ich soll in der Aufgabe die eulersche Zahl e approximieren, also
e=
n Σ 1/k! k=0
Die Zahl n wird dem Programm als Kommandozeilenargument übergeben. Also z.B java EulersNumber 1.
Wie schreibe ich nun den Code für jedes n>1, das am Ende immer das Ergebnis ausgegeben wird?
In jedem Schritt die Fakultät der Zählvariable neu zu berechnen großer Murks. Merk dir besser das Ergebnis dieser Teilrechnung aus dem vorherigen Schritt, dann musst du im nächsten Schleifendurchlauf nur noch eine weitere Multiplikation durchführen.
Das ist zwar prinzipell richtig. Aber wir reden hier von 10 bis max. 20 Schleifendurchläufen dann ist e auf beliebig viele Stellen genau. Und so ist es inuitiver !
Im wesentlichen eigentlich nur eine falsche Klammerung. Schau dir die Unterschiede zu deinem Code mal genau an, es sind wirklich nur 1-2 Kleinigkeiten, die ich abgeändert habe:
Java:
public class EulersNumber {
public static void main(String[] args) {
int grenze = 20;
double e=0.0;
for (int i=0; i<grenze;i++) {
e = e + 1.0/fakultaet(i);
}
System.out.println(e);
}
static double fakultaet(int i) {
double fak=1;
for (int grenze=1; grenze<=i; grenze++) {
fak = fak * grenze;
}
return fak;
}
}
Ich habe deinen Code ausprobiert aber jetzt bekomme ich nur das Ergebnis für 20. Es soll doch für alle beliebigen Grenzen funktionieren.
Wenn ich jetzt
Java:
int grenze = 20;
durch
Java:
int grenze = Integer.parseint(args[0]);
ersetze, kommt bei mir die Fehlermeldung:
javac EulersNumber.java
EulersNumber.java:3: error: cannot find symbol
int grenze = Integer.parseint(args[0]);
^
symbol: method parseint(String)
location: class Integer
1 error
Nein, die Fakultät-Methode war schon so in Ordnung. Er hatte die Methode nur verschachtelt in der main-Methode eingebaut. Auf die falsche Klammerung hab ich aber oben auch schon hingewiesen.