Übungen
Aufgabe 1
Möchte man die Adresse einer Person verwalten, dann kann man dies mit Hilfe eines Records oder eines Tupels tun.
(a) Entwickle eine Implementierung zur Verwaltung von Adressen als Records.
(b) Entwickle eine Implementierung zur Verwaltung von Adressen als Tupel.
(c) Vergleiche die beiden Implementierungen und erläutere Vor- und Nachteile. Leite daraus ab, wann man welches Konzept bevorzugen sollte.
Aufgabe 2
Betrachte einen Datensatz zu einem Flug in die Ferien.
Nutze die folgende Implementierung.
module Flugdaten exposing (..)
type alias Datum = (Int, Int, Int)
type alias Zeit = (Int, Int)
type alias Flugdaten =
{ datum: Datum
, von: String
, nach: String
, abflug: Zeit
, ankunft: Zeit
, flugzeug: String
}
meinFerienflug: Flugdaten
meinFerienflug =
{ datum = (12, 7, 2023)
, von = "Frankfurt"
, nach = "Malaga"
, abflug = (9, 15)
, ankunft = (12, 10)
, flugzeug = "AIRBUS A321"
}
(a) Ergänze und teste die fehlenden Ausdrücke im REPL-Dialog zum Zugriff auf einzelne Daten des vorgegebenen Datensatzes.
import Flugdaten exposing (..)
> ...
(12,7,2023) : Datum
> ...
"Malaga" : String
> ...
(12, 10) : Zeit
> ...
12 : Int
(b) Entwickle eine Funktion, mit der man die Flugdauer aus den Flugdaten bestimmen kann.
Aufgabe 3
Die Zeugnisnoten deiner MINT-Fächer bilden einen Datensatz.
Mathematik: 1 Physik: 2 Chemie: 2 Biologie: 4 Informatik: 1
(a) Entwickle eine Implementierung zur Verwaltung solcher MINT-Noten.
(b) Entwickle eine Funktion, mit der man die Durchschnittsnote der MINT-Fächer bestimmen kann.
(c) Optionaler Exkurs: Hier würde sich auch die Benutzung von Dict anbieten, um die Noten zu speichern. Recherchiere unter https://package.elm-lang.org/packages/elm/core/latest/Dict wie dies umgesetzt werden könnte und entwickle eine alternative Implementierung.
Aufgabe 4
Bei Zeitangaben soll die Folgezeit bestimmt werden.
12:44 -> 12:45 05:59 -> 06:00 ...
(a) Entwickle eine Funktion, die die Folgezeit berechnet. Nutze dazu Tupel.
(b) Entwickle eine analoge Implementierung mit Records.
(c) Optional: Entwickle eine Funktion, die das Folge-Datum berechnet. Nutze dazu Tupel oder Records und begründe deine Wahl. Entscheide, ob du die Schaltjahre berücksichtigen möchtest.
11.07.2023 -> 12.07.2023 31.12.2023 -> 01.01.2024 28.02.2024 -> 29.02.2024 ...