C-Kurs/Wochentag/Musterlösung: Unterschied zwischen den Versionen
Poxy (Diskussion | Beiträge) (Musterlösung von Maggy eingepflecht... ist schon ewigkeiten her aber besser spät als nie :P) |
Poxy (Diskussion | Beiträge) K (Code flag vergessen -.-) |
||
Zeile 1: | Zeile 1: | ||
+ | <pre> | ||
#include <stdio.h> | #include <stdio.h> | ||
Zeile 206: | Zeile 207: | ||
return 0; | return 0; | ||
} | } | ||
+ | </pre> |
Version vom 23. Februar 2013, 13:30 Uhr
#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; }