- /*********************************************************************
- *
- * Aufgabe 307c
- *
- * Schreiben Sie ein Programm, um den Wochentag an einem bestimmten
- * Datum zu bestimmen. Berücksichtigen Sie folgende Regeln für das
- * Schaltjahr. Sie haben diese Bedingungen programmiertechnisch
- * bereits in Aufgabe 204 umgesetzt.
- *
- * - Ein Jahr, dessen Jahreszahl durch 4 teilbar ist, ist ein
- * Schaltjahr ...
- *
- * - ..., außer wenn die Jahreszahl durch 100 teilbar ist.
- *
- * - Ist die Jahreszahl durch 400 teilbar, dann ist das
- * entsprechende Jahr aber trotzdem ein Schaltjahr.
- * (Beispielsweise ist 1900 kein Schaltjahr, 2000 ist aber ein
- * Schaltjahr.)
- *
- * Zusätzlich soll das (fiktive) Jahr 0 kein Schaltjahr und der
- * 1. Januar 00 ein Sonntag gewesen sein.
- *
- * Fragen Sie zu Beginn das Datum mit
- *
- * "Jahr: "
- * "Monat: "
- * "Tag: "
- *
- * ab. Überprüfen Sie dessen Korrektheit (Tag und Monat im gültigen
- * Bereich; Jahr ≥ 0) und brechen Sie bei einer fehlerhaften Eingabe
- * sofort mit der Meldung
- *
- * "Falsche Eingabe."
- *
- * ab. War das eingegebene Datum in Ordnung, geben Sie den Wochentag
- * mit
- *
- * "Der xx.xx.xxxx ist ein yyyyyyy."
- *
- * aus. Dabei ist xx.xx.xxxx das eingegebene Datum, beispielsweise in
- * der Form 13.01.736, und yyyyyyy der Wochentag, beispielsweise
- * Donnerstag.
- *
- * Beachten Sie bitte auch die zusätzlichen Hilfestellungen auf dem
- * Arbeitsblatt.
- *
- *********************************************************************/
- #include <stdio.h>
- int main()
- {
- // variablen
- int jahr = 0; //jahr
- int monat = 0; // monat
- int tag = 0; // tag
- int sum = 0; // anzahl der tage
- int schaltjahr = 0; // schaltjahr flag
- int mon[13] ={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //monatstabelle
- int i = 0; // schleifenparameter
- // 1 jahr
- printf("Jahr: ");
- scanf("%d", &jahr);
- if (jahr < 0) {
- printf("Falsche Eingabe.\n");
- return 0;
- }
- // 1.1 summe tage voller jahre
- for (i = 0; i < jahr; ++i) {
- if (i % 4 == 0 && i != 0 && (i % 100 != 0 || i % 400 == 0)) {
- sum = sum + 366;
- } else {
- sum = sum + 365;
- }
- }
- // 1.2 schaltjahr?
- if (i % 4 == 0 && i != 0 && (i % 100 != 0 || i % 400 == 0)) {
- schaltjahr = 1;
- }
- //2 monat
- printf("Monat: ");
- scanf("%d", &monat);
- if (monat != 1 && monat != 2 && monat != 3 && monat != 4 && monat != 5 && monat != 6 && monat != 7 && monat != 8 && monat != 9 && monat != 10 && monat != 11 && monat != 12) {
- printf("Falsche Eingabe.\n");
- return 0;
- }
- //2 summe tage voller monate
- switch (monat){
- case 1: break; // jan
- case 2: sum = sum + 31; break; // feb
- case 3: sum = sum + 31 + 28 + schaltjahr; break; // mar
- case 4: sum = sum + 31 + 28 + schaltjahr + 31; break; // apr
- case 5: sum = sum + 31 + 28 + schaltjahr + 31 + 30; break; // mai
- case 6: sum = sum + 31 + 28 + schaltjahr + 31 + 30 + 31; break; // juni
- case 7: sum = sum + 31 + 28 + schaltjahr + 31 + 30 + 31 + 30; break; // juli
- case 8: sum = sum + 31 + 28 + schaltjahr + 31 + 30 + 31 + 30 + 31; break; //aug
- case 9: sum = sum + 31 + 28 + schaltjahr + 31 + 30 + 31 + 30 + 31 + 31; break; //sep
- case 10: sum = sum + 31 + 28 + schaltjahr + 31 + 30 + 31 + 30 + 31 + 31 + 30; break; //oct
- case 11: sum = sum + 31 + 28 + schaltjahr + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31; break; //nov
- case 12: sum = sum + 31 + 28 + schaltjahr + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30; break; //dec
- }
- printf("Tag: ");
- scanf("%d", &tag);
- if (tag <= 0) {
- printf("Falsche Eingabe.\n");
- return 0;
- }
- if (monat == 2) {
- if ( tag > mon[monat] + schaltjahr) {
- printf("Falsche Eingabe.\n");
- return 0;
- } } else {
- if (tag > mon[monat]) {
- printf("Falsche Eingabe.\n");
- return 0;
- } }
- sum = sum + tag;
- if (sum % 7 == 1) {
- printf("Der %02d.%02d.%d ist ein Sonntag.\n", tag, monat, jahr);
- }
- if (sum % 7 == 2) {
- printf("Der %02d.%02d.%d ist ein Montag.\n", tag, monat, jahr);
- }
- if (sum % 7 == 3) {
- printf("Der %02d.%02d.%d ist ein Dienstag.\n", tag, monat, jahr);
- }
- if (sum % 7 == 4) {
- printf("Der %02d.%02d.%d ist ein Mittwoch.\n", tag, monat, jahr);
- }
- if (sum % 7 == 5) {
- printf("Der %02d.%02d.%d ist ein Donnerstag.\n", tag, monat, jahr);
- }
- if (sum % 7 == 6) {
- printf("Der %02d.%02d.%d ist ein Freitag.\n", tag, monat, jahr);
- }
- if (sum % 7 == 0) {
- printf("Der %02d.%02d.%d ist ein Samstag.\n", tag, monat, jahr);
- }
- }