Fallunterscheidungen in Racket
Fallunterscheidungen
Möchte man in der Chemie den pH-Wert von Lösungen bestimmen, so kann dies mittels eines pH-Indikators erfolgen. Gibt man einen pH-Indikator in eine Lösung, so nimmt dieser in Abhängigkeit des pH-Werts unterschiedliche Farben an. Ein gängiger pH-Indikator ist das Bromthymolblau . Die untere Abbildung zeigt das Farbspektrum an, dass Bromthymolblau je nach pH-Wert annimmt.
Der Indikator gibt uns eine aussagekräftige Auskunft darüber, ob die untersuchte Lösung einen sauren (pH < 7), einen neutralen (pH = 7) oder einen alkalischen/basischen (pH > 7) pH-Zustand aufweist.Die Racket-Funktion bromthymolblau-pHZustand soll genau diese Information abbilden. Übergeben wir der Funktion die entsprechende Farbe, soll diese uns den pH-Zustand zurückliefern.
Aufgabe 1. Bestimmung pH-Zustand durch Bromthymolblau
Um diese Funktion umsetzten zu können, benötigen wir innerhalb der Funktion eine Fallunterscheidung. ;Bestimmt den pH-Zustand anhand der Färbung des pH-Indikators Bromthymolblau
(: bromthymolblau-pHZustand (string -> string))
(check-expect (bromthymolblau-pHZustand "gelb") "sauer")
(check-expect (bromthymolblau-pHZustand "grün") "neutral")
(check-expect (bromthymolblau-pHZustand "blau") "alkalisch")
(define bromthymolblau-pHZustand
(lambda (farbe)
(cond
([string=? "gelb" farbe] "sauer")
([string=? "grün" farbe] "neutral")
)))
Aufgabe 2. Der else-Fall
A2.1
Rufe die Funktion bromthymolblau-pHZustand mit dem String "rot" auf.
Welche Ausgabe erhälst du in der REPL?
Eine Möglichkeit diesen Fehler abzufangen ist einen weiteren Fall in $(cond ...)$ einzufügen, hierfür verwenden wir das Schlüsselwort $else$.
(cond
...
...
(else ...))
A2.2 Ergänze deine Funktion so, dass jede beliebige String-Übergabe eine Rückgabe liefert.
Aufgabe 3. Bestimmung von MSS-Punkten
Das Rheinland-Pfälzische Ministerium für Bildung stellte für die Bewertung der schriftlichen Abiturprüfungen im Jahr 2025 folgenden Vorgaben zur Verfügung:MSS-Notenpunkte | mind. zu erreichende Prozent |
---|---|
15 | 95 |
14 | 90 |
13 | 85 |
12 | 80 |
11 | 75 |
10 | 70 |
9 | 65 |
8 | 60 |
7 | 55 |
6 | 50 |
5 | 45 |
4 | 40 |
3 | 33 |
2 | 27 |
1 | 20 |
0 | 0 |
A3. Schreibe eine Funktion prozent-zu-mss, welche Prozentpunkte (ohne Komma) übergeben bekommt und die entsprechenden MSS-Notenpunkte zurückliefert.
Zu merken: Fallunterscheidungen
Eine Fallunterscheidung in Racket ist wie folgt aufgebaut:
- Das Schlüsselwort cond gibt an, dass nun verschiedenen Fälle/Conditions folgen.
- In den eckigen Klammern [..] steht jeweils ein Ausdruck, welcher einen Wahrheitswert zurückliefert.
- Je nach Bedarf kann auch ein else-Fall genutzt werden.
(cond
([funkionsname parameter1 parameter2] rückgabe-WennAusdruck-True)
([...] ...)
...
(else rückgabe-WennAlleAnderenAusdrücke-False)
)
Quellen
- [1]: Bromthymolblau - Urheber: DOJ - Lizenz: inf-schule.de