Mittwoch, 1. Dezember 2010
Übungsbeispiele für Python (POS1: 1BHIF)
Vervollständigen Sie die folgenden Funktionsdefinitionen und schreiben Sie passende Testaufrufe.
Hier waren es die Aufrufe:
def ist_dreieck(a, b, c):
"""liefert True, wenn durch a, b und c ein gültiges Dreieck definiert
ist"""
return True
def ist_quadrat(a, b, w):
"""liefert True, wenn durch a und b sowie dem Winkel w ein
Quadrat definiert ist"""
return True
def ist_schaltjahr(jahr):
"""liefert True, wenn das gegebene Jahr ein Schaltjahr ist.
Seit Ende 1582 gilt der Gregorianische Kalender, bei dem folgende
Regel für die Schaltjahrbestimmung anzuwenden sind:
In allen Jahren, deren Jahreszahl durch vier teilbar ist, ist
der 29. Februar ein Schalttag und damit ist dieses Jahr ein
Schaltjahr.
Eine Ausnahme bilden allerdings die vollen Jahrhundertjahre 1700,
1800, 1900 usw., auch Säkularjahre genannt. Hiervon erhalten nur
diejenigen einen Schalttag, deren Jahreszahl durch 400 teilbar
ist. Jedes vierte Säkularjahr ist somit ein Schaltjahr.
Für alle Jahre <= 1582 liefert die Funktion False, weil da das
Schaltjahr nicht definiert ist, sonst gilt obige Regel."""
return False
def fib(n):
"""liefert die Fibonaccizahl zu n. Die Zahlen sind wie definiert:
fib(0) -> 0
fib(1) -> 1
fib(2) -> 1
fib(3) -> 2
fib(4) -> 3
fib(5) -> 5
fib(6) -> 8
...
fib(10) -> 55
...
fib(15) -> 610"""
return 1
def fibtab(n):
"""erzeugt eine Tabelle der Fibonaccizahlen bis inclusive n.
z.B. gibt fibtab(10) folgendes aus:
[0, 1, 1, 2, 3, 5, 8]
oder fibtab(100):
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
Hinweis:
verwenden Sie als Zeilenumbruch ", " beim print, also
print(wert, end=', ')
außer natürlich beim letzten Wert, hier ist "]" gefordert.
"""
print("[0, 1, 1, 2, 3, 5, 8]")
def sum_3_5(max):
"""
bilde Summe der Vielfachen von 3 und 5 kleiner als max.
Beispielsweise liefert sum_3_5(10) 23, weil
die Vielfachen von 3 < 10 sind
3 + 6 + 9 = 18
die Vielfachen von 5 < 10 sind
5
18 + 5 = 23
sum_3_5(20) liefert 78, weil
3+ 6+9+ 12+15+18=63
5+ 10+ =15 (15 ist in obiger Liste schon enthalten!)
sum_3_5(25) liefert 143, weil
3+ 6+9+ 12+ 18+ 21+24=93 (Vielfache von 5 stehen darunter)
5+ 10+ 15+ 20+ =50
sum_3_5(100) liefert 2318 (ohne Beweis)
"""
return 23
def minquad(zahl):
"""finde die nächstkleinere oder gleichgroße ganze Zahl, die eine
Quadratzahl ist. Beispiele:
minquad(16) -> 16 (weil 4 * 4 = 16 <= 16)
minquad(24) -> 16 (weil 4 * 4 = 16 <= 24)
minquad(25) -> 25 (weil 5 * 5 = 25 <= 25)
minquad(26) -> 25 (weil 5 * 5 = 25 <= 26)
"""
return zahl
def dreieck(a, w):
"""zeichnet ein gleichseitiges Dreieck der Seitenlänge a, gedreht um
den Winkel w. w = 0 bedeutet, dass die eine Seite horizional ist.
w = 90 bedeutet, dass das Dreieck nach LINKS um 90° gedreht ist, d.h.
eine Seite ist vertikal.
Das Dreieck soll rechts neben des angegebenen Punktes gezeichnet
werden.
"""
pass
def dreieck_an_pos(a, w, x, y):
"""zeichnet ein Dreieck mit Hilfe der Funktion dreieck(a, w) an der
Position x, y."""
pass
Hier folgt ein Beispielaufruf für die Schaltjahrfunktion: def test_ist_schaltjahr():
for jahr in (1000, 1581, 1582, 1900, 1999, 2003):
assert not ist_schaltjahr(jahr)
for jahr in (1996, 2000, 2004):
assert ist_schaltjahr(jahr)
print("ist_schaltjahr ok")
Sollte ist_schaltjahr() richtig implementiert sein, dann müsste "ist_schaltjahr ok" ausgegeben werden. Andernfalls wird das Programm bei einer der assert-Anweisungen abgebrochen werden. assert verwendet man als Programmierer um Bedingungen zu prüfen, die, falls sie nicht erfüllt sind, auf einen Programmierfehler hinweisen. Als Bedingung kann alles rechts neben dem assert stehen, das True ("alles ok") oder False liefert. Die Testaufrufe für alle Funktionen sollten dann etwa so zusammengefasst werden: def main():
"""Hauptprogamm zum Testen aller Funktionen"""
test_ist_dreieck()
test_ist_quadrat()
test_ist_schaltjahr()
test_fib()
test_sum_3_5()
test_minquad()
test_dreieck()
test_dreieck_an_pos()
Dieses main() muss natürlich auch erst aufgerufen werden (keine Einrückung): main()Wenn Sie das Programm laufen lassen, dann sieht sie Ausgabe, wenn alles funktioniert (sinngemäß) so aus:
ist_dreieck ok ist_quadrat ok ist_schaltjahr ok fib ok sum_3_5 ok minquad okDie Funktionen
test_dreieck() sowie test_dreieck_an_pos() bewirken eine Zeichnung der folgenden Art (je nach Aufrufe):Hier waren es die Aufrufe:
def test_dreieck():
reset()
dreieck(60, 0)
dreieck(60, 90)
dreieck(60, -60)
def test_dreieck_an_pos():
dreieck_an_pos(70, 0, 50, 50)
dreieck_an_pos(70, 180, -50, -50)
Es ist also "optische Kontrolle" nötig.Labels: Aufgabe, POS1-1, Python
Abonnieren Kommentare [Atom]

Kommentar veröffentlichen