Beispiel - Schaltjahre
Bestimmung von Schaltjahren
Ein Jahr dauert nach dem Sonnenkalender etwas mehr als 365 Tage oder genauer: 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 (der Schalttag) im Kalenderjahr am 29. Februar 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.
Aufgabe 1
Welches der folgenden Jahre ist (k)ein Schaltjahr: 2012, 2018, 2100, 2800, 3000, 3012?
Ein Schaltjahresrechner
Mit einer Funktion soll eine gegebene Jahreszahl daraufhin überprüft werden, ob es sich um ein
Schaltjahr handelt oder nicht. Bei der Übergabe einer Jahreszahl soll als Ergebnis einer der
Wahrheitswerte True
oder False
zurückgegeben werden.
Bevor die Funktionsdefinition geschrieben wird, sollte man erst einmal Vorüberlegungen anstellen.
Aufgabe 2
(a) Mit dem folgenden Struktogramm soll der Ablauf zur Bestimmung von Schaltjahren präzisiert werden.
Es fehlen aber noch einige Angaben. Welche Wahrheitswerte (True
bzw. False
)
müssen anstelle der drei Punkte stehen?
(b) Entwickle eine zum Struktogramm passende Funktionsdefinition und teste sie mit geeigneten Daten.
def istSchaltjahr(jahr):
...
return ergebnis
Aufgabe 3
Man kann das Ergebnis bei der Schaltjahresbestimmung auch direkt (d.h. ohne Fallunterscheidungen) bestimmen. Anstelle der drei Punkte ... in der Funktionsdefinition in Aufgabe 2(b) muss hier nur eine passende Anweisung mit einem logischen Berechnungsausdruck eingesetzt werden. Hier sind einige Vorschläge. Welche passen / passen nicht?
ergebnis = (jahr % 4 == 0) and (jahr % 100 != 0) and (jahr % 400 == 0)
ergebnis = (jahr % 4 == 0) or (jahr % 100 != 0) or (jahr % 400 == 0)
ergebnis = (jahr % 400 == 0) or ((jahr % 4 == 0) and (jahr % 100 != 0))
ergebnis = (jahr % 400 == 0) or ((jahr % 4 == 0) and not (jahr % 100 == 0))
Teste deine Vorschläge.
Wahrheitswerte berechnen
Man kann auch rechnerisch überprüfen, ob ein logischer Berechnungsausdruck passt. Betrachte hierzu die folgenden Bedingungen.
A: "die Jahreszahl ist durch 4 teilbar" bzw.jahr % 4 == 0
B: "die Jahreszahl ist durch 100 teilbar" bzw.jahr % 100 == 0
C: "die Jahreszahl ist durch 400 teilbar" bzw.jahr % 400 == 0
Geprüft werden soll, ob der logische Berechnungsausdruck C or (A and not B)
für alle
Jahreszahlen richtig erfasst, ob es sich um ein Schaltjahr handelt.
Beispiel:
Wir werten den Berechnungsausdruck für den Variablenzustand jahr -> 2016
aus, indem
wir die logischen Operationen gemäß den Tabellen aus dem nächsten Abschnitt anwenden.
Aufgabe 4
Bestimme entsprechend die fehlenden Einträge in der Tabelle.
jahr | A: jahr % 400 == 0 | B: jahr % 4 == 0 | C: jahr % 100 == 0 | C or (A and not B) |
---|---|---|---|---|
2016 | False | True | False | True |
2018 | ||||
2100 | ||||
2400 |
Die Ergebnisse sollten dann belegen, dass sich der logische Berechnungsausdruck als Bedingung zur Beschreibung von Schaltjahren eignet.