{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## A. Kommandozeilenoptionen\n", "\n", "**Aufgabe (Details siehe [taskA.c](taskA.c)):**\n", "- Implementieren Sie mithilfe der in [modules/iue-po/cpo.h](modules/iue-po/cpo.h) bereitgestellten Funktionalität ein Programm mit einer Kommandozeilen-Schnittstelle:\n", " - Es gibt vier Argumente, die über die Befehlszeile übergeben werden können: \n", " - erforderlich: ein ganzzahliger Wert (`opt1`)\n", " - erforderlich: eine Fließkommazahl (`opt2`)\n", " - optional: eine Zeichen (Typ `char`) (`opt3`), Standardwert `A`\n", " - optional: Zeichenkette (`opt4`), Standardwert `\"empty\"`\n", " - Gültige Aufrufe Ihres Programms können dann z.B. so aussehen:\n", " ```shell\n", " ./taskA -opt1 10 -opt2 1.5 \n", " ./taskA -opt1 10 -opt2 1.5 -opt3 X -opt4 lab5\n", " ./taskA -opt2 1.5 -opt3 Y -opt4 lab5 -opt1 10 \n", " ```\n", " - Geben Sie die übergebenen Werte zur Überprüfung in der Konsole aus.\n", " - Falls ein notwendiges Argumente nicht übergeben wurde (oder nicht erfolgreich zum Zieltyp umgewandelt werden konnte), soll Ihr Programm mit einem Fehler abbrechen.\n", "\n", "**Hinweise:**\n", "- In der Datei [modules/iue-po/cpo.test.c](modules/iue-po/cpo.test.c) befindet sich ein Test, der die erforderlichen Funktionen einsetzt:\n", " - Sie können dieses Programm als Vorlage benutzen (kopieren und dann adaptieren)\n", " \n", "**Demonstration:**\n", "- Rufen Sie Ihr Programm mit verschiedenen gültigen Kommandozeilen-Argumenten auf.\n", "- Rufen Sie Ihr Programm mit verschiedenen invaliden Kommandozeilen-Argumenten auf.\n", "- Diskutieren Sie: Wofür dienen die Parameter `argc` und `argv` der `main`-Funktion?" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## B. Verwendung einer gegebenen C-Bibliothek zum Lesen/Schreiben von .csv-Dateien\n", "\n", "**Aufgabe (Details siehe [taskB.c](taskB.c)):**\n", "- Setzen Sie mithilfe der in [modules/iue-io/ccsv.h](modules/iue-io/ccsv.h) bereitgestellten Funktionalität folgende Schritte um:\n", " - Erstellen Sie eine Tabelle mit numerischen Werten\n", " - Abspeichern der Tabelle als .csv-Datei (`table1.csv`)\n", " - Erneutes Einlesen der gespeicherten Tabelle aus der Datei (`table1.csv`)\n", " - Manipulation der Werte (Skalieren mit Faktor `1.001`) und erneutes Abspeichern als .csv-Datei (`table2.csv`)\n", "\n", "**Hinweise:**\n", "- In der Datei [modules/iue-io/ccsv.test.c](modules/iue-io/ccsv.test.c) befindet sich ein Test, der die erforderlichen Funktionen einsetzt:\n", " - Sie können dieses Programm als Vorlage benutzen (kopieren und dann adaptieren)\n", "\n", "**Demonstration:**\n", "- Demonstrieren Sie die Funktionalität Ihres Programms.\n", "- Erklären Sie die Funktion `table_append_copy` (Zeile-für-Zeile); gehen Sie dabei vor allem auf die Bedeutung von `malloc` und `realloc` ein.\n", " - Was ist der Unterschied zwischen `table_append_copy` und `table_append_move`?\n", "- Erklären Sie die Funktion `table_clear` (Zeile-für-Zeile); gehen Sie dabei vor allem auf die Bedeutung von `free` ein.\n", " - Wann und wozu sollte `table_clear` verwendet werden?" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## C. Kommandozeilengesteuertes Programm zum Vergleich von numerischen Daten\n", "\n", "**Aufgabe (Details siehe [taskC.c](taskC.c)):**\n", "- Implementieren Sie ein Programm, dass \n", " - zwei Tabellen von Fliesskommazahlen aus zwei `.csv`-Dateien einließt, und\n", " - testet, ob die zwei Tabellen numerisch als gleich anzusehen sind (bei gegebener relativer Toleranz).\n", "- Das Programm erhält alle Eingaben mittels Kommandozeilen-Parameter und soll schlussendlich so aufrufbar sein:\n", " ```shell\n", " ./taskC --first table1.csv --second table2.csv --tolerance 1e-5\n", " ```\n", " \n", "**Hinweise:**\n", "- Verwenden Sie `iuenum_isclose_tol` aus der Bibliothek [modules/iue-num/numerics.h](modules/iue-num/numerics.h) um die Elemente miteinander zu vergleichen.\n", "- In der Datei [modules/iue-num/numerics.test.c](modules/iue-num/numerics.test.c) befindet sich eine beispielhafte Anwendung der Funktion `iuenum_isclose_tol`.\n", "\n", "**Demonstration:**\n", "\n", "- Demonstrieren Sie die Funktionalität Ihres Programms indem Sie die in Aufgabe 2 erzeugten Dateien vergleichen: welche Toleranz ist noetig, damit diese als gleich angesehen werden?\n", "- Warum müssen numerische Werte meist 'ungefähr' verglichen werden, und nicht 'ganz exakt'?\n", "- Wie viele signifikante Stellen haben Fließkommazahlen (`float`, `double`) in C/C++?" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "#" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "name": "python", "version": "3.12.2" } }, "nbformat": 4, "nbformat_minor": 2 }