14: Schleifen 7 – Berechnung der Kreiszahl Pi

 

Schreiben Sie ei nProgramm zur Berechnung der Kreiskonstanten π nach der Eulerformel:

\frac{\pi } {4} = \sum\limits_{i = 0}^\infty  {\left( {-1} \right)^i  \cdot \frac{1} {{2i+1}}}

Berechnen Sie π durch Vorgabe von:

  • Anzahl der Reihenglieder
  • Anzahl der genauen Dezimalstellen

Lösung

import java.util.Scanner; 	// Scanner für die Eingabe von Werten

public class Aufgabe14
{
	public static void main(String[] args)
	{
		// Variablen Deklaration
		Scanner scnEingabe = new Scanner(System.in);
		double dErgebnis, dAbweichung, dEPS;
		int iDezimalstellen, iSchritte, iModus, iSchritt;

		// Variablen Initialisierung
		iSchritt = 0;
		dErgebnis = 1.;
		System.out.println("Möglichkeiten zur Berechnung von Pi:");
		System.out.println("(1) Anzahl der Entwicklungsschritte vorgeben");
		System.out.println("(2) genaue Dezimalstellen vorgeben");

		System.out.print("\n   Bitte wählen: ");
		iModus = scnEingabe.nextInt();

		if (iModus == 1)
		{
			System.out.print("\n Entwicklungsschritte: ");
			iSchritte = scnEingabe.nextInt();

			for (iSchritt = 1; iSchritt <= iSchritte; ++ iSchritt)
				dErgebnis += Math.pow(-1, iSchritt)*(1. / (2 * iSchritt+1));

			System.out.println("Ergebnis: pi = "+4. * dErgebnis
					+ " nach "+iSchritte+" Schritten");
		} // end if

		else if (iModus == 2)
		{
			System.out.print("\n genaue Dezimalstellen: ");
			iDezimalstellen = scnEingabe.nextInt();

			dEPS = 1. / Math.pow(10, iDezimalstellen);

			do
			{ // Schleife berechnet Pi auf gewünschte Genauigkeit
				++ iSchritt;
				double dPrev = 4. * dErgebnis;
				dErgebnis += Math.pow(-1, iSchritt)*(1. / (2 * iSchritt+1));
				dAbweichung = dPrev-dErgebnis * 4;
				if (dAbweichung < 0)
					dAbweichung *= -1.;
			} // end do
			while (dAbweichung > dEPS);

			System.out.println("Ergebnis: pi = "+4. * dErgebnis+" nach "
					+ iSchritt+" Schritten");
		} // end else if
		else
			System.out.println("Ungültigen Modus gewählt!");
	} // end main
} // end class