From ff95f820c4f17993787bb1a0239b2d91da52c86c Mon Sep 17 00:00:00 2001 From: Thomas Smits Date: Mon, 11 Mar 2024 10:32:49 +0100 Subject: [PATCH] first commit --- Assignment_001/readme.md | 3 +++ Assignment_001/solution/readme.md | 6 +++++ Assignment_002/readme.md | 22 ++++++++++++++++ Assignment_002/solution/readme.md | 3 +++ Assignment_003/readme.md | 23 +++++++++++++++++ Assignment_003/solution/readme.md | 3 +++ Assignment_004/readme.md | 32 ++++++++++++++++++++++++ Assignment_004/solution/readme.md | 3 +++ Assignment_005/readme.md | 35 ++++++++++++++++++++++++++ Assignment_005/solution/readme.md | 3 +++ Assignment_006/readme.md | 10 ++++++++ Assignment_006/solution/readme.md | 3 +++ Assignment_007/readme.md | 15 +++++++++++ Assignment_007/solution/readme.md | 3 +++ Assignment_008/readme.md | 13 ++++++++++ Assignment_008/solution/readme.md | 3 +++ Assignment_009/readme.md | 10 ++++++++ Assignment_009/solution/readme.md | 3 +++ Assignment_010/readme.md | 13 ++++++++++ Assignment_010/solution/readme.md | 3 +++ Assignment_011/rabbit.jpg | Bin 0 -> 85211 bytes Assignment_011/readme.md | 40 ++++++++++++++++++++++++++++++ Assignment_011/solution/readme.md | 3 +++ Assignment_012/readme.md | 14 +++++++++++ Assignment_012/solution/readme.md | 3 +++ Assignment_013/readme.md | 14 +++++++++++ Assignment_013/solution/readme.md | 3 +++ Assignment_014/readme.md | 13 ++++++++++ Assignment_014/solution/readme.md | 3 +++ Assignment_015/readme.md | 15 +++++++++++ Assignment_015/solution/readme.md | 3 +++ Assignment_016/readme.md | 13 ++++++++++ Assignment_016/solution/readme.md | 3 +++ Assignment_017/readme.md | 12 +++++++++ Assignment_017/solution/readme.md | 3 +++ readme.md | 27 ++++++++++++++++++++ 36 files changed, 378 insertions(+) create mode 100644 Assignment_001/readme.md create mode 100644 Assignment_001/solution/readme.md create mode 100644 Assignment_002/readme.md create mode 100644 Assignment_002/solution/readme.md create mode 100644 Assignment_003/readme.md create mode 100644 Assignment_003/solution/readme.md create mode 100644 Assignment_004/readme.md create mode 100644 Assignment_004/solution/readme.md create mode 100644 Assignment_005/readme.md create mode 100644 Assignment_005/solution/readme.md create mode 100644 Assignment_006/readme.md create mode 100644 Assignment_006/solution/readme.md create mode 100644 Assignment_007/readme.md create mode 100644 Assignment_007/solution/readme.md create mode 100644 Assignment_008/readme.md create mode 100644 Assignment_008/solution/readme.md create mode 100644 Assignment_009/readme.md create mode 100644 Assignment_009/solution/readme.md create mode 100644 Assignment_010/readme.md create mode 100644 Assignment_010/solution/readme.md create mode 100644 Assignment_011/rabbit.jpg create mode 100644 Assignment_011/readme.md create mode 100644 Assignment_011/solution/readme.md create mode 100644 Assignment_012/readme.md create mode 100644 Assignment_012/solution/readme.md create mode 100644 Assignment_013/readme.md create mode 100644 Assignment_013/solution/readme.md create mode 100644 Assignment_014/readme.md create mode 100644 Assignment_014/solution/readme.md create mode 100644 Assignment_015/readme.md create mode 100644 Assignment_015/solution/readme.md create mode 100644 Assignment_016/readme.md create mode 100644 Assignment_016/solution/readme.md create mode 100644 Assignment_017/readme.md create mode 100644 Assignment_017/solution/readme.md create mode 100644 readme.md diff --git a/Assignment_001/readme.md b/Assignment_001/readme.md new file mode 100644 index 0000000..909164d --- /dev/null +++ b/Assignment_001/readme.md @@ -0,0 +1,3 @@ +## Prefix-Notation +Bitte wandeln Sie den folgenden mathematischen Ausdruck in einen gültigen Clojure-Ausdruck in _Prefix-Notation_ um: `42 / (3 + 3 * 3) * 4 - 11`. +📆 **Fällig: ----** 📆 [Musterlösung](solution/) diff --git a/Assignment_001/solution/readme.md b/Assignment_001/solution/readme.md new file mode 100644 index 0000000..2c4da60 --- /dev/null +++ b/Assignment_001/solution/readme.md @@ -0,0 +1,6 @@ +# Lösung: 01_basics/01_prefix.md + +















