In diesem Praktikum sind zwei Themen im Fokus: Funktionen und der Datentyp enum.
-Funktionen sind der wesentlichste Bestandteil der C Programmierung, welcher eine strukturierte Programmierung ermöglicht:
+Funktionen sind der wesentlichste Bestandteil der C Programmierung welcher eine strukturierte Programmierung ermöglicht:
Eine Funktion ein Teil eines C Codes, der eine spezielle Aufgabe ausführt. Sie kann aus dem Hauptprogramm, oder aus anderen Funktionen, aufgerufen werden.
Eine Funktion ist ein Teil eines C Codes, der eine spezielle Aufgabe ausführt. Sie kann aus dem Hauptprogramm, oder aus anderen Funktionen, aufgerufen werden.
Jede Funktion besitzt einen eindeutigen Namen, eine eindeutige Signatur (Typen und Reihenfolge der Parameter) und einen Rückgabewert (int falls nichts angegeben wird).
Eine Funktion kann Werte aus dem aufrufenden Kontext übernehmen und bei Bedarf einen Wert an den aufrufenden Kontext zurückliefern. +
Eine Funktion kann Werte aus dem aufrufendem Kontext übernehmen und bei Bedarf einen Wert an den aufrufenden Kontext zurückliefern. Beispiel einer Additions-Funktion:
#include <stdio.h>
@@ -60,7 +60,7 @@ Beispiel einer Additions-Funktion:
int main(void) {
int aa = 1, bb = 2, cc;
- printf("%aa + %bb = %cc", aa, bb, add(aa, bb););
+ printf("%d + %d = %d", aa, bb, add(aa, bb););
return 0;
}
@@ -75,8 +75,8 @@ Beispiel einer Additions-Funktion:
enum Ampeln = {rot =1, gelb, gruen};
int main(void) {
- Ampeln ampel1;
- if (ampel1 == rot) {...}
+ enum Ampeln ampel1;
+ if (ampel1 == rot) {...}
return 0;
}
@@ -87,7 +87,7 @@ Beispiel einer Additions-Funktion:
2. Lernziele¶
In diesem Praktikum lernen Sie Funktionen zu definieren und aufzurufen, sowie enum anzuwenden.
-Sie können ein Programm schreiben, welches aus mehreren Funktionen besteht.
+Sie können ein Programm schreiben welches aus mehreren Funktionen besteht.
Sie können Funktionen deklarieren, definieren und aufrufen.
Sie können enum Typen definieren und deren Werte bestimmen und abfragen.
@@ -101,7 +101,7 @@ Beispiel einer Additions-Funktion:
(Copyright Bild: www.planet-wissen.de)
3.1 Aufgabe 1 Tage pro Monat¶
-In der ersten Aufgabe berechnen Sie die Anzahl Tage pro Monat einer beliebigen Kombination Monat / Jahr.
+
In der ersten Aufgabe berechnen Sie die Tag pro Monat einer beliebigen Kombination Monat / Jahr.
Erweitern Sie dazu das Programm um folgende Aspekte:
Bereichsprüfung von Jahr und Monat
@@ -110,41 +110,41 @@ Erweitern Sie dazu das Programm um folgende Aspekte:
Vorgaben:
-Die Funktion istSchaltjahr nimmt ein Integer (jahr) entgegen und gibt 1 im Falle eines Schaltjahres und 0 im anderen Fall zurück
-Die Funktion tageProMonat nimmt zwei Integer (monat und jahr) entgegen und gibt die Anzahl Tage als Integer zurück
+Die Funktion istSchaltjahr nimmt einen Integer (jahr) entgegen und gibt 1 im Falle eiens Schltjahres und 0 im andreren Fall zurück
+Die Funktion tageProMonat nimmt zwei integer (monat und jahr) entgegeben und gibt die Anzahl Tage als Integer zurück
Die Jahreszahl, welche den Funktionen übergeben wird, muss überprüft werden und grösser gleich 1599 und kleiner als 10000 sein
-Der übergebene Monat muss grösser als 0 und kleine als 13 sein.
+Der übergebene Monat muss grösser als 0 und kleiner als 13 sein.
Die Regeln für die Schaltjahrberechnung:
Schaltjahre sind alle Jahre, die durch 4 teilbar sind.
-Eine Ausnahme bilden die Jahrhunderte (1600, 1700…). Diese sind keine Schaltjahre.
+Eine Ausnahme bilden die Jahrhunderte (1600, 1700…). Diese sind keine Schltjahre.
zu den 100er gibt es ebenfalls Ausnahmen: Diese sind immer Schaltjahre, wenn sie durch 400 teilbar sind
… also zum Beispiel 1600 ist eines, nicht jedoch 1700. Weiterführende Details finden Sie unter https://de.wikipedia.org/wiki/Gregorianischer_Kalender
Gegeben ist die main Funktion des Programms. Ergänzen Sie die enum Definition und die fehlenden Funktionen:
-gibIntWert: Die Funktion soll einen Int Wert zurückgeben. Der Bereich, wie auch Fehleingaben sollen berücksichtigt werden. (atoi und fgets sind hier hilfreich)
-istSchaltjahr: Die Funktion gibt 1 im Falle eines Schaltjahrs und 0 im anderen Falle zurück.
-tageProMonat: Die Funktion gibt den die Tage des Monats für das definierte Jahr zurück. Verwenden Sie die Switch-Anweisung, sowie den enum Datentypen
+gibIntWert: Die Funktion soll einen Int Wert zurückgeben. Der Bereich, wie auch Fehleingaben sollen sollen berücksichtigt werden. (atoi unfd fgets sind hier hilfreich)
+istSchaltjahr: Die Funktion gibt 1 im Falle eines Schltjahr und o im anderen Falle zurück.
+tageProMonat: Die Funktion gibt den die Tage des Monats für das definierte Jahr zurück. Verwenden Sie die Switchanweisung , sowie den enum Datentypen
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);
-
+ 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;
}
@@ -152,10 +152,11 @@ Erweitern Sie dazu das Programm um folgende Aspekte:
Tipp: Angenommen Sie verwenden den enum month_t { JAN=1, FEB, MAR, APR, MAI, JUN, JUL, AUG, SEP, OKT, NOV, DEZ };
Dann können Sie im Programm direkt die Konstanten verwenden:
if (m == 2) ... // schlecht lesbar
-if (monat == 2) ... // besserer Variablenname
+if (monat == 2) ... // besserer Variablenname
if (monat == FEB) ... // am besten lesbar
+Als Abnahme müssen die Tests unverändert ohne Fehler ausgeführt werden (make test
)