parent
4f3a700605
commit
52686ad7e7
|
@ -1,117 +1,42 @@
|
||||||
/**
|
/**
|
||||||
* P02 Praktikum
|
* P02 Praktikum
|
||||||
*
|
*
|
||||||
* - Funktionen
|
* Das Programm liest einen Monat (1-12) und ein Jahr (1600-2400) ein und
|
||||||
* - Funktion Schaltjahr
|
* gibt die Anzahl der Tage dieses Monats aus.
|
||||||
* - Funktion Tage pro Monat
|
|
||||||
* - Funktion Wochentag
|
|
||||||
*
|
*
|
||||||
* @author ZHAW
|
* @author Gerrit Burkert, Adaptation bazz
|
||||||
* @version 1.0 - 08.02.2022
|
* @version 15-FEB-2013, 16-OCT-2017, 17-OCT-2019, 16-FEB-2022
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define ERROR_IN_MONTH 1
|
||||||
|
#define ERROR_IN_YEAR 2
|
||||||
|
|
||||||
int leseZahl(char *prompt, int min, int max) { // Datentyp angeben, Parameter angeben
|
///// Student Code
|
||||||
char zahlString[11];
|
|
||||||
int zahl;
|
|
||||||
|
|
||||||
do {
|
|
||||||
printf("%s", prompt);
|
|
||||||
fgets(zahlString, 10, stdin);
|
|
||||||
zahl = atoi(zahlString); // bei ungueltiger Zahl return 0
|
|
||||||
} while ((zahl < min) || (zahl > max));
|
|
||||||
return zahl; // return Zeile angeben
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
|
|
||||||
____ leseZahl(____) { // Datentyp angeben, Parameter angeben
|
|
||||||
char zahlString[11];
|
|
||||||
int zahl;
|
|
||||||
|
|
||||||
fgets(zahlString, 10, stdin);
|
|
||||||
zahl = atoi(zahlString); // bei ungueltiger Zahl return 0
|
|
||||||
___________________ // return Zeile angeben
|
|
||||||
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Konstante Werte fuer die Monate */
|
///// END Student Code
|
||||||
enum { JAN=1, FEB, MAR, APR, MAI, JUN, JUL, AUG, SEP, OKT, NOV, DEZ };
|
|
||||||
|
|
||||||
|
|
||||||
int main (void) {
|
int main (int argc, char *argv[]) {
|
||||||
|
|
||||||
//
|
|
||||||
// Variablen definieren
|
|
||||||
//
|
|
||||||
int monat, jahr;
|
int monat, jahr;
|
||||||
char *prompt;
|
|
||||||
|
|
||||||
int istSchaltjahr = 0; // 0: kein Schaltjahr, sonst Schaltjahr
|
// Monat einlesen und Bereich ueberpruefen
|
||||||
int tageProMonat = 0; // Ergebnis spaeter in dieser Variablen
|
monat = gibIntWert("Monat", 1, 12);
|
||||||
|
jahr = gibIntWert("Jahr", 1600, 9999);
|
||||||
|
|
||||||
//
|
|
||||||
// Monat und Jahr einlesen
|
|
||||||
//
|
|
||||||
|
|
||||||
//printf("Monat: ");
|
|
||||||
//scanf("%d", &monat);
|
|
||||||
//printf("Jahr: ");
|
|
||||||
//scanf("%d", &jahr);
|
|
||||||
|
|
||||||
prompt = "Monat: ";
|
|
||||||
monat = leseZahl(prompt, 1, 12);
|
|
||||||
prompt = "Jahr: ";
|
|
||||||
jahr = leseZahl(prompt, 1, 3000);
|
|
||||||
|
|
||||||
// Ausgabe zum Test
|
// Ausgabe zum Test
|
||||||
// printf("Monat: %d, Jahr: %d \n", monat, jahr);
|
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
|
||||||
// Monate mit 30 und 31 Tagen behandeln
|
printf("Der Monat %02d-%d hat %d Tage.\n", monat, jahr, tageProMonat(jahr, monat));
|
||||||
//
|
|
||||||
switch (monat) {
|
|
||||||
|
|
||||||
case JAN: case MAR: case MAI: case JUL: case AUG: case OKT: case DEZ:
|
|
||||||
tageProMonat = 31;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case APR: case JUN: case SEP: case NOV:
|
|
||||||
tageProMonat = 30;
|
|
||||||
break;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Monat ist 2: Auf Schaltjahr ueberpruefen
|
|
||||||
//
|
|
||||||
case FEB:
|
|
||||||
if (jahr % 4 == 0 && (jahr % 100 != 0 || jahr % 400 == 0)) {
|
|
||||||
tageProMonat = 29;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
tageProMonat = 28;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Anderer Monat: Fehler
|
|
||||||
//
|
|
||||||
default:
|
|
||||||
printf("Der Monat muss zwischen 1 und 12 sein.\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Ergebnis ausgeben
|
|
||||||
//
|
|
||||||
printf("Der Monat %d.%d hat %d Tage.\n", monat, jahr, tageProMonat);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue