Update of exercises

master
Thomas Smits 2024-03-11 10:44:28 +01:00
parent 04dda27e57
commit 10261447c0
17 changed files with 30 additions and 12 deletions

View File

@ -1,3 +1,5 @@
# Prefix-Notation # 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/) 📆 **Fällig: ----** 📆 [Musterlösung](solution/)
Bitte wandeln Sie den folgenden mathematischen Ausdruck in einen gültigen Clojure-Ausdruck in _Prefix-Notation_ um: `42 / (3 + 3 * 3) * 4 - 11`.

View File

@ -2,6 +2,7 @@
📆 **Fällig: ----** 📆 [Musterlösung](solution/) 📆 **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. 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 * Legen Sie ein Clojure-Skript `scalper.clj` an

View File

@ -2,6 +2,7 @@
📆 **Fällig: ----** 📆 [Musterlösung](solution/) 📆 **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`. 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 * Legen Sie ein Clojure-Skript `abzock-lager.clj` an

View File

@ -2,6 +2,7 @@
📆 **Fällig: ----** 📆 [Musterlösung](solution/) 📆 **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: 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` * Kopieren Sie das Clojure-Skript der letzten Übung und nennen Sie die Kopie `abzock-lager-2.clj`

View File

@ -2,6 +2,7 @@
📆 **Fällig: ----** 📆 [Musterlösung](solution/) 📆 **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". 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. Dank Ihrer unermüdlichen Arbeit, liegen die Verkaufsdaten der Firma bereits in Clojure Datenstrukturen vor.

View File

@ -1,7 +1,8 @@
# Multi-Arity-Funktion # 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/) 📆 **Fällig: ----** 📆 [Musterlösung](solution/)
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_.
```clojure ```clojure
(defn my-average (defn my-average

View File

@ -1,7 +1,8 @@
# Funktion als Rückgabewert # 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/) 📆 **Fällig: ----** 📆 [Musterlösung](solution/)
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`.
```clojure ```clojure
(defn plus-n-fn (defn plus-n-fn

View File

@ -1,7 +1,8 @@
# apply und Funktionen als Übergabewerte # 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/) 📆 **Fällig: ----** 📆 [Musterlösung](solution/)
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.
```clojure ```clojure
(defn triple-apply (defn triple-apply

View File

@ -1,7 +1,8 @@
# Vor- und Nachbedingung # 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/) 📆 **Fällig: ----** 📆 [Musterlösung](solution/)
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.
```clojure ```clojure
(defn sqrt [n] (defn sqrt [n]

View File

@ -1,7 +1,8 @@
# Tail-Recursion # 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/) 📆 **Fällig: ----** 📆 [Musterlösung](solution/)
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 `*`.
```clojure ```clojure
(defn prod-recur (defn prod-recur

View File

@ -2,6 +2,7 @@
📆 **Fällig: ----** 📆 [Musterlösung](solution/) 📆 **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. 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.
<img src="rabbit.jpg" width="300"> <img src="rabbit.jpg" width="300">

View File

@ -1,7 +1,8 @@
# cond # 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/) 📆 **Fällig: ----** 📆 [Musterlösung](solution/)
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.
```clojure ```clojure
(defn test-positive (defn test-positive

View File

@ -1,7 +1,8 @@
# Ausnahmebehandlung # 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/) 📆 **Fällig: ----** 📆 [Musterlösung](solution/)
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.
```clojure ```clojure
(defn number-formatter (defn number-formatter

View File

@ -1,7 +1,8 @@
# reduce # 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/) 📆 **Fällig: ----** 📆 [Musterlösung](solution/)
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.
```clojure ```clojure
(defn prod-reduce (defn prod-reduce

View File

@ -1,7 +1,8 @@
# mapping und cycle # 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/) 📆 **Fällig: ----** 📆 [Musterlösung](solution/)
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.
```clojure ```clojure
(defn map-cycle (defn map-cycle

View File

@ -1,7 +1,8 @@
# take-while # 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/) 📆 **Fällig: ----** 📆 [Musterlösung](solution/)
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.
```clojure ```clojure
(defn below-zero (defn below-zero

View File

@ -1,7 +1,8 @@
# filter # 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/) 📆 **Fällig: ----** 📆 [Musterlösung](solution/)
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.
```clojure ```clojure
(defn filter-positive (defn filter-positive