Last active
February 17, 2019 14:37
-
-
Save jboockmann/11436feb4ebc3736283d47bbfdcd9ec6 to your computer and use it in GitHub Desktop.
EiAPS | WiSe-2017-2018
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// WiSe-2017-2018 | |
// Aufgabe 7c | |
// notwendige Programmbibliotheken einbinden (siehe printf und malloc/calloc) | |
#include <stdio.h> | |
#include <stdlib.h> | |
// struct zur Darstellung des Datums | |
struct Datum{ | |
int tag; | |
int monat; | |
int jahr; | |
}; | |
// struct zur Darstellung eines Termins | |
struct Termin{ | |
char* beschreibung; | |
struct Datum datum; // Einbettung der struct Datum (alternativ lässt sich das auch über einen Pointer auf Datum lösen) | |
}; | |
// function signature | |
void fuegeTerminEin(int tag, int monat, int jahr, char* beschreibung); | |
void PrintTermine(void); | |
char* HabIchTermin(struct Datum* datum); | |
// globale variablen | |
struct Termin** MeineTermine; // der Typ dieser Variable ist "Array von Pointern", daher ** | |
int elemcount; // Anzahl der bereits gespeicherten Elemente im Array | |
int length; // Größe des Arrays | |
void fuegeTerminEin(int tag, int monat, int jahr, char* beschreibung){ | |
struct Termin* termin = malloc(sizeof(struct Termin)); // allokieren eines neuen Termins | |
// Hinweis: Punkt Notation, da Datum in Termin eingebettet ist und nicht via Pointer verlinkt wurde | |
termin->datum.tag = tag; // wert tag setzen | |
termin->datum.monat = monat; // wert monat setzen | |
termin->datum.jahr = jahr; // wert jahr setzen | |
termin->beschreibung = beschreibung; // wert beschreibung setzen | |
if(elemcount == length){ // falls das Array bereits voll ist dann muss es erweitert werden | |
length = length * 2; // Arraygröße aktualisieren | |
MeineTermine = realloc(MeineTermine, length); // ein neues und doppelt so großes array allokieren | |
} | |
MeineTermine[elemcount] = termin; // neues Element einfügen | |
elemcount++; // Anzahl der vorhandenen Elemente um eins erhöhen | |
} | |
void PrintTermine(void){ | |
int i; | |
for(i = 0; i < elemcount; i++){ // traversieren der restlichen Element (ab 1 da 0 bereits ausgegeben, und bis elemcount) | |
struct Termin* termin = MeineTermine[i]; // der i-te Termin | |
printf("%s am %d.%d.%d\n", termin->beschreibung, termin->datum.tag, termin->datum.monat, termin->datum.jahr); | |
} | |
} | |
char* HabIchTermin(struct Datum* datum){ | |
int i; | |
for(i = 0; i < elemcount; i++){ // durchlaufen aller vorhandenen Elemente (nicht bis length!) | |
struct Termin* termin = MeineTermine[i]; // wir betrachten den i-ten Termin | |
if(termin->datum.tag == datum->tag && termin->datum.monat == datum->monat && termin->datum.jahr == datum->jahr){ // falls tag, monat, und jahr jeweils mit dem gesuchten datum identisch sind dann wird die beschreibung zurückgegeben | |
return termin->beschreibung; | |
} | |
} | |
return "Kein Termin"; // falls kein Termin mit dem gesuchten Datum existiert, dann gebe "Kein Termin" zurück | |
} | |
int main(void){ | |
elemcount = 0; // zu Beginn befinden sich 0 Elemente im Array | |
length = 1; // die anfängliche Größe des Arrays wird beispielsweise auf 1 gesetzt | |
MeineTermine = calloc(length, sizeof(struct Termin*)); // allokieren eines length großen Arrays vom Typ struct Termin* | |
fuegeTerminEin(19, 2, 2018, "DSG-EiAPS-B"); // ersten Termin einfügen | |
fuegeTerminEin(01, 3, 2018, "DSG-Jap-B"); // zweiten Termin einfügen | |
PrintTermine(); // Alle Termine ausgeben | |
// Testen der Funktion HabIchTermin (Hinweis: dies ist nicht in der Aufgabenstellung verlangt) | |
struct Datum* datum1 = malloc(sizeof(struct Datum)); | |
datum1->tag = 19; | |
datum1->monat = 2; | |
datum1->jahr = 2018; | |
printf("HabIchTermin(%d,%d,%d) => %s\n",datum1->tag, datum1->monat, datum1->jahr, HabIchTermin(datum1)); | |
struct Datum* datum2 = malloc(sizeof(struct Datum)); | |
datum2->tag = 19; | |
datum2->monat = 2; | |
datum2->jahr = 2042; | |
printf("HabIchTermin(%d,%d,%d) => %s\n",datum2->tag, datum2->monat, datum2->jahr, HabIchTermin(datum2)); | |
return 0; // Rückgabe des Wert 0 bedeutet, dass das Programm ohne Fehler beendet wurde | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment