Newer
Older
In dieser Übung wollen wir Ihre C-Kenntnisse wiederholen und den Umgang mit dem `git`-Versionsverwaltungssystems weiter üben.
Verwenden Sie für diese Übung einen einfachen Texteditor und kompilieren Sie Ihre Anwendung auf der Kommandozeile.
Wir implementieren in dieser Übung eine [einfach verkettete Liste](https://de.wikipedia.org/wiki/Liste_(Datenstruktur)#Einfach_verkettete_Listen) für Fließkommzahlen (Datentyp `float`). Zur besseren Wiederverwendbarkeit wird die Datenstruktur der Liste und die Funktionen um mit ihr zu arbeiten in eigenen Dateien ausgelagert.
1. Erstellen Sie die Dateien `main.c`, `types.h` und `types.c`
1. Implementieren Sie in der Daten `types.h` einen neuen komplexen Datentyp für ein Element in der Liste
1. Der Name des neuen Typen soll `list_element_t` lauten.
1. Der Datentyp besitzt ein Feld `data`, welches die Fließkommazahl in dem Listenelement enthält.
1. Der Datentyp besitzt ein Feld `next`, welches ein Zeiger auf das nächste Element in der Liste ist.
1. Deklarieren Sie ebenfalls in der Header-Datei `types.h` folgende Funktionen
1. `append_element` - erzeugt einen neuen Eintrag in der Liste und hängt diesen am Ende an
- Parameter 1: Zeiger auf eine Liste `list_element_t`, an welchen das neue Element angehangen wird. Ist dieser Zeiger `NULL`, so wird das neue Element der Start der Liste. Es wird immer am **Ende** angehangen
- Parameter 2: `float`-Wert, welcher in dem neuen Element gespeichert werden soll
- Rückgabetyp: Zeiger auf das neu angelegte Element
1. `insert_element` - erzeugt einen neuen Eintrag in der Liste und fügt diesen hinter dem angegebenen Element ein
- Parameter 1: Zeiger auf ein Listenelement `list_element_t`, hinter dem das neue Element eingefügt wird. Ist dieser Zeiger `NULL`, so wird das neue Element der Start der Liste. Besitzt das Element Nachfolger so verschieben sich diese Nachfolger hinter das neue Element.
- Parameter 2: `float`-Wert, welcher in dem neuen Element gespeichert werden soll
- Rückgabetyp: Zeiger auf das neu angelegte Element
2. `length` - gibt die Anzahl Elemente in der Liste zurück
- Parameter 1: Zeiger eines `list_element_t`, welches den Start der Liste markiert
- Rückgabewert: ganze Zahl, welche die Anzahl Elemente in der Liste angibt
3. `remove_element` - löscht ein Listenelement und alle Nachfolger
- Parameter 1: Zeiger eines `list_element_t`, welches mit allen einen Nachfolgern gelöscht werden soll.
- Parameter 2: Zeiger auf das Vorgänger `list_element_t`, dessen Zeigen `next` angepasst werden muss.
1. Definieren Sie die Funktionen `append_element`, `length` und `remove_element` in der Datei `types.c`
1. Testen Sie Ihre Implementierung in Ihrer `main`-Funktion, welche in der Datei `main.c` definiert ist.
1. Für die automatischen Tests werden die Dateien `types.h` und `types.c` mit einer Testdatei gemeinsam kompiliert. Stellen Sie also sicher, dass diese Dateien alle notwendigen Anweisungen gemäß der Spezifikation enthalten.
Dokumentieren Sie Ihren Code (bspw. mittels [Doxygen-Standard](https://www.doxygen.nl/manual/docblocks.html#cppblock)) und schreiben eine kurze Zusammenfassung Ihrer Tätigkeiten und Kommandos, welche Sie zum Kompilieren der Anwendung verwendet haben in `Documentation.md` auf.
Teste Sie die Codequalität Ihrer Lösung mit einem Linter wie bspw. cpplint. (https://github.com/cpplint/cpplint)
`cpplint --linelength=120 --counting=detailed main.c types.h types.c`