# Wallisscheses Produkt



## Sebastian233 (1. Nov 2009)

Hallo

wir haben die Aufgabe bekommen PI mithilfe des Wallisschischen Produktes zu berechnen. Das Programm soll
nach der Anzahl der Berechnungsschritte fragen und dann das Ergebniss ausgeben.


```
public class Wallpro {
 public static void main(String[] args) {

 System.out.println("Geben sie die Anzahl der Berechnugsschritte ein:");
 java.util.Scanner scanner = new java.util.Scanner(System.in);

   int eingabe = scanner.nextInt();
   int wallpro = 1;
   while
   
}
System.out.println(wallpro);
```

Leider komme ich nun absulut nicht mehr weiter bzw ist die eigentliche Schleife ja das wichtigste. Da ich auch seit ca erst 1 Woche mit java arbeite bzw es versuche zu erlernen, habe ich nun keine wirkliche Idee wie ich das nun
in Java formuliereb kann.
Wallissches Produkt ? Wikipedia
Das was auf Wiki steht kann ich schon nachvollziehen nur fällt mir dazu keine wirkliche Lösung ein.
Wäre nett wenn mir da einer helfen könnte
MFG
Sebastian


----------



## Landei (1. Nov 2009)

```
int schritte = scanner.nextInt();
double wallpro = 1;
for(double n = 2; n <= schritte; n +=2) {
   wallpro *= (n/(n-1))*(n/(n+1));
}
```
n ist dabei jeweils der Zähler für zwei der Brüche, und geht die geraden Zahlen (beginnend bei 2) durch
Der eine Nenner ist um eins kleiner und der andere um eins größer als n.


----------



## Sebastian233 (1. Nov 2009)

danke für die schnelle Hilfe

also dein angegebener Code kann ich so halbwegs nachvollziehen. Warum benutzt du aber double anstatt int?
und wenn ich nun wallpro ausgeben lasse bekomme ich immer 0.0 als Ausgabe. Egal was ich eingebe als Anzahl für die Schritte.
Ja und warum for und keine while Schleife? Sorry wenn das alles vll ziemlich blöde Fragen sind aber wie gesagt bin ein völliger Grünschnabel in Sachen Programmieren. So würde der Code nun aussehen:

```
public class Wallpro {
public static void main(String[] args) {
System.out.println("Geben sie die Anzahl der Berechnugsschritte ein:");
java.util.Scanner scanner = new java.util.Scanner(System.in);
int schritte = scanner.nextInt();
double wallpro = 1;
for (int n = 2; n <= 2*schritte; n +=2) {
   wallpro *= (n/(n-1))*(n/(n+1));
}
   System.out.println(wallpro);
}
}
```


----------



## Landei (1. Nov 2009)

n muss auch double sein. Wenn n int ist, wird die Division ganzzahlig ausgeführt. Dann ist z.B. 2/3 = 0 und damit auch dein Produkt.


----------



## Sebastian233 (1. Nov 2009)

```
public class Wallpro {
public static void main(String[] args) {
System.out.println("Geben sie die Anzahl der Berechnugsschritte ein:");
java.util.Scanner scanner = new java.util.Scanner(System.in);
int schritte = scanner.nextInt();
double wallpro = 1;
for (double n = 2; n <= 2*schritte; n +=2) {
   wallpro *= (n/(n-1))*(n/(n+1));
}
   System.out.println(wallpro);
}
}
```

geändert....wenn ich nun 1 eingebe müsste ja laut wiki 2,7 rauskommen. Es kommt aber 1,33333333333
Nun bin ich etwas verwirrt 

achso ja stimmt das mit int. Daran habe ich nicht mehr gedacht. Würde sich halt wirklich schlecht machen bei PI


----------



## Landei (1. Nov 2009)

Wieso? 2/1 * 2/3 = 4/3 = 1.333333333

Ich habe in jedem Schritt zwei Brüche zusammengefasst. Ansonsten wird es komplizierter.

Gib doch mal 1000 ein, und schau, ob es prinzipiell funktioniert...


----------



## Sebastian233 (1. Nov 2009)

dann kommt 1.5704038730151908 

Es stimmt schon. Ich habe das alles gerade etwas durcheinander gebracht. Denn das Produkt * 2 = annähernd PI.

Grosses Dankeschön an dich 
hast mir echt weiter geholfen. Langsam verstehe ich das sogar alles.

MFG
Sebastian


----------

