i

Geschachtelte Fallunterscheidungen

Datumsangaben umwandeln

Ziel ist es hier, Datumsangaben vom Punkt-Format in das internationale Standardformat umzuwandeln:

Umwandlung: Punktformat -> Standardformat
Fall A:
26.12.2013 -> 2013-12-26
Fall B:
21.2.2013  -> 2013-02-21
Fall C:
6.12.2013  -> 2013-12-06
Fall D:
6.2.2013   -> 2013-02-06

Teilbereiche einer Zeichenkette bestimmen

Bei einer Implementierung muss man auf bestimmte Zeichen oder auch Teilbereiche einer Zeichenkette zugreifen. Im Abschnitt Modularisierung wurden hierfür geeignete Funktionen entwickelt und in einem Modul Teilzeichenketten.elm bereitgestellt.

module Teilzeichenketten exposing (..)

zeichenAnPos: Int -> String -> String
zeichenAnPos n text =
    String.slice (n-1) n text

zeichenVorPos: Int -> String -> String
zeichenVorPos n text =
    String.slice 0 (n-1) text

zeichenNachPos: Int -> String -> String
zeichenNachPos n text =
    String.slice n (String.length text) text

zeichenZwischenPos: Int -> Int -> String -> String
zeichenZwischenPos n m text =
    String.slice n (m-1) text

Aufgabe 1

Teste noch einmal die Funktionen aus dem Modul Teilzeichenketten.elm in der REPL mit geeigneten Funktionsaufrufen.

> import Teilzeichenketten exposing (..)
> zeichenAnPos 3 "26.12.2013"
...
> zeichenVorPos 3 "26.12.2013"
...
> zeichenNachPos 6 "26.12.2013"
...
> zeichenZwischenPos 3 6 "26.12.2013"
...

Umwandlungsfunktionen entwickeln

Wir betrachten hier die oben aufgelisteten Fälle einzeln und entwickeln für jeden Fall eine passende Umwandlungsfunktion. Hier eine Implementierung für Fall A:

module Datumformat exposing (..)

import Teilzeichenketten exposing (..)

standardformatFallA: String -> String
standardformatFallA datum =
    (zeichenNachPos 6 datum) ++ "-" ++ (zeichenZwischenPos 3 6 datum) ++ "-" ++ (zeichenVorPos 3 datum)
> import Datumformat exposing (..)
> standardformatFallA "26.01.2013"
"2013-01-26" : String

Aufgabe 2

(a) Teste selbst diese Umwandlungsfunktion mit geeigneten Funktionsaufrufen.

(b) Entwickle analog Umwandlungsfunktionen für die Fälle B, C und D. Achte darauf, dass hier führende Nullen hinzugefügt werden müssen.

Alle Fälle mit einer geschachtelten Fallunterscheidung betrachten

Für die Unterscheidung der 4 Fälle braucht man mehrere Fallunterscheidungen, die man ineinander schachtelt. Hier der Anfang einer möglichen Implementierung einer Funktion standardformat:

standardformat datum =
    if (zeichenAnPos 3 datum == ".") && (zeichenAnPos 6 datum == ".") then
        standardformatFallA datum
    else 
        if (zeichenAnPos 3 datum == ".") && (zeichenAnPos 5 datum == ".") then
            ...
        else
            ...

Aufgabe 3

Ergänze die Funktionsdefinition und teste die Funktion mit mehreren Funktionsaufrufen.

Aufgabe 4

Auch diese Schachtelung von Fallunterscheidungen ist möglich, wenn man voraussetzt, dass nur korrekte Datumsangaben im Punktformat verarbeitet werden sollen. Ergänze die Funktionsdefinition und teste sie mit allen möglichen Fällen.

standardformat datum =
    if (zeichenAnPos 3 datum == ".") then
        if (zeichenAnPos 6 datum == ".") then
            standardformatFallA datum
        else
            ...
    else 
        if (zeichenAnPos 5 datum == ".") then
            ...
        else
            ...

Suche

v
110.2.6.2.1.2
inf-schule.de/fp_elm_alteversion/elm_programme/fallunterscheidungen/datumsangaben/lernstrecke/version2
inf-schule.de/110.2.6.2.1.2
inf-schule.de/@/page/76EeOgryoqGdwSEG

Rückmeldung geben