Experimente in der REPL
Teilbarkeit überprüfen
Bei der Bestimmung von Schaltjahren kann man so vorgehen: Man prüft, ob ein vorgegebenes Jahr durch $4$, $100$ und $400$ ohne Rest teilbar ist.
In Elm kann man Divisionsreste mit der vordefinierten Funktion modBy
ermitteln.
Aufgabe 1
Führe Dialoge in der REPL wie dem folgenden. Deute die Ergebnisse. Beschreibe das Verhalten der Funktion modBy
.
> modBy 4 2024
...
> modBy 100 2024
...
> modBy 100 2100
...
> modBy 400 2100
...
Bedingungen auswerten
Bei der Bestimmung von Schaltjahren überprüft man, ob ein vorgegebenes Jahr durch $4$, $100$ und $400$ ohne Rest teilbar ist. Das lässt sich in Elm mit Bedingungen umsetzen.
Aufgabe 2
(a) Hier wird mit ==
jeweils überprüft, ob der Divisionsrest gleich $0$ ist. Teste selbst.
> (modBy 4 2024) == 0
...
> (modBy 100 2024) == 0
...
> (modBy 400 2024) == 0
...
(b) In dem Dialog in (a) erhält man die Ergebnisse True : Bool
und False : Bool
. Deute diese Ergebnisse.
Bedingungen kombinieren
Mit den logischen Operatoren not
(für das logische "nicht"), &&
(für das logische "und")
und ||
(für das logische "oder") kann man Bedingungen miteinander verknüpfen.
Aufgabe 3
Teste die logischen Ausdrücke und erkläre, was sie bedeuten und wie das Ergebnis zustande kommt.
> (modBy 4 2100 == 0) && (modBy 100 2100 == 0)
...
> not (modBy 100 2024 == 0)
...
> (modBy 4 2100 == 0) && (not (modBy 100 2100 == 0))
...
> (modBy 4 2024 == 0) || (modBy 100 2024 == 0)
...
Die Schaltjahresberechnung mit kombinierten Bedingungen lösen
Wenn man die Bedingungen über Divisionsreste geeignet kombiniert, dann lässt sich damit die Schaltjahresbeechnung durchführen.
Aufgabe 4
Im folgenden Dialog müssen die Fragezeichen durch die richtigen logischen Operatoren ersetzt werden, um korrekt zu überprüfen, ob die Jahre Schaltjahre sind. Entscheide welche Operatoren das sein müssen und überprüfe deine Vermutung dann in der REPL.
> (modBy 400 2023 == 0) ??? ((modBy 4 2023 == 0) ??? (??? (modBy 100 2023 == 0)))
...
> (modBy 400 2024 == 0) ??? ((modBy 4 2024 == 0) ??? (??? (modBy 100 2024 == 0)))
...
> (modBy 400 2100 == 0) ??? ((modBy 4 2100 == 0) ??? (??? (modBy 100 2100 == 0)))
...
> (modBy 400 2400 == 0) ??? ((modBy 4 2400 == 0) ??? (??? (modBy 100 2400 == 0)))
...