Skip to content
Snippets Groups Projects
README.md 3.58 KiB
Newer Older
  • Learn to ignore specific revisions
  • Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
    # Übung 0.1
    
    
    
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
    ## Wiederholung C
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
    In dieser Übung wollen wir Ihre C-Kenntnisse wiederholen und den Umgang mit dem `git`-Versionsverwaltungssystems weiter üben.
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
    Verwenden Sie für diese Übung einen einfachen Texteditor und kompilieren Sie Ihre Anwendung auf der Kommandozeile.
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
    ## 1. Einfache und komplexe Datentypen
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
    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.
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
    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
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
        1. Der Name des neuen Typen soll `list_element_t` lauten.
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
        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.
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
            - 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
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
            - Parameter 1: Zeiger eines `list_element_t`, welches den Start der Liste markiert
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
            - Rückgabewert: ganze Zahl, welche die Anzahl Elemente in der Liste angibt
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
        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`
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
    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.
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
    ## 2. Dokumentation
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
    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.
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
    ## 3. Code-Qualität
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
    Teste Sie die Codequalität Ihrer Lösung mit einem Linter wie bspw. cpplint. (https://github.com/cpplint/cpplint)
    
    Prof. Dr. Michael Witt's avatar
    Prof. Dr. Michael Witt committed
    `cpplint --linelength=120 --counting=detailed main.c types.h types.c`