Rust Übungen - OsnaCS/dbp-2015 GitHub Wiki

Bevor ihr anfangt, stellt sicher, dass ihr eine richtige Arbeitsumgebung habt! Richtet Sublime richtig ein, siehe Sublime Text!

Ihr könnt alle Aufgaben in je einer Datei lösen. Diese Datei müsst ihr dann, wie vorgestellt, mit rustc compilieren.

Aufgabe 1: Collatz

Schreibt eine Funktion collatz mit Integer Parameter, die die Anzahl der Iterationen vom Collatz Algorithmus mit dem Parameter zurückgibt. Im Hauptprogramm lasst euch die Zahlen 1 bis 20 mit der Anzahl ihrer Iterationen ausgeben.

Aufgabe 2: Unser Praktikum

Schreibt eine Funktion, die den betreuenden Tutor einer Praktikumsgruppe zurückgibt. Also Funktionsparameter: Die Gruppe (...). Rückgabewert: Der Name des Tutors. Aber Gruppe 3 hat doch gar keinen betreuenden Tutor...?

Denkt über die zu verwendenden Typen nach und legt bei Bedarf selber Typen an.

Aufgabe 3: Dummes Auto

Hier sollt ihr einen Typ Car erstellen, welcher einige Funktionen eines Autos simuliert. Ich weiß - super realitätsnahes Beispiel.

Man soll ein neues Car Objekt mit der Methode new erstellen können. In dieser Methode wird das Auto vollgetankt (das Auto hat ein 50l Tank). Es soll aber eine andere Methode zur Erstellung eines Autos geben, bei der man angeben kann, wie viel Benzin am Anfang im Tank ist.

Das Auto besitzt 4 Gänge: Rückwärts und Leerlauf, sowie den ersten und zweiten Gang. Der Typ soll jetzt über eine Methode switch_gear verfügen, welche den Gang des Auto Objekts wechselt. Außerdem gibt es eine Methode drive, die das Runterdrücken des Gaspedals simuliert. Wenn das Auto im Leerlauf steht, passiert nichts, sonst fährt das Auto 10 bzw. 20 Meter vorwärts (erster und zweiter Gang) oder 10 Meter rückwärts (Rückwärtsgang). Der Typ Car´ soll auch die Entfernung vom Ausgangspunkt speichern. Außerdem wird bei drive` immer 3 Liter Benzin verbraucht.

Zum Schluss brauchen wir nur noch zwei Methoden, die uns das noch vorhandene Benzin und die zurückgelegte Strecke zurückliefern.

Aufgabe 4: Sieb des Eratosthenes

Werdet ein bisschen mit der Standardlibrary vertraut...

Ihr sollt das Sieb des Eratosthenes implementieren. Das funktionierte so:

Man hält sich eine Liste für alle Zahlen von 2 bis N vor.
Mit der Variable t von 2 bis N:
  "Streiche" alle Vielfachen von t aus der Liste

Alle Zahlen in der Liste sind jetzt Primzahlen

Überlegt euch, welche Datenstruktur ihr verwenden solltet, und implementiert diesen Algorithmus für den Bereich 2 bis 100.

Sonderaufgabe: Ihr wollt jetzt für alle Nicht-Primzahlen den kleinsten Teiler speichern, sodass er sehr schnell abrufbar ist. Was speichert ihr jetzt in der Datenstruktur? Verändert den Algorithmus.

Aufgabe 5 (More Rust):

Schreibt eine Funktion, welche zwei Parameter eines "beliebigen" Types nimmt und dann die Summe UND das Produkt zurück gibt.

Aufgabe 6 (More Rust, schwieriger):

Erstellt einen Typen, der das Trait Iterator aus der Standardbibliothek imlpementiert. Euer Typ soll ein Iterator über die Zahlen der Fibonacci Reihe sein. Also bei diesem Code:

for i in YourType::new().take(20) {
    println!("{}", i);
}

...sollen die ersten 20 Fibonacci Zahlen ausgegeben werden.

Aufgabe 7 (More Rust, schwieriger):

Erstellt einen Typen, Swagger, der einen anderen Typen, der Display implementiert, in sich speichert. Euer Typ soll selber Display implementieren: Wenn er ausgegeben wird, soll er erst "#swag", dann die Ausgabe des in sich gespeicherten Objektes und dann "#yolo" ausgeben.