i

Eine Fallunterscheidung

Zeichenketten vergleichen

Wir betrachten hier die Situation, dass Datumsangaben durch Zeichenketten dargestellt werden. Das kommt in der Praxis oft vor, wenn eine Datumsangabe textuell in ein Eingabefeld eingetragen wird.

Zeichenketten kann man - genau wie Zahlen - vergleichen. Der folgende Dialog in der REPL zeigt einige Beispiele

> "Hund" < "Katze"
True : Bool
> "hund" < "Katze"
False : Bool
> "hund" < "katze"
True : Bool

Aufgabe 1

Probiere das selbst aus. Versuche mit weiteren Experimenten herauszufinden, wie der Vergleich funktioniert.

Aufgabe 2

Wenn Datumsangaben durch Zeichenketten vom Typ String dargestellt werden, dann ist hierüber auch ein Vergleich möglich. Analysiere die folgenden Beispiele. Kläre mit weiteren Experimenten, welches Datumsformat für einen Vergleich günstiger ist - das Format "tt.mm.jjjj" oder das Format "jjjj-mm-tt" (hier stehen t, m und j für irgendwelche sinnvollen Ziffern bei Datumsangaben).

> "20.1.2012" <= "01.01.2013"
False : Bool
> "01.01.2013" <= "21.02.2014"
True : Bool
> "2011-03-03" <= "2008-12-31"
False : Bool

Das Minimum bestimmen

Hier soll jetzt das ältere von zwei Datumsangaben bestimmt werden, die im Format Format "jjjj-mm-tt" angegeben sind.

Übergabe: 
- Datum 1: "2011-03-03"
- Datum 2: "2008-12-31"
Rückgabe: 
- Minimum der beiden Daten (d.h. am ältesten): "2008-12-31"

Zur Implementierung mit einer Funktion nutzt man einen if-then-else-Ausdruck.

minimum a b =
    if a <= b then a else b
> minimum 3 5
3 : number
> minimum "2011-03-03" "2008-12-31"
"2008-12-31" : String
> minimum "hund" "Katze"
"Katze" : String

Aufgabe 3

(a) Analysiere und erkläre die Funktionsdefinition.

(b) Interessant ist, dass die Funktion minimum auf Zahlen und Zeichenketten angewandt werden kann. Probiere das mit weiteren Beispielen in der REPL aus.

(c) Entwickle analog eine Funktion maximum und teste sie in der REPL.

Einen Vergleich darstellen

Mit der Funktion vergleich soll der Vergleich von zwei Zeichenketten textuell dargestellt werden. Hier zwei mögliche Implementierungen.

Version 1:

vergleich a b =
    if a <= b then
        a ++ " <= " ++ b
    else
        a ++ " >= " ++ b

Version 2:

vergleich a b =
    a ++ (if a <= b then " <= " else " >= ") ++ b

Aufgabe 4

(a) Teste, was die Funktion vergleich in den beiden Versionen leistet.

(b) Erkläre anhand von Version 2, dass man einen if-Ausdruck wie andere Ausdrücke auch als Teilausdruck verwenden kann.

Aufgabe 5

Mit der Funktion vergleichDaten sollen Datumsangaben verglichen werden. 3 Fälle sind dabei mögliche: Datum 1 liegt vor Datum 2 oder Datum 1 ist identisch mit Datum 2 oder Datum1 liegt nach Datum 2.

Übergabe: 
- Datum 1: "2011-03-03"
- Datum 2: "2011-03-03"
Rückgabe: 
- Vergleich der beiden Daten: "2011-03-03 ist identisch mit 2011-03-03"

Entwickle eine Definition für die Funktion vergleichDaten und teste sie in der REPL. Beachte, dass du hier mehrere Fallunterscheidungen kombinieren musst.

Suche

v
8.2.2.6.2.1.1
inf-schule.de/deklarativ/fp_elm/elm_programme/fallunterscheidungen/datumsangaben/lernstrecke/version1
inf-schule.de/8.2.2.6.2.1.1
inf-schule.de/@/page/IlKjvv2pyEdh5nAw

Rückmeldung geben