Java < Java < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 21:47 So 18.05.2014 | Autor: | Benko |
Aufgabe | Schreiben Sie eine Methode cos(double x, int n), die das Ergebnis der folgenden Summenformel auf der Konsole ausgibt:
[mm] cos(x)=\summe_{i=0}^{n}(-1)^{i}*\bruch{x^{2i}}{(2i)!}
[/mm]
Die Zahlen x und n sollen beim Aufruf der Methode als Parameter übergeben und vorher von der Konsole abgefragt werden.
Hinweis: Das Potenzieren von Werten geschieht über die Methode pow der Kasse Math.
Zum Beispiel: double ergebnis=Math.pow(basis,exponent);
basis und exponent sind beides Variablen von Typ double. |
Hallo, hier is mein Prg. (schöne Sonntagsbeschäftigung ^^)..
Leider funzt das nich richtig bei kompilieren.
Kann mir bitte jemand einleuchtend erklären, wo ich einen Fehler gemacht habe und warum?! Wäre super nice. VG
import java.util.Scanner;
public class [mm] A1_1{
public static void main (String []args){
Scanner scan=new Scanner (System.in);
System.out.println("Geben Sie einen Wert für n ein:");
int n=scan.nextInt();
System.out.println("Geben Sie einen Wert für x ein:");
double x=scan.nextDouble();
double ergebnis= cos(x,n);
System.out.println(ergebnis);
}
public static double cos(double x,int n){ //Endberechnung
int n1=n;
double ergebnis=0;
for(int n ; 0>=n; n--){
double ergebnis1=rechnung1(x,n);
double ergebnis2=rechnung2(x,n);
double ergebnis3=rechnung3(x,n);
ergebnis=ergebnis+ergebnis1*(ergebnis2/ergebnis3);
}
return ergebnis;
}
public static double rechnung1(double x, int n){
double ergebnis1=Math.pow(-1,n);
return ergebnis1;
}
public static double rechnung2(double x, int n){
double ergebnis2=Math.pow(x,2*n);
return ergebnis2;
}
public static double rechnung3(double x, int n){
double ergebnis3 = 1;
if (n >= 1){
while (n > 0) {
ergebnis3 = ergebnis3 * n;
n--;
}
return ergebnis3;
}
else {
ergebnis3=1;
}
return ergebnis3;
}
}
[/mm]
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:55 So 18.05.2014 | Autor: | Benko |
In meinem ersten Post, wurde mein Prg. leider nicht richtig formatiert übernommen, hier das "korrekte" Prg.:
1: | import java.util.Scanner;
| 2: |
| 3: | public class A1_1 {
| 4: | public static void main(String[] args) {
| 5: |
| 6: | Scanner scan = new Scanner(System.in);
| 7: |
| 8: | System.out.println("Geben Sie einen Wert für n ein:");
| 9: | int n = scan.nextInt();
| 10: |
| 11: | System.out.println("Geben Sie einen Wert für x ein:");
| 12: | double x = scan.nextDouble();
| 13: |
| 14: | double ergebnis = cos(x, n);
| 15: |
| 16: | System.out.println(ergebnis);
| 17: | }
| 18: |
| 19: | public static double cos(double x, int n) { // Endberechnung
| 20: | int n1 = n;
| 21: | double ergebnis = 0;
| 22: | for (int n; 0 >= n; n--) {
| 23: | double ergebnis1 = rechnung1(x, n);
| 24: | double ergebnis2 = rechnung2(x, n);
| 25: | double ergebnis3 = rechnung3(x, n);
| 26: | ergebnis = ergebnis + ergebnis1 * (ergebnis2 / ergebnis3);
| 27: | }
| 28: |
| 29: | return ergebnis;
| 30: | }
| 31: |
| 32: | public static double rechnung1(double x, int n) {
| 33: |
| 34: | double ergebnis1 = Math.pow(-1, n);
| 35: | return ergebnis1;
| 36: |
| 37: | }
| 38: |
| 39: | public static double rechnung2(double x, int n) {
| 40: |
| 41: | double ergebnis2 = Math.pow(x, 2 * n);
| 42: | return ergebnis2;
| 43: | }
| 44: |
| 45: | public static double rechnung3(double x, int n) {
| 46: |
| 47: | double ergebnis3 = 1;
| 48: | if (n >= 1) {
| 49: | while (n > 0) {
| 50: |
| 51: | ergebnis3 = ergebnis3 * n;
| 52: | n--;
| 53: |
| 54: | }
| 55: | return ergebnis3;
| 56: | } else {
| 57: | ergebnis3 = 1;
| 58: |
| 59: | }
| 60: | return ergebnis3;
| 61: |
| 62: | }
| 63: |
| 64: | } |
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 22:00 So 18.05.2014 | Autor: | Benko |
...das Prg. hat irgendwas an meiner for-schleife auszusetzen??
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 22:23 So 18.05.2014 | Autor: | riju |
Hallo,
schreibe die for-Schleife mal wie folgt um:
double ergebnis = 0;
for (int i = n; 0 >= i; i--) {
double ergebnis1 = rechnung1(x, i);
double ergebnis2 = rechnung2(x, i);
double ergebnis3 = rechnung3(x, i);
ergebnis = ergebnis + ergebnis1 * (ergebnis2 / ergebnis3);
}
du darfst die Variable n nicht nochmal initialisieren. Verwende dafür einfache eine neuen Laufindex.
int n1=n kannst du löschen.
Jetzt müsste es eigentlichen funktionieren
Liebe Grüße
riju
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 23:46 So 18.05.2014 | Autor: | Benko |
Ich danke dir, Schusselfehler meinserseits ;)
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 22:31 So 18.05.2014 | Autor: | DieAcht |
Hallo Benko,
Dein Programm kann vielleicht so funktionieren, aber du sol-
test es auf jeden Fall überarbeiten. Es ist nicht Sinn und
Zweck einer Methode nur eine simple Methode der Klasse Math
zu benutzen. Schreibe eine Methode, die die Berechnung durch-
führt. Ganz am Ende kannst du dir als Bonus mal überlegen
wie du dir bei der Berechnung der Fakultät auch nochmal
enorm viel "ersparen" kannst.
Grüß
DieAcht
|
|
|
|
|
Hallo!
Damit das Forum Quellcode nicht zerreißt, diesen einfach in [code][/code] einschließen. Hab ich oben mal gemacht, wenngleich dabei Tabs offensichtlich ignoriert werden. Aber das Forum versucht jedenfalls nicht, daraus Formeln zu machen.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 23:54 So 18.05.2014 | Autor: | Benko |
Also ich arbeite mit Eclipse. Da gibts die Funktion "Format" in "Source" zu finden.. Als ich also mein Text autoformatiert hatte, gings auch mitm posten :)
import java.util.Scanner;
public class [mm] A1_1 [/mm] {
public static void main(String[] args) {
String antwortja = new String("ja");
String antwort;
Scanner scan = new Scanner(System.in);
do {
System.out.println("Geben Sie einen Wert für n ein:");
int n = scan.nextInt();
System.out.println("Geben Sie einen Wert für x ein:");
double x = scan.nextDouble();
double ergebnis = cos(x, n);
System.out.println(ergebnis);
antwort = scan.nextLine();
System.out.println("Nochmal die Summe errechnen? ja oder nein?");
antwort = scan.nextLine();
} while (antwort.equals(antwortja));
}
public static double cos(double x, int n) { // Endberechnung
double ergebnis = 0;
while (0 <= n) {
double ergebnis1 = rechnung1(x, n);
double ergebnis2 = rechnung2(x, n);
double ergebnis3 = rechnung3(x, n);
ergebnis = ergebnis + ergebnis1 * (ergebnis2 / ergebnis3);
n--;
}
return ergebnis;
}
public static double rechnung1(double x, int n) {
double ergebnis1 = Math.pow(-1, n);
return ergebnis1;
}
public static double rechnung2(double x, int n) {
double ergebnis2 = Math.pow(x, 2 * n);
return ergebnis2;
}
public static double rechnung3(double x, int n) {
n = 2 * n;
double ergebnis3 = 1;
if (n >= 1) {
while (n > 0) {
ergebnis3 *= n;
n--;
}
} else {
ergebnis3 = 1;
}
System.out.println("ergebnis3 " + ergebnis3);
return ergebnis3;
}
}
|
|
|
|
|
Hallo!
Das liegt aber nicht direkt an eclipse.
Wenn das Forum Teile einer Formel zu erkennen glaubt, versucht es, diese als solche darzustellen. Dazu gehört zum Beispiel der Unterstrich _. Du hast deine Funktion A1_1 genannt, und das Forum macht daraus [mm] A1_1 [/mm] (übrigens immernoch).
Anfangs hattest du A1_1{ geschrieben, jetzt steht da A1_1 { , es gibt also jetzt ein Leerzeichen. Geschweifte Klammern fassen in LaTeX (und damit auch im Forum, wenn es meint, da sein ne Formel) genauso wie in C/Java Blöcke zusammen.
Das Forum erkennt das A1_1{ als Formel, und weil dahinter die Klammer kommt, alles bis zur zugehörigen schließenden Klammer auch. Mit dem Leerzeichen gehört die Klammer nicht mehr zur Formel.
Es mag in diesem Fall hier helfen, aber es gibt viele Zeichen, die beim Programmieren vorkommen, und das Forum verwirren können.
|
|
|
|