# Hilfe bei Pi



## Gimi (10. Jan 2021)

[CODE lang="java" title="Pi"]import java.util.*;
    public class Pi
    {
        public static void main(String args[])
        {
            Scanner sc = new Scanner(System.in);

             System.out.println("Mit welchem Beispiel wollen sie rechnen?");
             System.out.println("(1).Wallissche Produkt");
             System.out.println("(2).Leibnitz Reihe");
             System.out.println("(3).Formel von Kelallur Nilakantha Somayaji");
             System.out.println("(4).Formel von Euler ");
            char eingabeBeispiel = sc.next().charAt(0);

            /*if (eingabeBeispiel =='1') {
                System.out.println("Geben sie eine Zahl ein");
                int eingabe = sc.nextInt();

                double piHalbe = 1.0;
                double j = 1.0;
                 for (double i = 1; i < eingabe; i++, j++) {
                     if (i % 2 == 0) {
                         piHalbe *= (j / (j + 1));

                     }else {
                         piHalbe *= ((j + 1) / j);
                     }
                 }
                 double k=2*piHalbe;
                 System.out.println("ergebnis:" + k);
            }*/
            /*if (eingabeBeispiel =='2') {
                System.out.println("Geben sie eine Zahl ein");
                int zahl = sc.nextInt();

                double s = 1;
                double ergebnis = 0;
                for (int rechner = 1; rechner < zahl; rechner=rechner+2)    {
                    ergebnis += s/rechner;
                    s = -s;
                }
                ergebnis = ergebnis * 4;
                System.out.println("PI ist:" + ergebnis);
            }*/

                if (eingabeBeispiel =='3') {
                System.out.println("Geben sie eine Zahl ein");
                int eingabe = sc.nextInt();

                double rechnung2 = 0;
                double s = -4;
                for (int rechner = 3; rechner < eingabe; rechner = rechner +2) {
                    int rechner2 = rechner;
                    double rechnung = (rechner2 * rechner2 *rechner2) - rechner2;
                    rechnung2 += s/rechnung;
                    s = -s;

                double sZwei = 4;
                double rechnungVier = 0;
                for (int rechnerDrei = 5; rechnerDrei < eingabe; rechnerDrei = rechnerDrei +2) {
                    int rechnerVier = rechnerDrei;
                    int rechnungDrei = (rechnerVier^3) -rechnerVier;
                    rechnungVier += sZwei/rechnungDrei;

                     if (rechnung2 == rechnung2) {
                        double Loesung = rechnung2 + rechnungVier;
                        rechnung = -rechnung;
                        break;
                    }
                    else if (rechnung2 == -rechnung2) {
                        double Loesung = rechnung2 - rechnungVier;


                    System.out.println("PI=" + Loesung +3);
                    }
            }
        }
                }


        }            } [/CODE]

Pi=3+4/3^3-3 - 4/5^3-5 + 4/7^3-7 - 4/9^3-9 +...

Ich verstehe nicht warum Beispiel "´3" nicht funktioniert.
Es soll am ende Pi rauskommen


----------



## temi (10. Jan 2021)

Irgendwie bekomme ich Kopfschmerzen, wenn ich mir den Code anschaue: "rechner", "rechner2", "rechnung3", "rechner3"... Das ist ja schrecklich!

Kein Wunder, wenn bei den Variablennamen irgendwo ein Fehler passiert.


----------



## White_Fox (10. Jan 2021)

Den finde ich auch nicht schlecht:


```
}
            }
        }
                }
           
   
        }            }
```

@TS:
Überarbeite deinen Code mal bitte. Vergib vernünftige und aussagenkräftige Bezeichnungen. Deklariere lieber eine Variable zuviel als zuwenig. Wenn du ein Integer nur am Anfang brauchst, ein weiteres Integer nur am Ende, beide aber für etwas anderes genutzt werden, dann deklariere zwei Integer und gib ihnen Namen, denen man ansieht wofür die Variable ist. Auch zwischendurch eine Funktion einzubauen um einen Bezeichner für den jeweiligen Arbeitsschritt zu haben ist immer gut.

Edit:
Wahrscheinlich findest du den Fehler dann auch von alleine.


----------



## kneitzel (10. Jan 2021)

Dann einfach einmal überlegen:
a) Was soll ^ in der Schreibweise der Rechnung bedeuten?
b) Was für eine Operation ist ^ in Java? 

Und wenn Du da den Unterschied heraus gefunden hast, dann darfst Du schauen, wie Du die Operation aus a) in Java abbilden kannst ...


----------



## Blender3D (10. Jan 2021)

Gimi hat gesagt.:


> Ich verstehe nicht warum Beispiel "´3" nicht funktioniert.
> Es soll am ende Pi rauskommen


Teile den Code auf dann kannst Du dich nur mehr auf das eigentliche Problem konzentrieren.
Hier ein Beispiel für die Benutzereingabe. Deine Aufgabe ist es dann, die Berechnungen zu machen.
[CODE lang="java" title="Teile und Herrsche" highlight="7-17,40-43, 47-50,54-57,61-64,"]import java.util.Scanner;

public class TestPi {
    private static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
        printMenu();
        int selected = inputRangedNumber("Bitte waehle eine Zahl: ", 1, 4);
        int interationen = inputRangedNumber("Bitte gib die Anzahl der Schritte ein: ", 1, 1000000);
        if (selected == 1)
            piWallisscheProdukt(interationen);
        if (selected == 2)
            Leibnitz(interationen);
        if (selected == 3)
            Somayaji(interationen);
        if (selected == 4)
            piEuler(interationen);

    }

    private static int inputRangedNumber(String label, int min, int max) {
        int val = 0;
        boolean ok = false;
        do {
            System.out.print(label);
            try {
                val = Integer.parseInt(input.next());
                if (val < min || val > max)
                    System.out.println("Bitte eine Zahl im Bereich [" + min + "-" + max + "] eingeben");
                ok = true;
            } catch (NumberFormatException e) {
                System.out.println("Bitte eine ganze Zahl eingeben!");
            }

        } while (!ok);
        return val;
    }

    private static double piWallisscheProdukt(int n) {
        double value = 0;
        System.out.println("WallisscheProdukt");
        // TODO
        return value;
    }

    private static double Leibnitz(int n) {
        double value = 0;
        System.out.println("Leibnitz");
        // TODO
        return value;
    }

    private static double Somayaji(int n) {
        double value = 0;
        System.out.println("Somayaji");
        // TODO
        return value;
    }

    private static double piEuler(int n) {
        double value = 0;
        System.out.println("Euler");
        // TODO
        return value;
    }

    private static void printMenu() {
        System.out.println("Mit welchem Beispiel wollen sie rechnen?");
        System.out.println("(1).Wallissche Produkt");
        System.out.println("(2).Leibnitz Reihe");
        System.out.println("(3).Formel von Kelallur Nilakantha Somayaji");
        System.out.println("(4).Formel von Euler ");
    }
}[/CODE]


----------



## mihe7 (10. Jan 2021)

White_Fox hat gesagt.:


> Den finde ich auch nicht schlecht:


Textbasiertes Space-Invaders?


----------



## M.L. (10. Jan 2021)

Gimi hat gesagt.:


> [CODE lang="java" title="Pi"]
> 
> if (eingabeBeispiel =='3') {
> 
> ...


Von den bereits angesprochenen Problemen mal abgesehen: woher weiss der Benutzer denn, WAS eingegeben werden darf ?   Genau das scheint in den Bedingungen der for-Schleife(n) nämlich zum Problem zu werden...


----------

