108 lines
2.2 KiB
C
108 lines
2.2 KiB
C
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
/* Funktionsdeklarationen */
|
||
|
int gibIntWert(char text[], int min, int max);
|
||
|
int istSchaltjahr(int jahr);
|
||
|
int tageProMonat(int jahr, int monat);
|
||
|
|
||
|
|
||
|
/* Mainfunktion */
|
||
|
int main (int argc, char *argv[]) {
|
||
|
|
||
|
int monat, jahr;
|
||
|
|
||
|
// Monat einlesen und Bereich ueberpruefen
|
||
|
monat = gibIntWert("Monat", 1, 12);
|
||
|
jahr = gibIntWert("Jahr", 1600, 9999);
|
||
|
|
||
|
// Ausgabe zum Test
|
||
|
printf("Monat: %d, Jahr: %d \n", monat, jahr);
|
||
|
|
||
|
// Ausgabe zum Test (hier mit dem ternaeren Operator "?:")
|
||
|
printf("%d ist %s Schaltjahr\n", jahr, istSchaltjahr(jahr) ? "ein" : "kein");
|
||
|
|
||
|
// Ausgabe
|
||
|
printf("Der Monat %02d-%d hat %d Tage.\n", monat, jahr, tageProMonat(jahr, monat));
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
/* Funktionsdefinitionen */
|
||
|
int gibIntWert(char text[], int min, int max) {
|
||
|
int wert;
|
||
|
(void) printf("Enter %s :", text);
|
||
|
scanf("%d", &wert);
|
||
|
if(wert >= min & wert <= max){
|
||
|
return wert;
|
||
|
}
|
||
|
else {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
int istSchaltjahr(int jahr){
|
||
|
int ergebnis;
|
||
|
if(jahr % 400 == 0){
|
||
|
ergebnis = 1;
|
||
|
}
|
||
|
else if (jahr % 100 == 0){
|
||
|
ergebnis = 0;
|
||
|
}
|
||
|
else if(jahr % 4 == 0){
|
||
|
ergebnis = 1;
|
||
|
}
|
||
|
else {
|
||
|
ergebnis = 0;
|
||
|
}
|
||
|
return ergebnis;
|
||
|
}
|
||
|
|
||
|
int tageProMonat(int jahr, int monat){
|
||
|
int ergebnis = 0;
|
||
|
switch (monat) {
|
||
|
case 1:
|
||
|
ergebnis = 31;
|
||
|
break;
|
||
|
case 2:
|
||
|
if(istSchaltjahr(jahr)){
|
||
|
ergebnis = 29;
|
||
|
}
|
||
|
else {
|
||
|
ergebnis = 28;
|
||
|
}
|
||
|
break;
|
||
|
case 3:
|
||
|
ergebnis = 31;
|
||
|
break;
|
||
|
case 4:
|
||
|
ergebnis = 30;
|
||
|
break;
|
||
|
case 5:
|
||
|
ergebnis = 31;
|
||
|
break;
|
||
|
case 6:
|
||
|
ergebnis = 30;
|
||
|
break;
|
||
|
case 7:
|
||
|
ergebnis = 31;
|
||
|
break;
|
||
|
case 8:
|
||
|
ergebnis = 31;
|
||
|
break;
|
||
|
case 9:
|
||
|
ergebnis = 30;
|
||
|
break;
|
||
|
case 10:
|
||
|
ergebnis = 31;
|
||
|
break;
|
||
|
case 11:
|
||
|
ergebnis = 30;
|
||
|
break;
|
||
|
case 12:
|
||
|
ergebnis = 31;
|
||
|
break;
|
||
|
}
|
||
|
return ergebnis;
|
||
|
}
|