161 lines
6.2 KiB
Plaintext
161 lines
6.2 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## A. Namensräume\n",
|
|
"\n",
|
|
"Namensräume (`namespace` s) sind eine Möglichkeit, um Quellcode besser zu organisieren und strukturieren: Namenskonflikte zwischen gleichnamigen Funktionen (wie es beim importieren mehrerer Bibliotheken auftreten kann) können vermieden werden.\n",
|
|
"\n",
|
|
"**Aufgabe 1:** Setzen Sie die folgenden Schritte in der Datei `taskA.cpp` um:\n",
|
|
"\n",
|
|
"1. Definieren Sie in einem Namensraum eine Funktion, die einen beliebigen Text (z.B. 'Hello from namespace XXX') in der Konsole ausgibt.\n",
|
|
"2. Definieren Sie in einem anderen Namensraum eine zweite Funktion mit gleichem Namen, die einen anderen Text (z.B. 'Hello from namespace YYY') in der Konsole ausgibt\n",
|
|
"3. Schreiben Sie eine `main`-Funktion, in der Sie beide Funktionen aufrufen.\n",
|
|
"\n",
|
|
"**Aufgabe 2:**\n",
|
|
"\n",
|
|
"Diskutieren Sie Vor- und Nachteile der folgenden drei Header-Dateien: Typen und Werte werden aus der Standardbibliothek inkludiert und für die Schnittstellen (Funktionsdeklarationen) verwendet:\n",
|
|
"\n",
|
|
"```cpp\n",
|
|
"// Option1.hpp \n",
|
|
"#include <numbers>\n",
|
|
"#include <vector>\n",
|
|
"\n",
|
|
"using namespace std;\n",
|
|
"using namespace std::numbers;\n",
|
|
"\n",
|
|
"vector<double> doSomething(vector<double> data, double ref = pi);\n",
|
|
"```\n",
|
|
"\n",
|
|
"---\n",
|
|
"\n",
|
|
"```cpp\n",
|
|
"// Option2.hpp\n",
|
|
"#include <numbers>\n",
|
|
"#include <vector>\n",
|
|
"\n",
|
|
"std::vector<double> doSomething(std::vector<double> data, double ref = std::numbers::pi);\n",
|
|
"```\n",
|
|
"\n",
|
|
"---\n",
|
|
"\n",
|
|
"```cpp\n",
|
|
"// Option3.hpp\t\n",
|
|
"#include <numbers>\n",
|
|
"#include <vector>\n",
|
|
"\n",
|
|
"constexpr double Pi = std::numbers::pi;\n",
|
|
"using Vector = std::vector<double>;\n",
|
|
"\n",
|
|
"Vector doSomething(Vector data, double ref = Pi);\t\n",
|
|
"```\n",
|
|
"\n",
|
|
"**Demonstration:** Führen Sie Ihr Programm aus Teil 1 aus und fassen Sie Ihre Diskussion zu Teil 2 kurz zusammen."
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## B. std::vector und Funktionen mit Schleifen und Bedingungen\n",
|
|
"\n",
|
|
"In der Datei `taskB.cpp` sind ein Vektor `vec` und eine Matrix (*vector of vectors*) `mat` gegeben:\n",
|
|
"\n",
|
|
"```cpp\n",
|
|
"using Vector = std::vector<double>;\n",
|
|
"using Matrix = std::vector<std::vector<int>>;\n",
|
|
"```\n",
|
|
"\n",
|
|
"**Aufgabe:** Implementieren Sie die folgenden Funktionen:\n",
|
|
"\n",
|
|
" 1. `sum`: **Summe** aller Elemente eines `Vector`\n",
|
|
" 2. `sum`: **Summe** aller Elemente einer `Matrix`\n",
|
|
" 3. `print`: **Formatierte Ausgabe** (in der Konsole) eines `Vectors` (in einer Zeile) \n",
|
|
" 3. `print`: **Formatierte Ausgabe** (in der Konsole) einer `Matrix` (Zeile für Zeile) \n",
|
|
" 4. `cout_even`: **Abzählen** wie viele Elemente einer `Matrix` gerade sind\n",
|
|
" 5. `mean`: **Durchschnitt aller Elemente** einer `Matrix`\n",
|
|
"\n",
|
|
"**Überlegen Sie sich,**\n",
|
|
"- welche Typen die Parameter Ihrer Funktionen benötigen, und\n",
|
|
"- ob Ihre Funktionen einen Rückgabewert liefern, und welchen Typ dieser haben soll.\n",
|
|
"\n",
|
|
"Rufen Sie Ihre Funktionen in der `main`-Funktion auf, und geben Sie jeweils deren Rückgabewert in der Konsole aus.\n",
|
|
"\n",
|
|
"**Demonstration:** Führen Sie Ihr Programm aus und interpretieren Sie die Ausgaben in der Konsole."
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## C. Nutzung der in `modules` bereitgestellten Bibliotheken\n",
|
|
"\n",
|
|
"Wir stellen Ihnen in diesem Semester im Repo [`modules`](https://sgit.iue.tuwien.ac.at/360050/modules) Funktionalität zur Verfügung, von der Sie in einigen der folgenden Hausübungen Gebrauch machen sollen. \n",
|
|
"\n",
|
|
"**Aufgabe:** Setzen Sie die folgenden Schritte in der Datei `taskC.cpp` um:\n",
|
|
"\n",
|
|
"- Schreiben Sie eine Funktion, die eine $m \\times n$-Matrix (*vector of vectors*) zurückgibt. Die Anzahl der Zeilen und Spalten soll als Funktionsparameter übergeben werden. Die Matrix soll mit aufsteigenden Werten vom Typ `double` gefüllt werden, wobei mit dem Wert `1.0` gestartet und dann reihenweise vorgegangen wird.\n",
|
|
"\n",
|
|
"- Schreiben Sie eine `main`-Funktion, rufen Sie von dort Ihre Funktion auf und speichern Sie deren Rückgabewert (Matrix) in einer lokalen Variable.\n",
|
|
"\n",
|
|
"- Rufen Sie die Funktion `iue::io::savetxt()`, die in [`modules/iue-io/csv.hpp`](modules/iue-io/csv.hpp) definiert ist, auf, um die Matrix in eine `.csv`-Datei zu schreiben.\n",
|
|
"\n",
|
|
"**Hinweise:**\n",
|
|
"\n",
|
|
"- Ein Beispiel für eine Matrix mit 4 Zeilen und 2 Spalten wäre:\n",
|
|
"\n",
|
|
" ```\n",
|
|
" 1 2\n",
|
|
" 3 4\n",
|
|
" 5 6\n",
|
|
" 7 8\n",
|
|
" ```\n",
|
|
"\n",
|
|
"- Die Funktion `iue::io::savetxt(...)` befindet sich im *namespace* `iue::io` in der Datei [`modules/iue-io/csv.hpp`](modules/iue-io/csv.hpp).\n",
|
|
"- Sie müssen die Header-Datei am Anfang Ihres Programms inkludieren (relativer Pfad), und wir empfehlen dazu folgende Vorgehensweise:\n",
|
|
"\n",
|
|
" ```cpp\n",
|
|
" #include \"iue-io/csv.hpp\"\n",
|
|
" ```\n",
|
|
"\n",
|
|
" und zudem den `modules`-Ordner als Include-Pfad (`-I`) beim Kompilieren angeben:\n",
|
|
"\n",
|
|
" ```shell\n",
|
|
" g++ -std=c++20 -Imodules ...\n",
|
|
" ```\n",
|
|
"\n",
|
|
"**Demonstration:** \n",
|
|
" \n",
|
|
"- Rufen Sie Ihr Programm auf und inspizieren Sie die resultierende `.csv`-Datei. \n",
|
|
"- Ändern Sie die Anzahl an Zeilen oder Spalten, kompilieren Sie Ihr Programm erneut und erzeugen Sie eine weitere `.csv`-Datei."
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.6.9"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|