Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

C-Kurs/Wochentag/Musterlösung: Unterschied zwischen den Versionen

(Musterlösung von Maggy eingepflecht... ist schon ewigkeiten her aber besser spät als nie :P)
(kein Unterschied)

Version vom 23. Februar 2013, 13:28 Uhr

  1. include <stdio.h>

/*dump_line per copy paste, leert den Puffer von scanf() */ void dump_line( FILE * fp ) {

 int ch;
 while( (ch = fgetc(fp)) != EOF && ch != '\n' )
   /* null body */;

}

/* prüft, ob ein Jahr Schaltjahr ist 0 für false, 1 für true http://www.schnelle-online.info/Wann-ist-ein-Schaltjahr.html */ int schaltjahr(int jahr){ if((jahr%400 == 0) || ((jahr%100 != 0)&&(jahr%4 == 0))){ return 1; } return 0; }

int main(){ printf("Willkommen zum Wochentagsprogramm.\n"); int day = 1; int month = 1; int year = 1;

/* Eingabe Jahr */ int check = 0; while (check != 1) { printf("Bitte geben Sie das Jahr ein (Format JJJJ):\t"); check = scanf("%d", &year); dump_line(stdin); if ( (check == 1) && (year <= 0) ){ check = 0; printf("Sie haben ein ungültiges Jahr angegeben.\n"); } }

/* Eingabe Monat */ check = 0; while (check != 1){ printf("Bitte geben Sie den Monat ein (Format MM):\t"); check = scanf("%d", &month); dump_line(stdin); if ( (check == 1) && ((month <= 0) || (month >= 13)) ){ check = 0; printf("Sie haben einen ungültigen Monat angegeben.\n"); } }

/* Eingabe Tag */ check = 0; while (check != 1){ printf("Bitte geben Sie den Tag ein (Format TT):\t"); check = scanf("%d", &day); dump_line(stdin);

if(check == 1){ if((day<=0)||(day>31)){ check = 0; printf("Sie haben einen ungültigen Tag angegeben.\n"); } else { if ((day>30)&&((month==4)||(month==6)||(month==9)||(month==11))){ check = 0; printf("Sie haben einen ungültigen Tag angegeben.\n"); } else{ if((day > 29)&&(month==2)&&(schaltjahr(year)==1)){ check = 0; printf("Sie haben einen ungültigen Tag angegeben.\n"); } else { if((day>28)&&(month==2)){ check = 0; printf("Sie haben einen ungültigen Tag angegeben.\n"); } } } } }

} printf("\n");

/* Berechnung der seit dem 1.1.1 vergangenen Tage */ int past_days = 0;

/* Anteil der Jahre */ int schalttage = (year-1)/4 - (year-1)/100 + (year-1)/400; /* Anzahl der Schalttage in den bisherigen Jahren */ past_days = year * 365 + schalttage; /* Anteil der Monate */ switch(month){ case 1: break; case 2: { past_days += 31; break; } case 3: { past_days += 31+28; if (schaltjahr(year)==1){ past_days++; } break; } case 4: { past_days += 31+28 + 31; if (schaltjahr(year)==1){ past_days++; } break; } case 5: { past_days += 31+28+31+30; if (schaltjahr(year)==1){ past_days++; } break; } case 6: { past_days += 31+28+31+30+31; if (schaltjahr(year)==1){ past_days++; } break; } case 7: { past_days += 31+28+31+30+31+30; if (schaltjahr(year)==1){ past_days++; } break; } case 8: { past_days += 31+28+31+30+31+30+31; if (schaltjahr(year)==1){ past_days++; } break; } case 9: { past_days += 31+28+31+30+31+30+31+31; if (schaltjahr(year)==1){ past_days++; } break; } case 10: { past_days += 31+28+31+30+31+30+31+31+30; if (schaltjahr(year)==1){ past_days++; } break; } case 11: { past_days += 31+28+31+30+31+30+31+31+30+31; if (schaltjahr(year)==1){ past_days++; } break; } case 12: { past_days += 31+28+31+30+31+30+31+31+30+31+30; if (schaltjahr(year)==1){ past_days++; } break; } default: { printf("Es wurde mit einem Monat <0 >12 gerechnet.\n"); return 0; } } /* Anteil der Tage */ past_days += day;

/* Berechnung des Wochentags und Ausgabe */ switch (past_days%7){ case 0: { printf("Der %d.%d.%d ist ein Samstag.\n", day, month, year); break; } case 1: { printf("Der %d.%d.%d ist ein Sonntag\n", day, month, year); break; } case 2: { printf("Der %d.%d.%d ist ein Montag.\n", day, month, year); break; } case 3: { printf("Der %d.%d.%d ist ein Dienstag.\n", day, month, year); break; } case 4: { printf("Der %d.%d.%d ist ein Mittwoch.\n", day, month, year); break; }

case 5: { printf("Der %d.%d.%d ist ein Donnerstag.\n", day, month, year); break; }

case 6: { printf("Der %d.%d.%d ist ein Freitag.\n", day, month, year); break; } default: { printf("Es ist ein Fehler aufgetreten.\n"); return 0; } }

return 0; }