Datumsberechnungen
Die Schaltjahresfunktion berechnen
Die Schaltjahresfunktion schaltjahr
lässt sich mit einem Python-Programm berechnen. Der Quelltext zeigt eine Funktionsdefinition und einen typischen Funktionsaufruf. Der %-Operator wird benutzt, um den Rest bei einer ganzzahligen Divion zu berechnen (Bsp.: 12%5 = 2).
# Funktionsdefinitionen
def schaltjahr(jahr):
if (jahr % 400 == 0) or ((jahr % 4 == 0) and not (jahr % 100 == 0)):
return True
else:
return False
# Funktionsaufrufe
print(schaltjahr(2024))
Aufgabe 1
(a) Schaue dir das Programm zuerst genau an und deute den Quelltext.
(b) Wenn du den grün markierten Pfeil in der oberen rechten Ecke anklicks, dann wird der Funktionsaufruf (im Quelltext ganz unten) ausgeführt. Ergänze weitere Funktionsaufrufe und überprüfe so, ob die Funktion schaltjahr
korrekt programmiert ist.
Die Anzahl der Tage im Monat berechnen
Auch die Funktion anzahlTageImMonat
lässt sich mit einem Python-Programm berechnen.
xxxxxxxxxx
# Funktionsdefinitionen
def schaltjahr(jahr):
if (jahr % 400 == 0) or ((jahr % 4 == 0) and not (jahr % 100 == 0)):
return True
else:
return False
def anzahlTageImMonat(monat, jahr):
if monat in [1, 3, 5, 7, 8, 10, 12]:
anzahl = 31
elif monat in [4, 6, 9, 11]:
anzahl = 30
elif monat == 2:
if schaltjahr(jahr) == True:
anzahl = 29
else:
anzahl = 28
else:
anzahl = None
return anzahl
# Funktionsaufrufe
print(schaltjahr(2024))
print(anzahlTageImMonat(2, 2024))
Aufgabe 2
(a) Analysiere das Programm und erkläre den Quelltext.
(b) Wenn du den grün markierten Pfeil in der oberen rechten Ecke anklicks, dann werden die Funktionsaufrufe (im Quelltext ganz unten) ausgeführt. Ergänze weitere Funktionsaufrufe und überprüfe so, ob die Funktion anzahlTageImMonat
korrekt programmiert ist.
Datumsberechnungen mit Funktionen durchführen
Das folgende Programm nutzt weitere Funktionen für Datumsberechnungen.
xxxxxxxxxx
# Funktionsdefinitionen
def schaltjahr(jahr):
if (jahr % 400 == 0) or ((jahr % 4 == 0) and not (jahr % 100 == 0)):
return True
else:
return False
def anzahlTageImMonat(monat, jahr):
if monat in [1, 3, 5, 7, 8, 10, 12]:
anzahl = 31
elif monat in [4, 6, 9, 11]:
anzahl = 30
elif monat == 2:
if schaltjahr(jahr) == True:
anzahl = 29
else:
anzahl = 28
else:
anzahl = None
return anzahl
def naechstesDatum(datum):
(tag, monat, jahr) = datum
if tag < anzahlTageImMonat(monat, jahr):
tag = tag + 1
elif monat < 12:
tag = 1
monat = monat + 1
else:
tag = 1
monat = 1
jahr = jahr + 1
return (tag, monat, jahr)
def anzahlTage(datum1, datum2):
anzahl = 0
datum = datum1
while datum != datum2:
datum = naechstesDatum(datum)
anzahl = anzahl + 1
return anzahl
def doppeltSoAlt(datumGeburt, datumHeute):
anzahl = anzahlTage(datumGeburt, datumHeute)
datum = datumHeute
while anzahl > 0:
# datum = ...
# anzahl = ...
return datum
# Funktionsaufrufe
print(schaltjahr(2024))
print(anzahlTageImMonat(2, 2024))
print(naechstesDatum((28, 2, 2024)))
print(anzahlTage((28, 2, 2022), (28, 2, 2023)))
# print(doppeltSoAlt((28, 2, 2008), (11, 7, 2022)))
Aufgabe 3
(a) Teste zunächst das Programm. Ergänze weitere analoge Funktionsaufrufe.
(b) Beschreibe in Worten, was die Funktionen naechstesDatum
und anzahlTage
leisten.
(c) Für Experten: Die Definition der Funktion doppeltSoAlt
ist noch nicht ganz fertig erstellt. Die Teile hinter dem #-Symbol müssen noch ergänzt werden. Zum Testen muss das #-Symbol vor den entsprechenden Funktionsaufruf entfernt werden. Vervollständige das Programm.
Aufgabe 4
Verdeutliche nochmal die folgenden Begriffe und Zusammenhänge im aktuellen Kontext.
Zusammenfassung
Die Zuordnungsvorschrift einer Funktion muss keine Funktionsgleichung von Typ
Es gibt sogar Funktionen, für die man die Zuordnungsvorschrift nicht einmal mit einem Programm / Algorithmus beschreiben kann (siehe z.B. Fleißige Biber).