145 lines
6.2 KiB
Plaintext
145 lines
6.2 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## A. Debugging\n",
|
|
"\n",
|
|
"In der Datei [taskA.cpp](taskA.cpp) ist ein (fehlerfreies) Programm gegeben.\n",
|
|
"\n",
|
|
"### Debugging mittels Konsolenausgaben\n",
|
|
"\n",
|
|
"Die wohl einfachste Methode des Debuggings ist das hinzufügen von *print statements* (std::cout <<) die beim Ausführen Aufschluss über den Verlauf des Programms liefern. In [taskA.cpp](taskA.cpp) in der Funktion `doubleVec` sehen Sie beispielsweise wie diese aussehen könnten.\n",
|
|
"\n",
|
|
"**Aufgabe 1:** Fuegen Sie in der Funktion `findMax` aequivalente Debug-Ausgaben hinzu (am Anfang der Funktion, in der Schleife und am Ende der Funktion).\n",
|
|
"\n",
|
|
"**Demonstration 1:** Kompilieren Sie die Datei [taskA.cpp](taskA.cpp), führen Sie das Programm aus und inspizieren Sie die Konsolen Ausgabe. \n",
|
|
"\n",
|
|
"---\n",
|
|
"\n",
|
|
"### Debugging mittels Debugger\n",
|
|
"\n",
|
|
"Eine weitere Methode ist das Verwenden eines Debuggers. Dieser ermöglicht es Haltepunkte (*breakpoints*) zu setzen an denen das Programm angehalten wird und von denen aus man Zeile für Zeile durch das Programm gehen kann. \n",
|
|
"\n",
|
|
"**Einrichten CMake-basiertes Debuggen mit VSCode:**\n",
|
|
"\n",
|
|
"- Installieren Sie die `CMake tools`-Erweiterung für VSCode:\n",
|
|
"\n",
|
|
" ```bash\n",
|
|
" code --install-extension ms-vscode.cmake-tools\n",
|
|
" ```\n",
|
|
"\n",
|
|
"- Fügen Sie in der Datei, die Sie debuggen wollen *breakpoints* hinzu:\n",
|
|
"\n",
|
|
"<img src=\"images/01.jpg\" width=700>\n",
|
|
"\n",
|
|
"- Drücken Sie `F1` und geben Sie in der VSCode Suchleiste `CMake: Configure` ein:\n",
|
|
"\n",
|
|
"<img src=\"images/02.jpg\" width=700>\n",
|
|
"\n",
|
|
"- Wählen Sie im Menü den `GCC` Compiler aus. Eventuell wird dieser bereits automatisch ausgewählt.\n",
|
|
"\n",
|
|
"<img src=\"images/03.jpg\" width=700>\n",
|
|
"\n",
|
|
"- Drücken Sie `F1` und geben Sie in der VSCode Suchleiste `CMake: Set Debug Target` ein:\n",
|
|
"\n",
|
|
"<img src=\"images/04.jpg\" width=700>\n",
|
|
"\n",
|
|
"- Wählen Sie im Menü die Datei aus die Sie debuggen möchten:\n",
|
|
"\n",
|
|
"<img src=\"images/05.jpg\" width=700>\n",
|
|
"\n",
|
|
"- Drücken Sie wieder `F1` und geben Sie in der VSCode Suchleiste `CMake: Debug` ein:\n",
|
|
"\n",
|
|
"<img src=\"images/06.jpg\" width=700>\n",
|
|
"\n",
|
|
"**Hinweis:**\n",
|
|
" - Das Debuggen mit CMake ist nur möglich wenn eine entsprechend konfigurierte [CMakeLists.txt](CMakeLists.txt) im aktuellen Verzeichnis vorhanden ist.\n",
|
|
"\n",
|
|
"**Aufgabe 2:** Setzen Sie in der Datei [taskA.cpp](taskA.cpp) dort *breakpoints* wo sich die Debug-Ausgaben aus Aufgabe 1 befinden. Debuggen Sie Ihr Programm indem Sie entweder Zeile fuer Zeile oder von *breakpoint* zu *breakpoint* durch das Programm gehen.\n",
|
|
"\n",
|
|
"**Demonstration:** Debuggen Sie Ihr Programm und zeigen Sie, dass Sie mit der Debugger-Navigation umgehen koennen."
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## B. Klassen\n",
|
|
"\n",
|
|
"In der Datei [taskB.cpp](taskB.cpp) sind zwei *namespaces* `one` und `two` gegeben. In `namespace one` ist eine Klasse `Particle` mit drei Member-Variablen (Geschwindigkeit in x- und y-Richtung und Masse), welche ein Partikel darstellen soll, gegeben.\n",
|
|
"\n",
|
|
"**Aufgabe (Details siehe [taskB.cpp](taskB.cpp)):**\n",
|
|
" - Erweitern Sie die Klasse `Particle` in `namespace one` um folgende Member-Funktionen: `energy()`, `print()`\n",
|
|
" - Erstellen Sie die Klasse `Particle` in `namespace two` mit folgenden Eigenschaften: \n",
|
|
" - Gleiche Member-Variablen wie die Klasse in `namespace one` diese sollen aber **privat** sein\n",
|
|
" - **Konstruktor** `Particle(...)` mit x- und y-Richtung und Masse als Parameter,\n",
|
|
" - **Member Funktionen**: `set()`, `get()`, `energy()`, `print()`\n",
|
|
" \n",
|
|
" - In der `main` Funktion:\n",
|
|
" - Erstellen Sie jeweils ein Objekt der beiden Klassen und rufen Sie alle Funktionen auf.\n",
|
|
"\n",
|
|
"**Hinweis:**\n",
|
|
" - Formel für die kinetische Energie: $E_{kin} = \\frac{1}{2} \\cdot m \\cdot (v_x^2 + v_y^2)$\n",
|
|
"\n",
|
|
"\n",
|
|
"**Demonstration:** Erklären Sie den Unterschied zwischen einem `struct` und einer Klasse (`class`). Was bedeutet `public` bzw. `private` in diesem Zusammenhang?"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## C. Überladen von Operatoren\n",
|
|
"\n",
|
|
"Sie sollen eine Klasse implementieren um Polynome der Form $p(x) = a_0x^0 + a_1x^1 + a_2x^2 + ...$ darzustellen.\\\n",
|
|
"Das Verwenden der Klasse könnte dann in etwa so aussehen:\n",
|
|
"\n",
|
|
"\n",
|
|
"```cpp\n",
|
|
"int main(){\n",
|
|
" auto poly = Polynom({4, 2, 3}); // this represents the polynomial p(x) = 4 + 2*x + 3*x**2 + ... \n",
|
|
" double x = 1.0;\n",
|
|
" double eval = poly(x); // using overloaded operator to evaluate polynomial at x = 1\n",
|
|
" std::cout << eval << std::endl;\n",
|
|
"}\n",
|
|
"```\n",
|
|
"\n",
|
|
"**Aufgabe (Details siehe [taskC.cpp](taskC.cpp)):**\n",
|
|
" - Erstellen Sie eine Klasse `Polynomial` mit folgenden Eigenschaften:\n",
|
|
" - Member-Variable vom Typ `std::vector`, die die Koeffizienten $a_i$ des Polynoms beinhaltet\n",
|
|
" - Ausgabefunktion `print()`\n",
|
|
" - Überladener Operator `operator()` zum Evaluieren des Polynoms.\n",
|
|
" - Erstellen Sie ein Objekt der Klasse `Polynomial`, rufen sie die `print()` Funktion auf und verwenden Sie den `()` Operator um das Polynom zu evaluieren.\n",
|
|
"\n",
|
|
"**Demonstration:** Erklaeren Sie Ihre Implementierung kurz. Nennen Sie moegliche Vor- und Nachteile die durch das Ueberladen von Operatoren entstehen."
|
|
]
|
|
}
|
|
],
|
|
"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.12.2"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|