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