Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #define grenze 0.001 /*grenze weil..... ungenauigkeit*/
- #define checkmult 1000000 // multiplikation fuer den grenzwert
- #define piohne 3141593 // pi zum vergleichen fuer den Grenzwert 3.141593
- #include <stdio.h>
- #include <math.h>
- #include <ctype.h>
- #include "fhswf_service.h"
- int main(void)
- {
- /* Restart Variablen deklaration*/
- char restart[2];
- /* Restart Schleife skrt*/
- do
- {
- /*Allg. Variablendeklaration*/
- double eingabe;
- int anzahl = 0, scancheck = 0, index = 0, flag = 0, einmal = 0;
- float kommaspalt = 0.0;
- double abfall = 0.0, pi = 1.0, nenner = 1.0, zahler = 0.0;
- /*Eingabeaufforderung und Ueberpruefung auf Nachkommastellen, Negative Werte und Buchstaben*/
- printf("Dies ist ein Programm zur manuellen Bestimmung von Pi nach Wallis.\n");
- do
- {
- printf("Geben Sie eine positive Ganzzahl ein, wie oft der Vorgang durchlaufen werden soll:");
- scancheck = scanf("%lf", &eingabe);
- kommaspalt = modf(eingabe, &abfall);
- tastaturpuffer_leeren();
- } while (kommaspalt >= grenze || !scancheck || eingabe <= 0.0);
- anzahl = eingabe; /* Wie bei P6A1 nachkommastellen abschneiden fuer praezise angaben*/
- /* Schleife die durch die Eingabe so oft durchlaeut wie man will*/
- for (index = 0; index < anzahl; index++)
- {
- /* Flag erzweigung um abwechselnd 2 zum zaehler bzw zum nenner zu addieren*/
- if (flag == 0)
- {
- flag = 1;
- zahler += 2.0;
- }
- else
- {
- if (flag == 1)
- {
- flag = 0;
- nenner += 2.0;
- }
- }
- pi = pi * (zahler / nenner); // eigentliche rechnung mit float gecastet .... weil integerdivision
- /* modf um bei der grenzwertueberpruefung zu helfen*/
- modf(((pi*2.0) * checkmult), &abfall);
- /* grenzwertueberpruefung und einmalige ausgabe*/
- if ((abfall - piohne) == 0 && einmal == 0)
- {
- printf("\n\tDurchlaeufe bis Grenzwert: %i", index);
- einmal = 1;
- }
- }
- /* Ausgabe des Pis und Neustartaufforderung*/
- printf("\n\n\tIhr ermitteltes 'Pi': %.9f", pi*2.0);
- printf("\n\nFertig. Moechten Sie das Programm neu starten? J/N\n");
- scanf("%c", restart);
- tastaturpuffer_leeren();
- /*toupper macht kleine buchstaben zu Grossbuchstaben*/
- restart[0] = toupper(restart[0]);
- } while (restart[0] == 'J');
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement