Update of exercises
parent
f8e1e90946
commit
f79e3662c0
|
@ -1,3 +1,18 @@
|
||||||
# Lösung: Erste Schritte
|
# Lösung: Erste Schritte
|
||||||
|
|
||||||
!INCLUDESRC "../src/scalper.clj" clojure
|
|
||||||
|
```$2#!/usr/bin/env -S clojure -M
|
||||||
|
|
||||||
|
(println "Produktname: ")
|
||||||
|
(def produkt (read-line))
|
||||||
|
|
||||||
|
(println "Einkauspreis:")
|
||||||
|
(def preis-einkauf (Integer/parseInt (read-line)))
|
||||||
|
|
||||||
|
(def preis-verkauf (max (* 2.5 preis-einkauf) 995))
|
||||||
|
|
||||||
|
(println "")
|
||||||
|
(print "Sonderangebot: ")
|
||||||
|
(println produkt "für nur" preis-verkauf "EUR")
|
||||||
|
|
||||||
|
```
|
|
@ -1,3 +1,28 @@
|
||||||
# Lösung: Maps: Lagerverwaltung
|
# Lösung: Maps: Lagerverwaltung
|
||||||
|
|
||||||
!INCLUDESRC "../src/abzock-lager.clj" clojure
|
|
||||||
|
```$2#!/usr/bin/env -S clojure -M
|
||||||
|
|
||||||
|
(def lager {
|
||||||
|
:PS5 10
|
||||||
|
:GTX1090 20
|
||||||
|
:OEL 300
|
||||||
|
})
|
||||||
|
|
||||||
|
(println "Lagerverwaltung Abzock GmbH")
|
||||||
|
(println "Welcher Artikel wurde geliefert: ")
|
||||||
|
(def artikel (keyword (read-line)))
|
||||||
|
(println "Wieviel wurde ausgeliefert?")
|
||||||
|
(def menge (Integer/parseInt (read-line)))
|
||||||
|
|
||||||
|
(def bestand-alt (get lager artikel))
|
||||||
|
(def bestand-neu (- bestand-alt menge))
|
||||||
|
|
||||||
|
(def lager (dissoc lager artikel))
|
||||||
|
(def lager (assoc lager artikel bestand-neu))
|
||||||
|
|
||||||
|
(println "")
|
||||||
|
(println "Neuer Lagerbestand")
|
||||||
|
(println lager)
|
||||||
|
|
||||||
|
```
|
|
@ -1,3 +1,31 @@
|
||||||
# Lösung: Kontrolltrukturen: Lagerverwaltung, Teil 2
|
# Lösung: Kontrolltrukturen: Lagerverwaltung, Teil 2
|
||||||
|
|
||||||
!INCLUDESRC "../src/abzock-lager-2.clj" clojure
|
|
||||||
|
```$2#!/usr/bin/env -S clojure -M
|
||||||
|
|
||||||
|
(def lager {
|
||||||
|
:PS5 10
|
||||||
|
:GTX1090 20
|
||||||
|
:OEL 300
|
||||||
|
})
|
||||||
|
|
||||||
|
(println "Lagerverwaltung Abzock GmbH")
|
||||||
|
(println "Welcher Artikel wurde geliefert: ")
|
||||||
|
(def artikel (keyword (read-line)))
|
||||||
|
(println "Wieviel wurde ausgeliefert?")
|
||||||
|
(def menge (Integer/parseInt (read-line)))
|
||||||
|
|
||||||
|
(def bestand-alt (get lager artikel))
|
||||||
|
(def bestand-neu (- bestand-alt menge))
|
||||||
|
|
||||||
|
(if (< bestand-neu 0)
|
||||||
|
(println "Nicht genug Artikel vorhanden, du unwissendes Frischfleisch")
|
||||||
|
(do
|
||||||
|
(def lager (dissoc lager artikel))
|
||||||
|
(def lager (assoc lager artikel bestand-neu))))
|
||||||
|
|
||||||
|
(println "")
|
||||||
|
(println "Neuer Lagerbestand")
|
||||||
|
(println lager)
|
||||||
|
|
||||||
|
```
|
|
@ -1,3 +1,26 @@
|
||||||
# Lösung: Map und Reduce: Gewinnermittlung für die Abzock GmbH
|
# Lösung: Map und Reduce: Gewinnermittlung für die Abzock GmbH
|
||||||
|
|
||||||
!INCLUDESRC "../src/abzock-gewinn.clj" clojure
|
|
||||||
|
```$2#!/usr/bin/env -S clojure -M
|
||||||
|
|
||||||
|
(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 ]})
|
||||||
|
|
||||||
|
(def verkaufspreise {
|
||||||
|
:PS5 1239,
|
||||||
|
:GTX1090 1699,
|
||||||
|
:OEL 9 })
|
||||||
|
|
||||||
|
(println "Gewinnermittlung Abzock GmbH")
|
||||||
|
|
||||||
|
(defn summiere [stueckzahlen preise]
|
||||||
|
(doseq [[key values] stueckzahlen]
|
||||||
|
(println key
|
||||||
|
(reduce + (map #(* % (key preise)) values))
|
||||||
|
"EUR")))
|
||||||
|
|
||||||
|
(summiere verkaeufe-stueckzahlen verkaufspreise)
|
||||||
|
|
||||||
|
```
|
|
@ -1,3 +1,9 @@
|
||||||
# Lösung: Multi-Arity-Funktion
|
# Lösung: Multi-Arity-Funktion
|
||||||
|
|
||||||
!INCLUDESRC "../src/my-average.clj" clojure
|
|
||||||
|
```$2(defn my-average
|
||||||
|
([a b] (/ (+ a b) 2))
|
||||||
|
([a b c d] (/ (+ a b c d) 4))
|
||||||
|
([a b c d e f] (/ (+ a b c d e f) 6)))
|
||||||
|
|
||||||
|
```
|
|
@ -1,3 +1,11 @@
|
||||||
# Lösung: Funktion als Rückgabewert
|
# Lösung: Funktion als Rückgabewert
|
||||||
|
|
||||||
!INCLUDESRC "../src/plus-n-fn.clj" clojure
|
|
||||||
|
```$2(defn plus-n-fn
|
||||||
|
"Liefert eine Funktion zurück, die genau ein
|
||||||
|
Argument nimmt und dieses Argument zu
|
||||||
|
`n` addiert."
|
||||||
|
[n]
|
||||||
|
#(+ % n))
|
||||||
|
|
||||||
|
```
|
|
@ -1,3 +1,10 @@
|
||||||
# Lösung: apply und Funktionen als Übergabewerte
|
# Lösung: apply und Funktionen als Übergabewerte
|
||||||
|
|
||||||
!INCLUDESRC "../src/triple-apply.clj" clojure
|
|
||||||
|
```$2(defn triple-apply
|
||||||
|
"Wendet die Funktion `f` drei mal hintereinander auf die Argumente
|
||||||
|
`args` an und gibt die Summe der Ergebnisse zurück."
|
||||||
|
[f & args]
|
||||||
|
(+ (apply f args) (apply f args) (apply f args)))
|
||||||
|
|
||||||
|
```
|
|
@ -1,3 +1,9 @@
|
||||||
# Lösung: Vor- und Nachbedingung
|
# Lösung: Vor- und Nachbedingung
|
||||||
|
|
||||||
!INCLUDESRC "../src/sqrt.clj" clojure
|
|
||||||
|
```$2(defn sqrt [n]
|
||||||
|
{ :pre [(>= n 0)]
|
||||||
|
:post [(> % 0)]}
|
||||||
|
(Math/sqrt n))
|
||||||
|
|
||||||
|
```
|
|
@ -1,3 +1,14 @@
|
||||||
# Lösung: Tail-Recursion
|
# Lösung: Tail-Recursion
|
||||||
|
|
||||||
!INCLUDESRC "../src/prod-recur.clj" clojure
|
|
||||||
|
```$2(defn prod-recur
|
||||||
|
"Berechnet das Produkt einer Reihe von Zahlen `zahlen` unter
|
||||||
|
Verwendung von loop und recur."
|
||||||
|
[zahlen]
|
||||||
|
(loop [produkt 0
|
||||||
|
rest-liste zahlen]
|
||||||
|
(if (seq rest-liste)
|
||||||
|
(recur (* produkt (first rest-liste)) (rest rest-liste))
|
||||||
|
produkt)))
|
||||||
|
|
||||||
|
```
|
|
@ -1,3 +1,36 @@
|
||||||
# Lösung: Was hoppelt den da?
|
# Lösung: Was hoppelt den da?
|
||||||
|
|
||||||
!INCLUDESRC "../src/kaninchen.clj" clojure
|
|
||||||
|
```$2#!/usr/bin/env -S clojure -M
|
||||||
|
|
||||||
|
(def generationen 14)
|
||||||
|
|
||||||
|
(defn fib
|
||||||
|
"Berechnet die Fibonacci-Zahl nach `n` Schritten."
|
||||||
|
[n]
|
||||||
|
{ :pre [(>= n 0)]
|
||||||
|
:post [(>= % 0)] }
|
||||||
|
(loop [n_2 0 n_1 1 step n]
|
||||||
|
(cond
|
||||||
|
(= step 0)
|
||||||
|
n_2
|
||||||
|
:else
|
||||||
|
(recur n_1 (+ n_2 n_1) (dec step)))))
|
||||||
|
|
||||||
|
(defn fibs
|
||||||
|
"Berechnet alle Fibonacci-Zahlen bis `n` einschießlich
|
||||||
|
und gibt sie als Vektor zurück."
|
||||||
|
[n]
|
||||||
|
{ :pre [(>= n 0)] }
|
||||||
|
|
||||||
|
(let [v (range (inc n))]
|
||||||
|
(map #(fib %) v)))
|
||||||
|
|
||||||
|
(defn kaninchen
|
||||||
|
[]
|
||||||
|
(println "Nach" generationen "Generationen haben wir" (fib generationen) "Kaninchen")
|
||||||
|
(println "Die Population entwickelt sich so:" (fibs generationen)))
|
||||||
|
|
||||||
|
(kaninchen)
|
||||||
|
|
||||||
|
```
|
|
@ -1,3 +1,13 @@
|
||||||
# Lösung: cond
|
# Lösung: cond
|
||||||
|
|
||||||
!INCLUDESRC "../src/test-positive.clj" clojure
|
|
||||||
|
```$2(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."
|
||||||
|
[correct guess]
|
||||||
|
(cond (= guess 0) "gleich"
|
||||||
|
(< guess 0) "kleiner"
|
||||||
|
(> guess 0) "größer"))
|
||||||
|
|
||||||
|
```
|
|
@ -1,3 +1,13 @@
|
||||||
# Lösung: Ausnahmebehandlung
|
# Lösung: Ausnahmebehandlung
|
||||||
|
|
||||||
!INCLUDESRC "../src/number-formatter.clj" clojure
|
|
||||||
|
```$2(defn number-formatter
|
||||||
|
"Konvertiert den String `string` in einen Integer-Wert.
|
||||||
|
Wenn die Konvertierung fehlschlägt, wird -1 zurück
|
||||||
|
gegeben."
|
||||||
|
[string]
|
||||||
|
(try
|
||||||
|
(Integer/parseInt string)
|
||||||
|
(catch NumberFormatException nfe -1)))
|
||||||
|
|
||||||
|
```
|
|
@ -1,3 +1,10 @@
|
||||||
# Lösung: reduce
|
# Lösung: reduce
|
||||||
|
|
||||||
!INCLUDESRC "../src/prod-reduce.clj" clojure
|
|
||||||
|
```$2(defn prod-reduce
|
||||||
|
"Berechnet das Produkt einer Reihe von Zahlen `zahlen` unter
|
||||||
|
Verwendung von reduce."
|
||||||
|
[zahlen]
|
||||||
|
(reduce * zahlen))
|
||||||
|
|
||||||
|
```
|
|
@ -1,3 +1,12 @@
|
||||||
# Lösung: mapping und cycle
|
# Lösung: mapping und cycle
|
||||||
|
|
||||||
!INCLUDESRC "../src/map-cycle.clj" clojure
|
|
||||||
|
```$2(defn map-cycle
|
||||||
|
"Erzeugt eine unendliche Sequenz der Zahlen `zahlen`
|
||||||
|
und berechnet für jede Zahl deren Doppeltes und zieht dann
|
||||||
|
1 ab. Vom Ergebnis werden `n` Elemente zurück
|
||||||
|
gegeben."
|
||||||
|
[n & zahlen]
|
||||||
|
(take n (map #(dec (* % 2)) (cycle zahlen))))
|
||||||
|
|
||||||
|
```
|
|
@ -1,3 +1,11 @@
|
||||||
# Lösung: take-while
|
# Lösung: take-while
|
||||||
|
|
||||||
!INCLUDESRC "../src/below-zero.clj" clojure
|
|
||||||
|
```$2(defn below-zero
|
||||||
|
"Läuft über `data` und gibt die Elemente bis zum ersten
|
||||||
|
Auftreten eines Wertes >= 0 zurück."
|
||||||
|
[data]
|
||||||
|
[data]
|
||||||
|
(take-while #(< % 0) data))
|
||||||
|
|
||||||
|
```
|
|
@ -1,3 +1,14 @@
|
||||||
# Lösung: filter
|
# Lösung: filter
|
||||||
|
|
||||||
!INCLUDESRC "../src/filter-positive.clj" clojure
|
|
||||||
|
```$2(defn filter-positive
|
||||||
|
"Läuft über `data` und gibt die Elemente, deren Wert >= 0 ist zurück."
|
||||||
|
[data]
|
||||||
|
(filter #(>= % 0) data))
|
||||||
|
|
||||||
|
; Testfälle
|
||||||
|
(assert (= [1 2 3 4 0 5 6] (filter-positive [1 2 3 4 0 5 6])))
|
||||||
|
(assert (= [2 3] (filter-positive '(-1 2 3 -4))))
|
||||||
|
(assert (= [42 0 42] (filter-positive '(42 -23 0 -23 42))))
|
||||||
|
|
||||||
|
```
|
Loading…
Reference in New Issue