+```clojure +(- (* (/ 42 (+ (* 3 3) 3)) 4) 11) +``` diff --git a/Assignment_002/readme.md b/Assignment_002/readme.md new file mode 100644 index 0000000..8bbc07a --- /dev/null +++ b/Assignment_002/readme.md @@ -0,0 +1,22 @@ +## Erste Schritte + +📆 **Fällig: ----** 📆 [Musterlösung](solution/) + +Sie haben einen Nebenjob als Programmierer*in bei der _Abzock GmbH_, einem bekannten PlayStation 5-Scalper. Sie sollen ein kleines Clojure-Programm für die Preisgestaltung auf der Webseite der Firma schreiben. + + * Legen Sie ein Clojure-Skript `scalper.clj` an + * Das Skript fragt (`read-line`) nach einem Produktnamen und nach einem Einkaufs-Preis p_E + * Es gibt den Produktnamen mit Verkaufspreis (p_V) aus (`print` und `println`) + * Es gilt p_V = max(2.5 x p_E, 995) + +Hinweis: Verwenden Sie `Integer/parseInt` für die Umwandlung des Einkaufspreises und `max` für die Berechnung des Maximums. + +```console +$ ./scalper.clj +Produktname: +PS5 digital edition +Einkauspreis: +440 + +Sonderangebot: PS5 digital edition für nur 1100.0 EUR +``` \ No newline at end of file diff --git a/Assignment_002/solution/readme.md b/Assignment_002/solution/readme.md new file mode 100644 index 0000000..f081029 --- /dev/null +++ b/Assignment_002/solution/readme.md @@ -0,0 +1,3 @@ +# Lösung: 01_basics/02_first_steps.md + +!INCLUDESRC "../src/clojure/scalper.clj" clojure diff --git a/Assignment_003/readme.md b/Assignment_003/readme.md new file mode 100644 index 0000000..4adcb99 --- /dev/null +++ b/Assignment_003/readme.md @@ -0,0 +1,23 @@ +## Maps: Lagerverwaltung + +📆 **Fällig: ----** 📆 [Musterlösung](solution/) + +Die Abzock GmbH ist sehr zufrieden mit Ihnen, sodass Sie jetzt die Lagerverwaltung optimieren sollen. Aktuell hat die Firma nur drei Artikel auf Lager: PlayStation 5 (10 Stück), Grafikkarten vom Typ GTX1090 (20 Stück) und Sonnenblumenöl (300 Flaschen). Verwenden Sie als Schlüssel die Keywords `:PS5`, `:GTX1090` und `:OEL`. + + * Legen Sie ein Clojure-Skript `abzock-lager.clj` an + * Implementieren Sie das Lager als Map im Programm mit den Keywords als Key und dem Bestand als Wert + * Fragen Sie auf der Kommandozeile nach Warenabgängen + * Ziehen Sie den Warenabgang vom Lager ab und geben Sie die neuen Bestände aus + * Hinweis: Obwohl nicht sauber, dürfen Sie hier dasselbe Symbol mehrfach mit einem `def` überschreiben. Versuchen Sie nicht die Map mit `update` zu verändern, sondern entfernen Sie den Schlüssel und fügen Sie ihn danach mit dem neuen Bestand wieder ein. + +```console +$ clj -M abzock-lager.clj +Lagerverwaltung Abzock GmbH +Welcher Artikel wurde geliefert: +PS5 +Wieviel wurde ausgeliefert? +5 + +Neuer Lagerbestand +{:GTX1090 20, :OEL 300, :PS5 5} +``` \ No newline at end of file diff --git a/Assignment_003/solution/readme.md b/Assignment_003/solution/readme.md new file mode 100644 index 0000000..cb23d04 --- /dev/null +++ b/Assignment_003/solution/readme.md @@ -0,0 +1,3 @@ +# Lösung: 01_basics/03_maps.md + +!INCLUDESRC "../src/clojure/abzock-lager.clj" clojure \ No newline at end of file diff --git a/Assignment_004/readme.md b/Assignment_004/readme.md new file mode 100644 index 0000000..4040232 --- /dev/null +++ b/Assignment_004/readme.md @@ -0,0 +1,32 @@ +## Kontrolltrukturen: Lagerverwaltung, Teil 2 + +📆 **Fällig: ----** 📆 [Musterlösung](solution/) + +Die Lagerverwaltung aus der letzten Übung funktioniert gut, allerdings können die Bestände hier unter 0 fallen. Dies wollen Sie in einer nächsten Version korrigieren: + + * Kopieren Sie das Clojure-Skript der letzten Übung und nennen Sie die Kopie `abzock-lager-2.clj` + * Ändern Sie es so ab, dass Abgänge nur verbucht werden, wenn noch ausreichend Lagerbestand vorhanden ist + * Reicht der Lagerbestand nicht aus, beleidigen Sie den Benutzer und buchen den Abgang nicht + +```console +Lagerverwaltung Abzock GmbH +Welcher Artikel wurde geliefert: +PS5 +Wie viel wurde ausgeliefert? +30 +Nicht genug Artikel vorhanden, du unwissendes Frischfleisch + +Neuer Lagerbestand +{:PS5 10, :GTX1090 20, :OEL 300} +``` + +```console +Lagerverwaltung Abzock GmbH +Welcher Artikel wurde geliefert: +PS5 +Wie viel wurde ausgeliefert? +10 + +Neuer Lagerbestand +{:GTX1090 20, :OEL 300, :PS5 0} +``` \ No newline at end of file diff --git a/Assignment_004/solution/readme.md b/Assignment_004/solution/readme.md new file mode 100644 index 0000000..4167297 --- /dev/null +++ b/Assignment_004/solution/readme.md @@ -0,0 +1,3 @@ +# Lösung: 01_basics/04_control_structures.md + +!INCLUDESRC "../src/clojure/abzock-lager-2.clj" clojure \ No newline at end of file diff --git a/Assignment_005/readme.md b/Assignment_005/readme.md new file mode 100644 index 0000000..852157c --- /dev/null +++ b/Assignment_005/readme.md @@ -0,0 +1,35 @@ +## Map und Reduce: Gewinnermittlung für die Abzock GmbH + +📆 **Fällig: ----** 📆 [Musterlösung](solution/) + +Nachdem die Abzock GmbH wirklich goldene Zeiten gesehen hat, möchte die Firma einen besseren Überblick über die Einnahmen haben. Die Geschäftsführer möchten sich nämlich von dem Gewinn Teslas kaufen und damit vollkommen sinnlos in der Gegend herumfahren und dabei rufen "Eure Armut kotzt uns an". + +Dank Ihrer unermüdlichen Arbeit, liegen die Verkaufsdaten der Firma bereits in Clojure Datenstrukturen vor. + +```clojure{Verkaufte Stückzahlen} +(def verkaeufe-stueckzahlen { + :PS5 [ 10, 5, 8, 13, 22, 42, 110 ], + :GTX1090 [ 5, 7, 11, 54, 90 ], + :OEL [ 10, 44, 100, 343, 66, 52, 23 ]}) +``` + +```clojure{Verkaufspreise} +(def verkaufspreise { + :PS5 1239, + :GTX1090 1699, + :OEL 9 }) +``` + +Schreiben Sie ein Clojure-Skript `abzock-gewinn.clj`: + + * Berechnen Sie die Einnahmen jedes einzelnen Verkaufs + * Berechnen Sie die Summer der Einnahmen pro Produkt + * Geben Sie das Ergebnis mit `println` aus + * Verwenden Sie `doseq`, `map` und `reduce` + +```console{Ausgabe des Programms} +Gewinnermittlung Abzock GmbH +:PS5 260190 EUR +:GTX1090 283733 EUR +:OEL 5742 EUR +``` \ No newline at end of file diff --git a/Assignment_005/solution/readme.md b/Assignment_005/solution/readme.md new file mode 100644 index 0000000..89de5ed --- /dev/null +++ b/Assignment_005/solution/readme.md @@ -0,0 +1,3 @@ +# Lösung: 01_basics/05_map_reduce.md + +!INCLUDESRC "../src/clojure/abzock-gewinn.clj" clojure diff --git a/Assignment_006/readme.md b/Assignment_006/readme.md new file mode 100644 index 0000000..aaaea60 --- /dev/null +++ b/Assignment_006/readme.md @@ -0,0 +1,10 @@ +## Multi-Arity-Funktion +Schreiben Sie eine Funktion `my-average`, welche das arithmetische Mittel von 2, 4 oder 6 Zahlen bestimmen kann. Verwenden Sie __keine__ Varag-Funktion, sondern programmieren Sie eine _Multi-Arity-Funktion_. +📆 **Fällig: ----** 📆 [Musterlösung](solution/) + + +```clojure +(defn my-average +; ----> hier Ihr Code <---- +) +``` \ No newline at end of file diff --git a/Assignment_006/solution/readme.md b/Assignment_006/solution/readme.md new file mode 100644 index 0000000..94d0d08 --- /dev/null +++ b/Assignment_006/solution/readme.md @@ -0,0 +1,3 @@ +# Lösung: 02_funktionen/01_my-average.md + +!INCLUDESRC "../src/clojure/my-average.clj" clojure \ No newline at end of file diff --git a/Assignment_007/readme.md b/Assignment_007/readme.md new file mode 100644 index 0000000..6a42574 --- /dev/null +++ b/Assignment_007/readme.md @@ -0,0 +1,15 @@ +## Funktion als Rückgabewert +Schreiben Sie eine Funktion `plus-n-fn`, welche einen Parameter `n` nimmt und eine neue Funktion zurückliefert, die ebenfalls einen Parameter akzeptiert. Diese neue Funktion addiert den Übergabewert zu `n`. +📆 **Fällig: ----** 📆 [Musterlösung](solution/) + + +```clojure +(defn plus-n-fn + "Liefert eine Funktion zurück, die genau ein + Argument nimmt und dieses Argument zu + `n` addiert." + [n] +; ---- hier Ihr Code ---- + +) +``` \ No newline at end of file diff --git a/Assignment_007/solution/readme.md b/Assignment_007/solution/readme.md new file mode 100644 index 0000000..0a3c9eb --- /dev/null +++ b/Assignment_007/solution/readme.md @@ -0,0 +1,3 @@ +# Lösung: 02_funktionen/02_plus-n-fn.md + +!INCLUDESRC "../src/clojure/plus-n-fn.clj" clojure \ No newline at end of file diff --git a/Assignment_008/readme.md b/Assignment_008/readme.md new file mode 100644 index 0000000..398c7b4 --- /dev/null +++ b/Assignment_008/readme.md @@ -0,0 +1,13 @@ +## apply und Funktionen als Übergabewerte +Schreiben Sie eine Funktion `triple-apply`, der man eine Funktion und beliebig viele weitere Argumente übergeben kann. Die Funktion wird dreimal mit den Argumenten ausgeführt und die Ergebnisse werden addiert, bevor sie zurückgegeben werden. +📆 **Fällig: ----** 📆 [Musterlösung](solution/) + + +```clojure +(defn triple-apply + "Wendet die Funktion `f` dreimal hintereinander auf die Argumente + `args` an und gibt die Summe der Ergebnisse zurück." + [f & args] +; ---- hier Ihr Code ---- +) +``` \ No newline at end of file diff --git a/Assignment_008/solution/readme.md b/Assignment_008/solution/readme.md new file mode 100644 index 0000000..c2eb5c7 --- /dev/null +++ b/Assignment_008/solution/readme.md @@ -0,0 +1,3 @@ +# Lösung: 02_funktionen/03_triple-apply.md + +!INCLUDESRC "../src/clojure/triple-apply.clj" clojure \ No newline at end of file diff --git a/Assignment_009/readme.md b/Assignment_009/readme.md new file mode 100644 index 0000000..860b1c0 --- /dev/null +++ b/Assignment_009/readme.md @@ -0,0 +1,10 @@ +## Vor- und Nachbedingung +Gegeben Sie die folgende Funktion `sqrt`. Versehen Sie die Funktion mit einer Vor- und Nachbedingung, um den Aufruf mit ungültigen Werten (`n <= 0`) und auf einen positiven Rückgabewert (`> 0`) zu testen. +📆 **Fällig: ----** 📆 [Musterlösung](solution/) + + +```clojure +(defn sqrt [n] +; ---- hier Ihr Code ---- + (Math/sqrt n)) +``` \ No newline at end of file diff --git a/Assignment_009/solution/readme.md b/Assignment_009/solution/readme.md new file mode 100644 index 0000000..a5013aa --- /dev/null +++ b/Assignment_009/solution/readme.md @@ -0,0 +1,3 @@ +# Lösung: 02_funktionen/04_sqrt.md + +!INCLUDESRC "../src/clojure/sqrt.clj" clojure \ No newline at end of file diff --git a/Assignment_010/readme.md b/Assignment_010/readme.md new file mode 100644 index 0000000..cf2ab01 --- /dev/null +++ b/Assignment_010/readme.md @@ -0,0 +1,13 @@ +## Tail-Recursion +Schreiben Sie eine Funktion `prod-recur`, die eine beliebige Zahl von Werten multipliziert, die ihr als Vektor oder Sequenz übergeben werden. Verwenden Sie für die Implementierung `loop` und `recur` und __nicht__ `reduce` oder eine andere Funktion außer `*`. +📆 **Fällig: ----** 📆 [Musterlösung](solution/) + + +```clojure +(defn prod-recur + "Berechnet das Produkt einer Reihe von Zahlen `zahlen` unter + Verwendung von loop und recur." + [zahlen] +; ---- hier Ihr Code ---- +) +``` \ No newline at end of file diff --git a/Assignment_010/solution/readme.md b/Assignment_010/solution/readme.md new file mode 100644 index 0000000..71b934b --- /dev/null +++ b/Assignment_010/solution/readme.md @@ -0,0 +1,3 @@ +# Lösung: 03_rekursion/01_prod-recur.md + +!INCLUDESRC "../src/clojure/prod-recur.clj" clojure \ No newline at end of file diff --git a/Assignment_011/rabbit.jpg b/Assignment_011/rabbit.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7cf4a5afc404a8d1ac15899f593485c0061ca453 GIT binary patch literal 85211 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%0AG@A)N(wN(w<*_F@{Mk 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 literal 0 HcmV?d00001 diff --git a/Assignment_011/readme.md b/Assignment_011/readme.md new file mode 100644 index 0000000..8a295fa --- /dev/null +++ b/Assignment_011/readme.md @@ -0,0 +1,40 @@ +## Was hoppelt den da? + +📆 **Fällig: ----** 📆 [Musterlösung](solution/) + +Nach Ihrer umfassenden Tätigkeit im Scalper-Sektor sind Sie komplett erschöpft und brauchen etwas Urlaub. Also buchen Sie von dem Geld, das Sie in den letzten Monaten verdient haben, einen schönen Urlaub in den Alpen. Von Ihrem Zimmer haben Sie einen wunderbaren Blick auf die Wiesen und natürlich die Berge. Das einzige Problem: Es gibt kein Internet und damit entfallen die ganzen schönen Online-Spiele und das Netflixen komplett. Sie tun also das, was man in solch einer Situation macht und schauen aus dem Fenster. + + + +Sie sehen ein Kaninchen, das freudig über die Wiese hoppelt. "Ach, wie schön die Natur ist" denken Sie und seufzen entspannt. + +Während Sie so den Kaninchen zuschauen, denken Sie an Fibonacci und den Biologieunterricht in der Schule. Dort haben Sie gelernt, dass die Größe einer Kaninchenpopulation - solange man keine davon erlegt und isst - der Folge der Fibonacci-Zahlen folgt. Da sowieso nichts zu tun ist, setzen Sie sich in und programmieren in Clojure ein entsprechendes, kleines Skript. + +Die Fibonacci-Zahlen sind rekursiv definiert als: + + 1. F_0 = 0 + 2. F_1 = 1 + 3. F_n = F_{n-1} + F_{n-2} + +Damit ist der Anfang der Fibonacci-Folge: + +| n | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | +|-----|---|---|---|---|---|---|---|----|----|----| +| F_n | 0 | 1 | 1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 | + + +Schreiben Sie ein Clojure-Programm (`kaninchen.clj`), das Fibonacci-Zahlen berechnet und ausgibt. + + * Es soll eine Funktion `fibs` geben, die für den Parameter `n` die dazugehörige Fibonacci-Zahlen bis `n` liefert, also z.B. `(fibs 5)` liefert `(0 1 1 2 3 5)`. + * Es soll eine Funktion `fib` geben, die für den Parameter `n` die Fibonacci-Zahl an der Stelle `n` liefert, also z.B. `(fib 5)` liefert `5`. + * Schreiben Sie eine Funktion `karnickel` welche die Anzahl der Kaninchen nach 14 Generationen ausgibt und die Entwicklung der Population als Reihe von Zahlen. + +```console +Nach 14 Generationen haben wir 377 Kaninchen +Die Population entwickelt sich so: (0 1 1 2 3 5 8 13 21 34 55 89 144 233 377) +``` + + * Verwenden Sie bitte auf jeden Fall eine _Tail-Recursion_ mit `loop` und `recur`. + * Speichern Sie die Anzahl der Generationen in einem Symbol. + * Sichern Sie die Funktionen `fib` und `fibs` durch eine Vorbedingung dagegen ab, mit negativen Werten aufgerufen zu werden. + * Stellen Sie durch eine Nachbedingung bei `fib` sicher, dass das Ergebnis nicht negativ ist. \ No newline at end of file diff --git a/Assignment_011/solution/readme.md b/Assignment_011/solution/readme.md new file mode 100644 index 0000000..f434a62 --- /dev/null +++ b/Assignment_011/solution/readme.md @@ -0,0 +1,3 @@ +# Lösung: 03_rekursion/02_karnickel.md + +!INCLUDESRC "../src/clojure/kaninchen.clj" clojure \ No newline at end of file diff --git a/Assignment_012/readme.md b/Assignment_012/readme.md new file mode 100644 index 0000000..ca909d2 --- /dev/null +++ b/Assignment_012/readme.md @@ -0,0 +1,14 @@ +## cond +Schreiben Sie eine Funktion `test-positive`, der man eine Zahl übergibt und die dann einen String zurückgibt, der anzeigt, ob die zweite Zahl größer, kleiner oder gleich 0 ist. +📆 **Fällig: ----** 📆 [Musterlösung](solution/) + + +```clojure +(defn test-positive + "Vergleicht eine Zahl mit 0 gibt einen Hinweis-Text. + Der Hinweistext erklärt, ob die Zahl `number` größer, kleiner + oder gleich zur Zahl 0 ist." + [number] +; ---- hier Ihr Code ---- +) +``` \ No newline at end of file diff --git a/Assignment_012/solution/readme.md b/Assignment_012/solution/readme.md new file mode 100644 index 0000000..c9860b2 --- /dev/null +++ b/Assignment_012/solution/readme.md @@ -0,0 +1,3 @@ +# Lösung: 04_variablen/01_test-positive.md + +!INCLUDESRC "../src/clojure/test-positive.clj" clojure \ No newline at end of file diff --git a/Assignment_013/readme.md b/Assignment_013/readme.md new file mode 100644 index 0000000..983cbdc --- /dev/null +++ b/Assignment_013/readme.md @@ -0,0 +1,14 @@ +## Ausnahmebehandlung +Schreiben Sie eine Funktion `number-formatter`, die unter Verwendung von der Java-Methode `Integer.parseInt` einen String in einen Zahlenwert umwandelt. Wenn die Umwandlung nicht funktioniert, gibt die Funktion -1 zurück. +📆 **Fällig: ----** 📆 [Musterlösung](solution/) + + +```clojure +(defn number-formatter + "Konvertiert den String `string` in einen Integer-Wert. + Wenn die Konvertierung fehlschlägt, wird -1 zurück + gegeben." + [string] +; ---- hier Ihr Code ---- +) +``` \ No newline at end of file diff --git a/Assignment_013/solution/readme.md b/Assignment_013/solution/readme.md new file mode 100644 index 0000000..5643c66 --- /dev/null +++ b/Assignment_013/solution/readme.md @@ -0,0 +1,3 @@ +# Lösung: 04_variablen/02_number-formatter.md + +!INCLUDESRC "../src/clojure/number-formatter.clj" clojure \ No newline at end of file diff --git a/Assignment_014/readme.md b/Assignment_014/readme.md new file mode 100644 index 0000000..17ccdc7 --- /dev/null +++ b/Assignment_014/readme.md @@ -0,0 +1,13 @@ +## reduce +Schreiben Sie eine Funktion `prod-reduce`, die eine beliebige Zahl von Werten multipliziert, die ihr als Vektor oder Sequenz übergeben werden. Verwenden Sie für die Implementierung die `reduce`-Funktion und __keine__ Rekursion. +📆 **Fällig: ----** 📆 [Musterlösung](solution/) + + +```clojure +(defn prod-reduce + "Berechnet das Produkt einer Reihe von Zahlen `zahlen` unter + Verwendung von reduce." + [zahlen] +; ---- hier Ihr Code ---- +) +``` \ No newline at end of file diff --git a/Assignment_014/solution/readme.md b/Assignment_014/solution/readme.md new file mode 100644 index 0000000..331f19b --- /dev/null +++ b/Assignment_014/solution/readme.md @@ -0,0 +1,3 @@ +# Lösung: 05_collections/01_prod-reduce.md + +!INCLUDESRC "../src/clojure/prod-reduce.clj" clojure \ No newline at end of file diff --git a/Assignment_015/readme.md b/Assignment_015/readme.md new file mode 100644 index 0000000..d13f93a --- /dev/null +++ b/Assignment_015/readme.md @@ -0,0 +1,15 @@ +## mapping und cycle +Schreiben Sie eine Funktion `map-cycle`, welche durch eine übergebene Menge von Zahlen wiederholt läuft. Die Übergabe erfolgt als _Vararg-Argument_. Die Zahlen werden dann mal Zwei genommen und es wird jeweils 1 abgezogen (z.B. 5 -> 10 - 1 = 9). Aus dem Ergebnis werden dann n-Werte, gesteuert über den ersten Parameter, zurückgegeben. +📆 **Fällig: ----** 📆 [Musterlösung](solution/) + + +```clojure +(defn map-cycle + "Erzeugt eine unendliche Sequenz der Zahlen `zahlen` + und berechnet für jede Zahl deren Doppeltes und zieht + 1 ab. Vom Ergebnis werden `n` Elemente zurück + gegeben." + [n & zahlen] +; ---- hier Ihr Code ---- +) +``` \ No newline at end of file diff --git a/Assignment_015/solution/readme.md b/Assignment_015/solution/readme.md new file mode 100644 index 0000000..811629b --- /dev/null +++ b/Assignment_015/solution/readme.md @@ -0,0 +1,3 @@ +# Lösung: 05_collections/02_map-cycle.md + +!INCLUDESRC "../src/clojure/map-cycle.clj" clojure \ No newline at end of file diff --git a/Assignment_016/readme.md b/Assignment_016/readme.md new file mode 100644 index 0000000..6dd1e49 --- /dev/null +++ b/Assignment_016/readme.md @@ -0,0 +1,13 @@ +## take-while +Schreiben Sie eine Funktion `below-zero`, welche einen Vektor oder eine Sequenz übergeben bekommt. Die Funktion soll einen neuen Vektor (oder Sequenz) mit denselben Elementen zurückgeben, diese endet aber vor dem ersten Element das `>= 0` ist. +📆 **Fällig: ----** 📆 [Musterlösung](solution/) + + +```clojure +(defn below-zero + "Läuft über `data` und gibt die Elemente bis zum ersten + Auftreten eines Wertes >= 0 zurück." + [data] +; ---- hier Ihr Code ---- +) +``` \ No newline at end of file diff --git a/Assignment_016/solution/readme.md b/Assignment_016/solution/readme.md new file mode 100644 index 0000000..5ee59d6 --- /dev/null +++ b/Assignment_016/solution/readme.md @@ -0,0 +1,3 @@ +# Lösung: 05_collections/03_below-zero.md + +!INCLUDESRC "../src/clojure/below-zero.clj" clojure \ No newline at end of file diff --git a/Assignment_017/readme.md b/Assignment_017/readme.md new file mode 100644 index 0000000..778e57f --- /dev/null +++ b/Assignment_017/readme.md @@ -0,0 +1,12 @@ +## filter +Schreiben Sie eine Funktion `filter-positive`, welche eine Liste oder Sequenz übergeben bekommt. Die Funktion soll eine neue Liste (oder Sequenz) mit denselben Elemente zurückgeben, aber alle Elemente `> 0` ausfiltern. +📆 **Fällig: ----** 📆 [Musterlösung](solution/) + + +```clojure +(defn filter-positive + "Läuft über `data` und gibt die Elemente, deren Wert < 0 ist zurück." + [data] + ; ---- hier Ihr Code ---- +) +``` \ No newline at end of file diff --git a/Assignment_017/solution/readme.md b/Assignment_017/solution/readme.md new file mode 100644 index 0000000..9c7829e --- /dev/null +++ b/Assignment_017/solution/readme.md @@ -0,0 +1,3 @@ +# Lösung: 05_collections/04_filter-zero.md + +!INCLUDESRC "../src/clojure/filter-positive.clj" clojure \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..ca3d5a2 --- /dev/null +++ b/readme.md @@ -0,0 +1,27 @@ +# Clojure-Programmierung + +Hier finden Sie Übungsaufgaben für den Kurs Clojure-Programmierung. + +Die **Abgabedaten** haben keine Bedeutung, da es sich um freiwillige Übungen handelt. + +## Themenüberblick + +| # | Thema | Fällig am 📆 | Musterlösung | +|----|------------------------------------------------------------------|----------------|----------------| +| 1. | [01_basics/01_prefix.md](Assignment_001/readme.md) | **----** | [✅](Assignment_001/solution/) | +| 2. | [01_basics/02_first_steps.md](Assignment_002/readme.md) | **----** | [✅](Assignment_002/solution/) | +| 3. | [01_basics/03_maps.md](Assignment_003/readme.md) | **----** | [✅](Assignment_003/solution/) | +| 4. | [01_basics/04_control_structures.md](Assignment_004/readme.md) | **----** | [✅](Assignment_004/solution/) | +| 5. | [01_basics/05_map_reduce.md](Assignment_005/readme.md) | **----** | [✅](Assignment_005/solution/) | +| 6. | [02_funktionen/01_my-average.md](Assignment_006/readme.md) | **----** | [✅](Assignment_006/solution/) | +| 7. | [02_funktionen/02_plus-n-fn.md](Assignment_007/readme.md) | **----** | [✅](Assignment_007/solution/) | +| 8. | [02_funktionen/03_triple-apply.md](Assignment_008/readme.md) | **----** | [✅](Assignment_008/solution/) | +| 9. | [02_funktionen/04_sqrt.md](Assignment_009/readme.md) | **----** | [✅](Assignment_009/solution/) | +| 10. | [03_rekursion/01_prod-recur.md](Assignment_010/readme.md) | **----** | [✅](Assignment_010/solution/) | +| 11. | [03_rekursion/02_karnickel.md](Assignment_011/readme.md) | **----** | [✅](Assignment_011/solution/) | +| 12. | [04_variablen/01_test-positive.md](Assignment_012/readme.md) | **----** | [✅](Assignment_012/solution/) | +| 13. | [04_variablen/02_number-formatter.md](Assignment_013/readme.md) | **----** | [✅](Assignment_013/solution/) | +| 14. | [05_collections/01_prod-reduce.md](Assignment_014/readme.md) | **----** | [✅](Assignment_014/solution/) | +| 15. | [05_collections/02_map-cycle.md](Assignment_015/readme.md) | **----** | [✅](Assignment_015/solution/) | +| 16. | [05_collections/03_below-zero.md](Assignment_016/readme.md) | **----** | [✅](Assignment_016/solution/) | +| 17. | [05_collections/04_filter-zero.md](Assignment_017/readme.md) | **----** | [✅](Assignment_017/solution/) |