Guest User

Untitled

a guest
May 25th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1.  
  2. #include <stdio.h>
  3.  
  4.  
  5. /* Feld zur Zuordnung zwischen der Nummer eines Wochentags und dessen
  6. Namen (Zeichenfolge) */
  7. const char *wochentage[7] = {
  8. "Sonntag",
  9. "Montag",
  10. "Dienstag",
  11. "Mittwoch",
  12. "Donnerstag",
  13. "Freitag",
  14. "Samstag"
  15. };
  16.  
  17. /* Feld zur Zuordnung zwischen der Nummer eines Monats und der Anzahl
  18. der Tage in diesem Monat */
  19. const int monatstage[13] =
  20. {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  21.  
  22.  
  23. /*
  24. * Vorwärtsdeklarationen von Funktionen
  25. */
  26. int datumEinlesen(int *jahr, int *monat, int *tag);
  27. int tageDurchJahr(int jahr);
  28. int tageDurchMonat(int monat, int jahr);
  29. int istSchaltjahr(int jahr);
  30.  
  31.  
  32. int main()
  33. {
  34. int jahr=0, monat=0, tag=0; /* Eingegebenes Datum */
  35. int tage = 0; /* Tage die seit dem 1.1.0 vergangen sind */
  36.  
  37.  
  38. /*
  39. * Abfragen des Datums
  40. */
  41. if (!datumEinlesen(&jahr, &monat, &tag)) {
  42. return 1;
  43. }
  44.  
  45.  
  46. /*
  47. * Berechnung der seit dem 1.1.0 vergangenen Tage
  48. */
  49. tage = tageDurchJahr(jahr);
  50. tage += tageDurchMonat(monat, jahr);
  51. tage += tag - 1; /* Anzahl der Tage durch die Tagesangabe */
  52.  
  53.  
  54. /*
  55. * Ausgabe des Wochentags
  56. */
  57.  
  58. printf("Der %02i.%02i.%i ist ein %s.\n",
  59. tag, monat, jahr, wochentage[tage%7]);
  60.  
  61. return 0;
  62. }
  63.  
  64.  
  65. /*
  66. * datumEinlesen
  67. *
  68. * Diese Funktion liest das Datum ein und speichert die Eingabe in den
  69. * mit jahr, monat und tag referenzierten Variablen. War die Eingabe
  70. * des Benutzers korrekt, gibt die Funktion 1 (wahr) zurück. Macht der
  71. * Benutzer eine falsche Eingabe (z.B. 29.2.2001 oder Monat > 12),
  72. * dann bricht die Funktion sofort ab und gibt 0 (falsch) zurück.
  73. */
  74. int datumEinlesen(int *jahr, int *monat, int *tag)
  75. {
  76. printf("Jahr: ");
  77. scanf("%i", jahr);
  78. if (*jahr < 0)
  79. return 0;
  80.  
  81. printf("Monat: ");
  82. scanf("%i", monat);
  83. if (*monat < 1 || *monat > 12)
  84. return 0;
  85.  
  86. printf("Tag: ");
  87. scanf("%i", tag);
  88. if (*tag < 1 || (!istSchaltjahr(*jahr) && *tag > monatstage[*monat]) || (istSchaltjahr(*jahr) && *monat == 2 && *tag > 29))
  89. return 0;
  90.  
  91. return 1;
  92. }
  93.  
  94.  
  95. /*
  96. * tageDurchJahr
  97. *
  98. * Diese Funktion gibt die Anzahl der Tage zurück, die seit dem 1.1.0
  99. * bis zum Ende des Jahres vor der Jahresangabe jahr vergangen sind,
  100. * also die Anzahl an Tagen, die allein sich dadurch ergibt das man die
  101. * Jahreszahl angibt.
  102. */
  103. int tageDurchJahr(int jahr)
  104. {
  105. int ret = 0;
  106. int i;
  107. for (i = 0; i < jahr; ++i)
  108. ret += istSchaltjahr(i) ? 366 : 365;
  109.  
  110. return ret;
  111. }
  112.  
  113.  
  114. /*
  115. * tageDurchMonat
  116. *
  117. * Diese Funktion gibt die Anzahl der Tage zurück, die im Jahr jahr
  118. * seit Jahresbeginn bis zum Ende des Monats vor der Monatsangabe
  119. * monat vergangen sind, also die Anzahl an Tagen, die sich dadurch
  120. * ergibt, dass man einen bestimmten Monat angibt. Der Parameter jahr
  121. * ermöglicht der Funktion zwischen Schaltjahren und Nicht-Schaltjahren
  122. * zu unterscheiden.
  123. */
  124. int tageDurchMonat(int monat, int jahr)
  125. {
  126. int i, ret = 0;
  127.  
  128. for (i = 1; i < monat; ++i) {
  129. ret += monatstage[i];
  130. }
  131.  
  132. if (istSchaltjahr(jahr) && monat > 2)
  133. ret++;
  134.  
  135. return ret;
  136.  
  137. }
  138.  
  139.  
  140. /*
  141. * istSchaltjar
  142. *
  143. * Berechnet, ob jahr ein Schaltjahr war. Trifft dies zu, gibt
  144. * die Funktion 1 zurück, andernfalls 0.
  145. */
  146. int istSchaltjahr(int jahr)
  147. {
  148. if ((jahr != 0) && ((jahr % 4 == 0) && ((jahr % 100 != 0) || (jahr % 400 == 0))))
  149. return 1;
  150. else
  151. return 0;
  152.  
  153. }
Add Comment
Please, Sign In to add comment