Beispiel - Schaltjahre

Bestimmung von Schaltjahren

Kalenderblatt: Mittwoch, 29. Februar

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.

<Black-Box-Diagramm><Funktionsname>istSchaltjahr</Funktionsname><Übergaben><Übergabe><Wert>2016</Wert><Variable>jahr</Variable></Übergabe></Übergaben><Rückgabe><Text>return</Text><Wert>True</Wert></Rückgabe></Black-Box-Diagramm>

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?

Struktogramm zum Algorithmus istSchaltjahr

(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.

Auswertung des Terms (jahr % 400 == 0) or ((jahr % 4 == 0) and not (jahr % 100 == 0)) für jahr->2016

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.

X

Fehler melden

X

Suche