i

Beispiel - Schaltjahre

Die Ermittlung von Schaltjahren mit einer Funktionsdefinition implementieren

Wir betrachten hier noch einmal die Ermittlung von Schaltjahren.

Kalenderblatt

Die Erde benötigt für ihren Weg um die Sonne etwas mehr als 365 Tage - nämlich 365 Tage, 5 Stunden, 48 Minuten und 45,25 Sekunden. Das ist knapp ein Viertel Tag länger als die 365 Tage eines normalen Kalenderjahres. Um den Unterschied auszugleichen, wird alle 4 Jahre ein zusätzlicher Tag im Kalenderjahr (der 29. Februar als Schalttag) eingefügt. Da das aber etwas zu viel ist, verzichtet man alle 100 Jahre auf den Schalttag. Alle 400 Jahre weicht man von dieser Verzichtregel ab und fügt den Schalttag doch ein.

Ausgehend von Berechnungen mit konkreten Datenwerten entwickeln wir hier eine Funktion, die diese Berechnungen für beliebige Datenwerte ausführt.

> (modBy 400 2023 == 0) || ((modBy 4 2023 == 0) && (not (modBy 100 2023 == 0)))
False : Bool
> (modBy 400 2024 == 0) || ((modBy 4 2024 == 0) && (not (modBy 100 2024 == 0)))
True : Bool
> (modBy 400 2100 == 0) || ((modBy 4 2100 == 0) && (not (modBy 100 2100 == 0)))
False : Bool
> (modBy 400 2400 == 0) || ((modBy 4 2400 == 0) && (not (modBy 100 2400 == 0)))
True : Bool

Wir konzipieren eine Funktion istSchaltjahr für folgende Übergabe-Rückgabe-Situation:

Übergabe: 
- Jahreszahl: 2024
Rückgabe: 
- Wahrheitswert von "Es liegt ein Schaltjahr vor": wahr

Aufgabe 1

Erkläre die Signatur der Funktion istSchaltjahr. Ergänze auch die fehlenden Angaben in den Beispielaufrufen.

Signatur:
istSchaltjahr: Int -> Bool 
Beispiele:
istSchaltjahr 2023 -> ...
istSchaltjahr 2024 -> ...
istSchaltjahr 2100 -> ...
istSchaltjahr 2400 -> ...

Aufgabe 2

Teste die Implementierung der Funktion istSchaltjahr mit Funktionsaufrufen. Erkläre den Ausdruck in der Funktionsdefinition.

istSchaltjahr jahr =
    (modBy 400 jahr == 0) || ((modBy 4 jahr == 0) && (not (modBy 100 jahr == 0)))

Suche

v
110.2.2.2.1.3
inf-schule.de/fp_elm_alteversion/elm_programme/funktionen/beispiele/lernstrecke/schaltjahre
inf-schule.de/110.2.2.2.1.3
inf-schule.de/@/page/iMBvwVtQf1agrZCL

Rückmeldung geben