Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- /* Feld zur Zuordnung zwischen der Nummer eines Wochentags und dessen
- Namen (Zeichenfolge) */
- const char *wochentage[7] = {
- "Sonntag",
- "Montag",
- "Dienstag",
- "Mittwoch",
- "Donnerstag",
- "Freitag",
- "Samstag"
- };
- /* Feld zur Zuordnung zwischen der Nummer eines Monats und der Anzahl
- der Tage in diesem Monat */
- const int monatstage[13] =
- {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- /*
- * Vorwärtsdeklarationen von Funktionen
- */
- int datumEinlesen(int *jahr, int *monat, int *tag);
- int tageDurchJahr(int jahr);
- int tageDurchMonat(int monat, int jahr);
- int istSchaltjahr(int jahr);
- int main()
- {
- int jahr=0, monat=0, tag=0; /* Eingegebenes Datum */
- int tage = 0; /* Tage die seit dem 1.1.0 vergangen sind */
- /*
- * Abfragen des Datums
- */
- if (!datumEinlesen(&jahr, &monat, &tag)) {
- return 1;
- }
- /*
- * Berechnung der seit dem 1.1.0 vergangenen Tage
- */
- tage = tageDurchJahr(jahr);
- tage += tageDurchMonat(monat, jahr);
- tage += tag - 1; /* Anzahl der Tage durch die Tagesangabe */
- /*
- * Ausgabe des Wochentags
- */
- printf("Der %02i.%02i.%i ist ein %s.\n",
- tag, monat, jahr, wochentage[tage%7]);
- return 0;
- }
- /*
- * datumEinlesen
- *
- * Diese Funktion liest das Datum ein und speichert die Eingabe in den
- * mit jahr, monat und tag referenzierten Variablen. War die Eingabe
- * des Benutzers korrekt, gibt die Funktion 1 (wahr) zurück. Macht der
- * Benutzer eine falsche Eingabe (z.B. 29.2.2001 oder Monat > 12),
- * dann bricht die Funktion sofort ab und gibt 0 (falsch) zurück.
- */
- int datumEinlesen(int *jahr, int *monat, int *tag)
- {
- printf("Jahr: ");
- scanf("%i", jahr);
- if (*jahr < 0)
- return 0;
- printf("Monat: ");
- scanf("%i", monat);
- if (*monat < 1 || *monat > 12)
- return 0;
- printf("Tag: ");
- scanf("%i", tag);
- if (*tag < 1 || (!istSchaltjahr(*jahr) && *tag > monatstage[*monat]) || (istSchaltjahr(*jahr) && *monat == 2 && *tag > 29))
- return 0;
- return 1;
- }
- /*
- * tageDurchJahr
- *
- * Diese Funktion gibt die Anzahl der Tage zurück, die seit dem 1.1.0
- * bis zum Ende des Jahres vor der Jahresangabe jahr vergangen sind,
- * also die Anzahl an Tagen, die allein sich dadurch ergibt das man die
- * Jahreszahl angibt.
- */
- int tageDurchJahr(int jahr)
- {
- int ret = 0;
- int i;
- for (i = 0; i < jahr; ++i)
- ret += istSchaltjahr(i) ? 366 : 365;
- return ret;
- }
- /*
- * tageDurchMonat
- *
- * Diese Funktion gibt die Anzahl der Tage zurück, die im Jahr jahr
- * seit Jahresbeginn bis zum Ende des Monats vor der Monatsangabe
- * monat vergangen sind, also die Anzahl an Tagen, die sich dadurch
- * ergibt, dass man einen bestimmten Monat angibt. Der Parameter jahr
- * ermöglicht der Funktion zwischen Schaltjahren und Nicht-Schaltjahren
- * zu unterscheiden.
- */
- int tageDurchMonat(int monat, int jahr)
- {
- int i, ret = 0;
- for (i = 1; i < monat; ++i) {
- ret += monatstage[i];
- }
- if (istSchaltjahr(jahr) && monat > 2)
- ret++;
- return ret;
- }
- /*
- * istSchaltjar
- *
- * Berechnet, ob jahr ein Schaltjahr war. Trifft dies zu, gibt
- * die Funktion 1 zurück, andernfalls 0.
- */
- int istSchaltjahr(int jahr)
- {
- if ((jahr != 0) && ((jahr % 4 == 0) && ((jahr % 100 != 0) || (jahr % 400 == 0))))
- return 1;
- else
- return 0;
- }
Add Comment
Please, Sign In to add comment