New Words
des Code
Rumpf Rumpf aufbauen
0 6 0 6
Trong Python : .
not
,
Dang 3 20 die
-
Name: Matrikelnummer:
Aufgabe 3 (Anweisungen - 20 Punkte)
a) Implementieren Sie den Rumpf der Funktion sonderzahlung, die für ein gegebenes Gehalt /7
sowie einen gegebenen Start- und Endmonat den Betrag der Jahressonderzahlung eines
Beschäftigten zurückgeben soll.
• Ein Beschäftigter bekommt keine Sonderzahlung (Rückgabe 0), wenn der Endmonat
nicht Dezember (12) ist.
• Falls ein Beschäftigter eine Sonderzahlung bekommt so beträgt sie pro Beschäfti-
gungsmonat ein zwölftel des 0.65-fachen Gehaltes.
def sonderzahlung(gehalt, startMonat, endMonat):
# 1)
b) Implementieren Sie den Rumpf der Funktion gesamtsonderzahlung, die die Summe aller
-
/13
Sonderzahlungen eines Beschäftigten in seinem Beschäftigungszeitraum (von startM/startJ
bis endM/endJ, mindestens 1 Monat) und einem Startgehalt sgehalt mit jährlicher Ge-
haltserhöhung von 1 Prozent berechnet und zurückgibt.
• Benutzen Sie die obige Funktion sonderzahlung, um die Jahressonderzahlung in
einem Beschäftigungsjahr zu berechnen und
• nutzen Sie eine while Schleife, um die Jahressonderzahlungen über die Jahre zu
summieren.
def gesamtsonderzahlung(startGehalt, startM, startJ, endM, endJ):
5
Aufgabe 3 Wiederholungsanweisungen 12 Punkte
Der Igel möchte in einem Wettlauf gegen den Hasen antreten. Naturgemäß hat der Igel eine
kürzere Schrittlänge als der Hase: der Igel hat eine Schrittlänge von 5.3 cm, der Hase hat eine
Schrittlänge von 10.8 cm. Um diesen Vorteil des Hasens auszugleichen, bekommt der Igel einen
Vorsprung von 270 cm.
Schreiben Sie einen Programm, der berechnet, nach wie vielen Schritten der Hase den Igel trotz
des Vorsprungs überholt hat. Ihr Programm soll für jeden Schritt in einer neuen Zeile ausgeben,
(1) wie weit der Hase insgesamt vorwärts gekommen ist und (2) wie weit der Igel zuzüglich
seines Vorsprungs vorwärts gekommen ist. Diese Ausgabe soll letztmals erfolgen, wenn der Hase
den Igel überholt hat.
Für die obigen Werte soll folgender Text ausgegeben werden:
Nach 1 Schritten: Hase 10.8cm, Igel 275.3cm
Nach 2 Schritten: Hase 21.6cm, Igel 280.6cm
Nach 3 Schritten: Hase 32.4cm, Igel 285.9cm
...
Nach 50 Schritten: Hase 540.0cm, Igel 535.0cm
4
Name: Matrikelnummer:
Aufgabe 4 (Klassen und Vererbung - 25 Punkte)
Sie sollen für ein Bank Datenstrukturen zur Verwaltung von Geld realisieren. Nachfolgendes
UML Diagramm skizziert die zu realisierenden Datenstrukturen.
Bargeld
wert: int
einheit: str
__init__(wert, einheit)
inEuro()
wertanpassung()
Banknote
zerissen: bool
__init__(wert, zerissen)
inEuro()
a) Implementieren Sie eine Klasse Bargeld. /9
• Der Konstruktor der Klasse initialisiert Wert und Einheit mit den Parameterwerten.
• Die Methode inEuro gibt den Wert zurück, wenn die Einheit "Euro" ist und sonst
den Wert multipliziert mit 100.
• Die Methode wertanpassung setzt den Wert auf 0.
6
Name: Matrikelnummer:
b) Implementieren Sie eine Klasse Banknote, die von der Klasse Bargeld erbt. /11
• Der Konstruktor der Klasse soll die Einheit mit "Euro" und die anderen Objektva-
riablen gemäß den Parameterwerten initialisieren.
• Die Klasse soll die Methode inEuro überschreiben. Abhängig von der Gültigkeit von
zerissen soll die Methode 0 oder das Ergebnis der inEuro Berechnung der Oberklasse
zurückgeben.
Nutzen Sie die Methoden der Oberklasse Bargeld, wann immer sinnvoll möglich.
c) Testen Sie Ihre Implementierung, indem Sie ein Pythonprogramm schreiben, welches /5
• ein Objekt vom Typ Banknote mit Wert 50, die nicht zerrissen ist, erzeugt,
• den Wert des Objektes anpasst und
• anschließend den Europreis berechnet und auf der Konsole ausgibt.
7
Aufgabe 5 Klassen und Vererbung 6 + 6 + 2 = 14 Punkte
Eine Bank braucht ein neues Verwaltungsprogramm für Überweisungen. Zusammen mit dem
Bankmanager entwickeln Sie folgendes Programm.
a) Für Ihr Programm wollen Sie die Klasse Bankkonto aus der Vorlesung verwenden. Zusätzlich
haben Sie eine Klasse Ueberweisung entworfen, die hier zusammen mit der Klasse
Bankkonto in UML-Notation angegeben ist.
Mit einer Überweisung kann ein Geldbetrag von einem Konto auf ein anderes Konto verscho-
ben werden. In der Klasse Ueberweisung wird das Quellkonto in dem Attribut quellkonto
und das Zielkonto in dem Attribut zielkonto gespeichert. Beide Attribute werden mit
dem angegebenen Konstruktor initialisiert. Beide Attribute sind Objekte der Klasse Bank-
konto. Die Überweisung von einem Geldbetrag betrag vom Quellkonto auf das Zielkonto
wird durch die Funktion ueberweisen ausgeführt. Dabei wird der Geldbetrag betrag vom
Quellkonto abgehoben und auf das Zielkonto eingezahlt.
Implementieren Sie nur die Klasse Ueberweisung mit Konstruktor und der Funktion
überweisung in Python. Sie können davon ausgehen, dass die Klasse Bankkonto in Py-
thon implementiert ist und können diese verwenden.
7
b) Die Bank möchte nun auch Überweisungen ins Ausland vornehmen können. Zur
Überweisung zwischen zwei Konten unterschiedlicher Länder verwenden wir eine Subklas-
se Auslandsueberweisung der Klasse Ueberweisung aus Teilaufgabe a), die wie folgt in
UML-Notation angegeben ist.
Für Auslandsüberweisungen wird eine Gebühr erhoben. Das Attribut gebuehr gibt an,
wie hoch die Gebühr bei einer Überweisung ist. Im angegebenen Konstruktor werden al-
le geerbten und eigenen Attribute der Klasse Auslandsueberweisung initialisiert. Eine
Überweisung wird durch die Funktion ueberweisen der Klasse Auslandsueberweisung
ausgeführt, wobei die Gebühr vom Quellkonto abgezogen wird.
Implementieren Sie die Klasse Auslandsueberweisung mit Konstruktor und der Funkti-
on ueberweisen in Python. Sie können davon ausgehen, dass die Klasse BankKonto und
Ueberweisung aus Teilaufgabe a) bereits implementiert sind und können diese verwenden.
8
c) Die folgende Programme verwendet die Klassen aus den Teilaufgaben a) und b), die als
gelöst vorausgesetzt werden können.
1 quelle = Bankkonto (10)
2 ziel = Bankkonto (0)
3
4 ueberweisung = A u s l a n d s u eberweisung ( quelle , ziel , 0.02)
5 ueberweisung . ueberweisen (5)
6
7 print ( " Quellkonto : " + str ( quelle . kontostand ))
8 print ( " Zielkonto : " + str ( ziel . kontostand ))
Geben Sie an, was in Zeile 7 und 8 auf der Konsole ausgegeben wird.
Quellkonto : 4 98 .
Zielkonto : 5
10
Name: Matrikelnummer:
Aufgabe 5 (Datenstrukturen - 25 Punkte)
Diese Aufgabe behandelt den Umgang mit in Python bereitgestellten Datenstrukturen.
a) Schreiben Sie ein Pythonprogramm, um eine Liste mit den ersten 5 negativen ganzen /4
Zahlen zu erzeugen.
Nutzen Sie eine Schleife zur Listenerzeugung.
b) Schreiben Sie ein Pythonprogramm, um eine Liste mit den ersten 10 positiven ganzen /4
Zahlen zu erzeugen.
Nutzen Sie List Comprehension zur Listenerzeugung.
c) Schreiben Sie ein Pythonprogramm, das ein Wörterbuch erzeugt, das jeder ganzen Zahl /4
im Interval zwischen -8 und 3 (Schlüssel) sich selbst als Wert zuweist.
8
Name: Matrikelnummer:
d) Schreiben Sie ein Pythonprogramm, das in einer Menge alle String Paare (x, y) speichert /5
für die gilt, dass x und y in einer gegebenen Liste l aus Stringwerten enthaltenen sind
und die gleiche Länge haben.
Nutzen Sie Set Comprehension zur Mengenerzeugung.
e) Die Funktion gleicheElemente bekommt eine Liste mit Integerwerten und soll zurückge-
ben, ob für alle Listeneinträge mit einem Index i größer 0 der jeweilige Eintrag identisch /4
zum Vorgängereintrag (Eintrag mit Index i-1) ist. Implementieren Sie den Rumpf der
Funktion.
def gleicheElemente(liste):
f) Bestimmen Sie die Zeit- und Speicherplatzkomplexität Ihrer obig implementierten Funk-
tion gleicheElemente in Abhängigkeit der Länge der Eingabeliste. Geben Sie die best- /4
möglichste Zeit- und Speicherplatzkomplexität in asymptotischer O-Notation an und be-
gründen Sie Ihre Angaben.
9
Aufgabe 4 Datenstrukturen 7 + 4 = 11 Punkte
a) Eine Wetterstation misst jeden Tag um die gleiche Uhrzeit die Temperatur. Diese Daten
werden der Reihe nach in einer Liste gespeichert. Schreiben Sie eine Funktion mit folgendem
Kopf:
def groesster temperatur sprung(eingabe):
Die Funktion soll den größten Temperatursprung zwischen zwei aufeinander folgenden
Tagen berechnen. Beispielweise soll für die Liste [ 5.0, 1.7, 19.0, 16.9] der Wert 17.3 ausge-
geben werden und für die Liste [13.3, 12.0, 12.5] der Wert 1.3. Es kann davon ausgegangen
werden, dass die Liste mindestens zwei Elemente enthält.
Hinweis: Mit Hilfe der Funktion abs vom Python-Modul math können Sie den Absolutbe-
trag einer Zahl berechnen. Beispielsweise ergibt abs(-1.3) den Wert 1.3. Den Import von
abs brauchen Sie nicht angeben.
Lösung:
1 def g r o e s s t e r _ t e m p e r a t u r _ s p r u n g ( eingabe ):
2
3 groesster_sprung = 0.0; # 0.5 Punkte
4
5 f o r in range (1 , len ( eingabe )):
6 # 1 Punkt für korrekte Verwendung der for - Schleife
7 # 1 Punkte für korrekte Verwendung von range
8
9 differenz = abs ( eingabe [ i - 1] - eingabe [ i ])
10 # 1 Punkt für Di fferenzberechnung
11 # 1 Punkt für Absolutbetrag
12
13 i f differenz > groesster_sprung :
14 # 2 Punkte für gesamtes i f - Konstrukt
15 groesster_sprung = differenz
16
17 return groesster_sprung # 0.5 Punkte