TU-Programmieren_2/lab5/main.ipynb
2025-04-09 10:22:44 +02:00

112 lines
5.2 KiB
Plaintext

{
"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
}