# Lösungsskizzen ## Aufgabe 1 ``` /** * Tage Pro Monat * * Das Programm liest einen Monat (1-12) und ein Jahr (1600-2400) ein und * gibt die Anzahl der Tage dieses Monats aus. * * @author Gerrit Burkert, Adaptation bazz * @version 15-FEB-2013, 16-OCT-2017, 17-OCT-2019, 16-FEB-2022 */ #include #include #define ERROR_IN_MONTH 1 #define ERROR_IN_YEAR 2 ///// Student Code // Konstante Werte fuer die Monate // =============================== enum { JAN=1, FEB, MAR, APR, MAI, JUN, JUL, AUG, SEP, OKT, NOV, DEZ }; // Eingabe pruefen (0 ist vom atoi als Fehelcode verwendet und darf nicht verwendet werden) // =============== int gibIntWert(char *name, int von, int bis) { int wert; char wertS[20]; // do { printf("%s: ", name); fgets(wertS, 20, stdin); wert = atoi(wertS); if (wert < von || wert > bis) { printf("Der Wert muss zwischen %d und %d sein.\n", von, bis); } else { break; } } while(1); return wert; } // Schaltjahr bestimmen // ==================== int istSchaltjahr(int jahr){ if ( (jahr % 400 == 0) || ( (jahr %100 != 0) && (jahr % 4 ==0) ) ) return 1; else return 0; } // Berechnung Anzahl Tage pro Monat // ================================ int tageProMonat(int jahr, int monat) { int anzTage; // Tage pro Monat bestimmen switch (monat) { // Monate mit 31 Tagen case JAN: case MAR: case MAI: case JUL: case AUG: case OKT: case DEZ: anzTage = 31; break; // Monate mit 30 Tagen case APR: case JUN: case SEP: case NOV: anzTage = 30; break; // Februar: 28 oder 29 Tage case FEB: if (istSchaltjahr(jahr)) { anzTage = 29; } else { anzTage = 28; } break; } return anzTage; } ///// END Student Code 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; } ``` ## Aufgabe 2 Alter bestehender Boilerplate Code