194 lines
5.6 KiB
Plaintext
194 lines
5.6 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Aufgabe 1: Ein eigenes kleines C++-Programm (*function template*) (1 Punkt)"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Erstellen Sie in [`task1.main.cpp`](task1.main.cpp) ein lauffähiges Ein-Dateien-Programm das folgende Struktur aufweist:\n",
|
|
"\n",
|
|
"- Einbinden benötigter Header-Dateien aus der Standardbibliothek, z.B.:\n",
|
|
"\t```cpp\n",
|
|
"\t#include <iostream> // std::cout, std::endl\n",
|
|
"\t#include <vector> // std::vector\n",
|
|
"\t...\n",
|
|
"\t```\n",
|
|
"- Definition/Implementierung einer eigenen Funktion in einem eigenen Namensraum, z.B.:\n",
|
|
"\t```cpp\n",
|
|
"\tnamespace task1 {\n",
|
|
"\n",
|
|
"\t...\n",
|
|
"\n",
|
|
"\t}\n",
|
|
"\t``` \n",
|
|
"- Definition/Implementierung einer `main`-Funktion, die Ihre selbst geschriebene Funktion verwendet, z.B.:\n",
|
|
"\t```cpp\n",
|
|
"\tint main(){\n",
|
|
"\n",
|
|
"\t ...\n",
|
|
"\n",
|
|
"\t return 0;\n",
|
|
"\t}\n",
|
|
"\t``` \n"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"- Eine genaue Beschreibung und Anforderungen finden Sie in [`task1.main.cpp`](task1.main.cpp)\n",
|
|
"- Ihre Implementierung erfolgt ebenfalls in [`task1.main.cpp`](task1.main.cpp)"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Aufgabe 2: Umschreiben gegebener Funktionen zur Funktions-Templates (1 Punkt)"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"In dem Header [`task2.hpp`](task2.hpp) sind 4 Funktionen in Namensraum `task2` gegeben.\n",
|
|
"Ihre Aufgabe besteht darin, diese so anzupassen, dass mindestens die im Test verwendeten Parametertypen unterstützt werden.\n",
|
|
"\n",
|
|
"Ihre Implementierung soll durch *verändern* der gegebenen Funktionen erfolgen: **Sie schreiben jede der Funktionen zu einem Funktions-Template um**.\n",
|
|
"\n",
|
|
"Hier ein Beispiel anhand einer Funktion `add`:"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"```cpp\n",
|
|
"namespace task2 {\n",
|
|
"\n",
|
|
"/// handout\n",
|
|
"inline int add(int a, int b)\n",
|
|
"{\n",
|
|
" return a + b;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/// solution\n",
|
|
"template <typename T>\n",
|
|
"inline T add(T a, T b)\n",
|
|
"{\n",
|
|
" return a + b;\n",
|
|
"}\n",
|
|
"\n",
|
|
"} \n",
|
|
"```"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"- Die vorgegebenen Funktionen und eine genaue Beschreibung und Anforderungen finden Sie in [`task2.hpp`](task2.hpp)\n",
|
|
"- Ihre Implementierung erfolgt ebenfalls in [`task2.hpp`](task2.hpp)\n",
|
|
"- Die zugeordneten Tests finden Sie in [`task2.test.cpp`](task2.test.cpp) \n",
|
|
"- **Wichtig**: Nach erfolgter Implemenierung müssen Sie in [`task2.test.cpp`](task2.test.cpp) die Tests für varierende Parametertypen **manuell einkommentieren**."
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Aufgabe 3: Implementierung einer eigenen Klasse, die gegebene Schnittstellenanforderungen erfüllt (1 Punkt)\n",
|
|
"\n",
|
|
"Für diese Aufgabe implementieren Sie eine Klasse `point`, welche die Schnittstellenanforderungen (*concept*) in [`task3.concept.hpp`](task3.concept.hpp) erfüllt. "
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"- Die vorgegebenen Deklaration und eine genaue Beschreibung und Anforderungen finden Sie in [`task3.hpp`](task3.hpp)\n",
|
|
"- Ihre Implementierung erfolgt ebenfalls in [`task3.hpp`](task3.hpp)\n",
|
|
"- Die zugeordneten Tests finden Sie in [`task3.test.cpp`](task3.test.cpp)\n",
|
|
"- **Wichtig**: Nach erfolgter Implemenierung müssen Sie in [`task3.test.cpp`](task3.test.cpp) die Tests **manuell einkommentieren**."
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Kompilieren/Testen\n",
|
|
"\n",
|
|
"So testen Sie Ihre Implementierung (direkter Aufruf von `g++`):\n",
|
|
"\n",
|
|
"```shell\n",
|
|
"# prepare\n",
|
|
"mkdir build\n",
|
|
"# compile\n",
|
|
"g++ -g -std=c++20 task1.main.cpp -o build/task1\n",
|
|
"g++ -g -std=c++20 task2.test.cpp -o build/task2\n",
|
|
"g++ -g -std=c++20 task3.test.cpp -o build/task3\n",
|
|
"\n",
|
|
"# run tests\n",
|
|
"./build/task1\n",
|
|
"./build/task2\n",
|
|
"./build/task3\n",
|
|
"```\n",
|
|
"\n",
|
|
"Alternativ (mittels CMake-Configuration):\n",
|
|
"\n",
|
|
"```shell\n",
|
|
"# prepare\n",
|
|
"cmake -S . -B build -D CMAKE_BUILD_TYPE=Debug\n",
|
|
"# compile\n",
|
|
"cmake --build build --config Debug --target task1\n",
|
|
"cmake --build build --config Debug --target task2\n",
|
|
"cmake --build build --config Debug --target task3\n",
|
|
"cmake --build build --config Debug # all\n",
|
|
"# run tests\n",
|
|
"ctest --test-dir build -C Debug -R task1 --verbose\n",
|
|
"ctest --test-dir build -C Debug -R task2 --verbose\n",
|
|
"ctest --test-dir build -C Debug -R task3 --verbose\n",
|
|
"ctest --test-dir build -C Debug # all\n",
|
|
"``` \n"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": ".venv",
|
|
"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.15"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|