mirror of
https://github.com/LukasKalbertodt/programmieren-in-rust.git
synced 2024-11-18 02:48:58 +01:00
Add new sheet
This commit is contained in:
parent
2ddaf61430
commit
500b7850ed
5
aufgaben/sheet6/README.md
Executable file
5
aufgaben/sheet6/README.md
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
Blatt 6
|
||||||
|
=======
|
||||||
|
|
||||||
|
Dreimal dürft ihr raten: Diese Aufgaben sollen auf dem Branch `sheet6`
|
||||||
|
bearbeitet werden, der von dem `master`-Branch entsprungen ist!
|
41
aufgaben/sheet6/task1/README.md
Executable file
41
aufgaben/sheet6/task1/README.md
Executable file
@ -0,0 +1,41 @@
|
|||||||
|
Aufgabe 1: Hilfsfunktionen
|
||||||
|
==========================
|
||||||
|
|
||||||
|
In dieser Aufgabe soll eine Library-Crate (Cargo Projekt) erstellt werden,
|
||||||
|
welche ein paar kleine, aber nützliche Funktionalitäten bereitstellt.
|
||||||
|
|
||||||
|
Für alle drei Funktionen/Methoden soll ein Unittest geschrieben werden. Alle
|
||||||
|
Unittests liegen in dem `tests` Untermodul der Crate; alles andere kann aber
|
||||||
|
im Wurzelmodul definiert sein. *Hinweis*: Mit `cargo test` können alle
|
||||||
|
Unittests ausgeführt werden.
|
||||||
|
|
||||||
|
|
||||||
|
### a) `clamp()`
|
||||||
|
|
||||||
|
Diese Funktion nimmt drei Parameter: einen Wert sowie `min` und `max`.
|
||||||
|
Die Funktion returned einfach den gegebenen Wert, solange er zwischen `min` und
|
||||||
|
`max` liegt. Falls der gegebene Wert jedoch kleiner als `min` ist, wird `min`
|
||||||
|
returned; das gleiche entsprechend mit `max`.
|
||||||
|
|
||||||
|
Die Funktion soll so allgemein wie möglich formuliert werden und keine
|
||||||
|
genauen Typen festlegen.
|
||||||
|
|
||||||
|
|
||||||
|
### b) Summe und Produkt
|
||||||
|
|
||||||
|
Die Funktion nimmt zwei Argumente and und liefert sowohl die Summe als auch
|
||||||
|
das Produkt dieser beiden Werte zurück. Auch diese Funktion soll möglichst
|
||||||
|
allgemein formuliert werden.
|
||||||
|
|
||||||
|
|
||||||
|
### c) Extension Trait
|
||||||
|
|
||||||
|
Wir würden gerne `bool`-Variablen sehr einfach in ein `Option<T>` umwandeln
|
||||||
|
können, also z.B. so einen Code aufrufen können:
|
||||||
|
|
||||||
|
```rust
|
||||||
|
true.into_option(3); // Some(3)
|
||||||
|
false.into_option("susi"); // None
|
||||||
|
```
|
||||||
|
|
||||||
|
Fügt die Methode zu `bool` mit Hilfe eines Extension Traits hinzu.
|
36
aufgaben/sheet6/task2/README.md
Executable file
36
aufgaben/sheet6/task2/README.md
Executable file
@ -0,0 +1,36 @@
|
|||||||
|
Aufgabe 2: Vektor
|
||||||
|
=================
|
||||||
|
|
||||||
|
In dieser Aufgabe soll ein einfacher, generischer Vektor-Typ erstellt werden.
|
||||||
|
Wieder soll eine Library-Crate als Cargo-Projekt angelegt werden und im `tests`
|
||||||
|
Untermodul sollen ein paar kurze Unittests die eigentliche Funktionalität
|
||||||
|
testen.
|
||||||
|
|
||||||
|
Der Datentyp soll `Vector2` heißen und besteht aus einer x- und y-Koordinate.
|
||||||
|
Der Typ dieser Koordinaten ist jedoch generisch und kann grundsätzlich erstmal
|
||||||
|
alles sein. Neben den expliziten Anforderungen in a) und b) kann und/oder
|
||||||
|
muss `Vector2` noch weitere Traits implementieren, solange das möglich ist.
|
||||||
|
|
||||||
|
|
||||||
|
### a) Konstruktor-Funktionen
|
||||||
|
|
||||||
|
Wir möchten vier Konstruktor-Funktionen zu `Vector2` hinzufügen:
|
||||||
|
|
||||||
|
- `new(x, y)`: bekommt beide Koordinaten als Parameter
|
||||||
|
- `origin()`: Vektor am Nullpunkt (beide Koordinaten 0)
|
||||||
|
- `unit_x()`: Ein Einheitsvektor mit x=1
|
||||||
|
- `unit_y()`: Ein Einheitsvektor mit y=1
|
||||||
|
|
||||||
|
Um diese Funktionen implementieren zu können, greifen wir auf schon vorhandene
|
||||||
|
Traits zu. Diese finden wir in der Crate `num-traits`, die es wie gewohnt auf
|
||||||
|
crates.io gibt. Von dieser externen Bibliothek müsst ihr euch passende Traits,
|
||||||
|
die ihr nutzen wollt/müsst, aussuchen (wir sind nur an den Traits der
|
||||||
|
Bibliothek interessiert!).
|
||||||
|
|
||||||
|
|
||||||
|
### b) Operatoren überladen
|
||||||
|
|
||||||
|
Für den Vektor soll der `+` und `*` Operator überladen werden (wenn dies
|
||||||
|
möglich ist).
|
||||||
|
Dabei ist das eine natürlich die Vektoraddition (also Vektor + Vektor), das
|
||||||
|
andere ist die Skalarmultiplikation (also Vektor * Skalar).
|
21
aufgaben/sheet6/task3/README.md
Executable file
21
aufgaben/sheet6/task3/README.md
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
Aufgabe 3: Swagger
|
||||||
|
==================
|
||||||
|
|
||||||
|
*Diese Aufgabe kann in einer einzelnen `.rs` Datei gelöst werden und benötigt
|
||||||
|
kein Cargo-Projekt.*
|
||||||
|
|
||||||
|
Erstellt einen Typ `Swagger`, welcher einen beliebigen anderen Typen in sich
|
||||||
|
speichert.
|
||||||
|
`Swagger` soll mit `println!()` und dem normalen `{}` Platzhalter
|
||||||
|
ausgegeben werden können, wenn immer das möglich ist.
|
||||||
|
Die Ausgabe soll "yolo ??? swag" sein, wobei "???" für die Ausgabe des inneren
|
||||||
|
Objekts steht.
|
||||||
|
Wäre also eine `3` in einer Swagger-Instanz gespeichert und man würde diese
|
||||||
|
Instanz ausgeben, wäre die Ausgabe "yolo 3 swag".
|
||||||
|
|
||||||
|
Weiterhin soll es möglich sein, auf jedem beliebigen Typen direkt eine Methode
|
||||||
|
`with_swag()` aufzurufen, die diesen Typen in eine `Swagger`-Instanz verpackt.
|
||||||
|
|
||||||
|
```
|
||||||
|
println!("{}", 3.with_swag()); // prints: "yolo 3 swag"
|
||||||
|
```
|
Loading…
Reference in New Issue
Block a user