Skip to content

Instantly share code, notes, and snippets.

@jboockmann
Last active February 17, 2019 14:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jboockmann/11436feb4ebc3736283d47bbfdcd9ec6 to your computer and use it in GitHub Desktop.
Save jboockmann/11436feb4ebc3736283d47bbfdcd9ec6 to your computer and use it in GitHub Desktop.
EiAPS | WiSe-2017-2018
// 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