Advertisement
Guest User

Untitled

a guest
Nov 20th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #define grenze 0.001 /*grenze weil..... ungenauigkeit*/
  3. #define checkmult 1000000 // multiplikation fuer den grenzwert
  4. #define piohne 3141593 // pi zum vergleichen fuer den Grenzwert 3.141593
  5.  
  6. #include <stdio.h>
  7. #include <math.h>
  8. #include <ctype.h>
  9. #include "fhswf_service.h"
  10.  
  11. int main(void)
  12. {
  13. /* Restart Variablen deklaration*/
  14. char restart[2];
  15. /* Restart Schleife skrt*/
  16. do
  17. {
  18. /*Allg. Variablendeklaration*/
  19. double eingabe;
  20. int anzahl = 0, scancheck = 0, index = 0, flag = 0, einmal = 0;
  21. float kommaspalt = 0.0;
  22. double abfall = 0.0, pi = 1.0, nenner = 1.0, zahler = 0.0;
  23.  
  24. /*Eingabeaufforderung und Ueberpruefung auf Nachkommastellen, Negative Werte und Buchstaben*/
  25.  
  26. printf("Dies ist ein Programm zur manuellen Bestimmung von Pi nach Wallis.\n");
  27. do
  28. {
  29. printf("Geben Sie eine positive Ganzzahl ein, wie oft der Vorgang durchlaufen werden soll:");
  30. scancheck = scanf("%lf", &eingabe);
  31. kommaspalt = modf(eingabe, &abfall);
  32. tastaturpuffer_leeren();
  33. } while (kommaspalt >= grenze || !scancheck || eingabe <= 0.0);
  34.  
  35. anzahl = eingabe; /* Wie bei P6A1 nachkommastellen abschneiden fuer praezise angaben*/
  36.  
  37. /* Schleife die durch die Eingabe so oft durchlaeut wie man will*/
  38. for (index = 0; index < anzahl; index++)
  39. {
  40. /* Flag erzweigung um abwechselnd 2 zum zaehler bzw zum nenner zu addieren*/
  41. if (flag == 0)
  42. {
  43. flag = 1;
  44. zahler += 2.0;
  45. }
  46. else
  47. {
  48. if (flag == 1)
  49. {
  50. flag = 0;
  51. nenner += 2.0;
  52. }
  53. }
  54.  
  55. pi = pi * (zahler / nenner); // eigentliche rechnung mit float gecastet .... weil integerdivision
  56.  
  57. /* modf um bei der grenzwertueberpruefung zu helfen*/
  58.  
  59. modf(((pi*2.0) * checkmult), &abfall);
  60.  
  61. /* grenzwertueberpruefung und einmalige ausgabe*/
  62.  
  63. if ((abfall - piohne) == 0 && einmal == 0)
  64. {
  65. printf("\n\tDurchlaeufe bis Grenzwert: %i", index);
  66.  
  67. einmal = 1;
  68. }
  69. }
  70.  
  71. /* Ausgabe des Pis und Neustartaufforderung*/
  72.  
  73. printf("\n\n\tIhr ermitteltes 'Pi': %.9f", pi*2.0);
  74. printf("\n\nFertig. Moechten Sie das Programm neu starten? J/N\n");
  75. scanf("%c", restart);
  76. tastaturpuffer_leeren();
  77.  
  78. /*toupper macht kleine buchstaben zu Grossbuchstaben*/
  79.  
  80. restart[0] = toupper(restart[0]);
  81.  
  82. } while (restart[0] == 'J');
  83.  
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement