Beispiel - Tage zählen
Tage zählen
Wie viele Tage dauert es noch, bis du 18 (...) Jahre alt wirst / den Führerschein hast / das Abitur hast / ...?
Wenn man solche Fragen beantworten möchte, dann muss man Tage im Kalender zählen.
Quelle: http://www.schulferien.org/kalender/2012/kalender_2012.html
Aufgabe 1
(a) Gehe vom 15.01.2012 aus. Wie viele Tage sind es es bis zum Ferienbeginn am 30.06.2012?
(b) Kann man die Tage zwischen zwei Datumsangaben auch berechnen? Welche Schwierigkeiten treten dabei auf?
Bausteine zum Tagezählen
Ziel ist es, ein Programm zu entwickeln, das einem das mühsame Abzählen von Tagen übernimmt.
Die folgenden Funktionen sollen dir bei der Entwicklung des Programms helfen.
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 schaltjahr(jahr):
anzahl = 29
else:
anzahl = 28
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)
Aufgabe 2
(a) Speichere die Funktionen in einer Datei ab und führe sie in Python einmal aus. Teste anschließend - wie gezeigt - die Funktionen im Ausführfenster mit mehreren möglichst sinnvollen Funktionsaufrufen. Dokumentiere auch die erzielten Ergebnisse.
>>> schaltjahr(2012)
True
(b) Fertige zu jeder Funktion ein Black-Box-Diagramm an. Mit diesen Diagrammen soll das Verhalten der Funktionen beschrieben werden.
(c) Mit den Funktionen kannst du jetzt das eingangs beschriebene Problem lösen. Ergänze hierzu die Funktionsdefinitionen um ein Hauptprogramm. Die Idee dahinter könnte so beschrieben werden. Von einem Startdatum aus wird immer wieder das nächste Datum bestimmt, bis das Zieldatum erreicht ist. Mit einem Zähler werden die hierfür benötigten Schritte ermittelt.
def schaltjahr(jahr):
# s.o.
def anzahlTageImMonat(monat, jahr):
# s.o.
def naechstesDatum(datum):
# s.o.
# Initialisierung
datumStart = (15, 1, 2012)
datumZiel = (16, 4, 2015)
# Verarbeitung
...
# Ausgabe
print("Startdatum:", datumStart)
print("Zieldatum:", datumZiel)
print("Anzahl der Tage:", anzahlTage)
Aufgabe 3
(a) Löse auch das folgende Zählproblem mit den oben gezeigten Funktionsbausteinen: Gegeben ist ein Startdatum. Gegeben ist zusätzlich eine Anzahl von Tagen (z.B. 1000 Tage). Gesucht ist das Datum, das man erreicht, wenn man von Startdatum aus die vorgegebene Anzahl von Tagen abzählt.
(b) Kannst du mit den vorgegebenen Funktionsbausteinen auch den Tag bestimmen, an dem du halb so alt warst bzw. doppelt so alt sein wirst?