112 lines
5.2 KiB
Plaintext
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
|
|
}
|