i

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.

Farben des pH-Indikators Bromthymolblau[1]
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.
A1. Analysiere die folgende Racket-Funktion und erweitere diese so, dass alle drei Tests bestanden werden.
    ;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

Suche

v
100.137.3.1 Fallunterscheidungen in Racket
Kopieren durch Anklicken

Rückmeldung geben