snp-lab-code/P02_Funktionen_Datentyp_enum/P2_aufgabe1.c

108 lines
2.2 KiB
C
Raw Permalink Normal View History

2022-03-15 08:55:38 +01:00
#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;
}