Übungen
Aufgabe 1: einfache Funktionsdefinitionen erstellen
Ziel dieser Aufgabe ist es, Funktionen zur Bestimmung geometrischer Größen zu entwickeln.
Zunächst entwickelt man eine Funktionsdefinition, wie z.B.:
def aRechteck(laenge, breite):
flaecheninhalt = laenge * breite
return flaecheninhalt
Eine solche Funktionsdefinition muss anschließend getestet werden. Am einfachsten geht das, indem man Funktionsaufrufe im Ausführfenster eingibt und vom Python-Interpreter ausführen lässt, Z.B.:
>>> aRechteck(2, 5)
10
>>> aRechteck(7, 4)
28
(a) Entwickle analog eine Funktionsdefinition für eine der folgenden geometrischen Größen:
- Umfang eines Rechtecks
- das Volumen eines Quaders
- die Oberfläche eines Quaders
(b) Oft kann man bereits definierte Funktionen benutzen, wenn man weitere Funktionen entwickelt:
def aRechteck(laenge, breite):
flaecheninhalt = laenge * breite
return flaecheninhalt
def aQuadrat(seite):
flaecheninhalt = aRechteck(seite, seite)
return flaecheninhalt
Kannst du selbst ein entsprechendes Beispiel angeben?
Aufgabe 2: einfache Funktionsdefinitionen erstellen
Funktionen können in den unterschiedlichsten Situationen auftreten. Ziel dieser Aufgabe ist es, geeignete Funktionsdefinitionen zu entwickeln. Du musst dir dabei genau überlegen, welche Daten übergeben und welches berechnete Ergebnis zurückgegeben werden soll. Am besten, du erstellst erst einmal ein Black-Box-Diagramm zur Verdeutlichung der Datenverarbeitung. Entwickle anschließend eine Funktionsdefinition und teste sie mit geeigneten Funktionsaufrufen.
(a) Body-Mass-Index:
Der Body-Mass-Index (kurz: BMI) ist eine Zahl, mit der man abschätzen kann, ob man Unter-, Normal oder Übergewicht hat. Man berechnet diese Zahl nach der folgenden Formel:
Gewicht BMI = --------------- Größe * Größe
Dabei wird das Gewicht in kg und die Größe in m angegeben.
(b) optimaler Puls:
Der optimale Puls bei Ausdauersportarten hängt vom Alter ab. Er lässt sich mit der Formel P = 165 - 0.75*A bestimmen. Schreibe ein Programm, das folgenden Dialog ermöglicht:
Alter: 18 optimaler Puls: 151.5
(c) Anhalteweg:
In der Fahrschule lernt man folgende Faustformeln zur Berechnung von Anhaltewegen:
Reaktionsweg (in Metern) = (Geschwindigkeit (in km/h) geteilt durch 10) mal 3
Bremsweg (in Metern) = (Geschwindigkeit (in km/h) geteilt durch 10) mal (Geschwindigkeit (in km/h) geteilt durch 10)
Anhalteweg (in Metern) = Reaktionsweg plus Bremsweg
Aufgabe 3: komplexere Funktionsdefinitionen erstellen
(a) Gegeben ist die folgende Funktionsdefinition.
def summe(n):
zaehler = 0
zwischensumme = 0
while zaehler < n:
zaehler = zaehler + 1
zwischensumme = zwischensumme + zaehler
return zwischensumme
Was leistet diese Funktion? Versuche erst einmal, das Verhalten durch Analyse des Quelltextes herauszufinden. Führe anschließend interaktive Tests durch, indem du Funktionsaufrufe wie den folgenden ausführen lässt.
>>> summe(17)
153
Entwickle in Analogie eine Funktion, die bei Übergabe einer natürlichen Zahl n das Produkt 1*2*...*n berechnet und zurückgibt.
(b) Gegeben ist die folgende Funktionsdefinition.
def quadratzahl(n):
i = 0
while i*i < n:
i = i + 1
if i*i == n:
ergebnis = True
else:
ergebnis = False
return ergebnis
Was leistet diese Funktion? Versuche erst einmal, das Verhalten durch Analyse des Quelltextes herauszufinden. Führe anschließend interaktive Tests durch, indem du Funktionsaufrufe wie den folgenden ausführen lässt.
>>> quadratzahl(17)
...
Entwickle in Analogie eine Funktion, die bei Übergabe einer natürlichen Zahl n überprüft, ob es es sich bei dieser Zahl um eine Kubikzahl / eine Summe der Gestalt 1+2+... handelt.
(c) Hier weitere Beispiele für etwas kompliziertere Funktionen:
- eine Funktion zur Bestimmung der Anzahl der Teiler einer natürlichen Zahl
- eine Funktion zur Überprüfung, ob eine vorgegebene natürliche Zahl eine Primzahl ist
- eine Funktion zur Bestimmung der nächsten Primzahl, die größer als eine vorgegebene natürliche Zahl ist
Aufgabe 4: Funktionen mit und ohne Rückgabedaten
Betrachte die beiden folgenden Funktionsdefinitionen.
def bruchAlsZeichenkette(bruch):
(zaehler, nenner) = bruch
zeichenkette = str(zaehler) + '/' + str(nenner)
return zeichenkette
def printBruch(bruch):
(zaehler, nenner) = bruch
zeichenkette = str(zaehler) + '/' + str(nenner)
print(zeichenkette)
(a) Teste sie durch Funktionsaufrufe wie die folgenden:
>>> bruchAlsZeichenkette((4, 5))
'4/5'
>>> printBruch((4, 5))
4/5
>>> print(bruchAlsZeichenkette((4, 5)))
4/5
(b) Worin unterscheiden sich die Funktionen. Verdeutliche den Unterschied auch anhand eines Black-Box-Diagramms?
(c) Welche Vor- und Nachteile haben die beiden Funktionsversionen?
Aufgabe 5: Funktionen ohne Übergabedaten
Gegeben ist die folgende Funktionsdefinition.
from random import randint
def wuerfeln():
augen = randint(1, 6)
return augen
(a) Was leistet die Funktion wuerfeln
?
(b) Teste diese Funktion mit geeigneten Funktionsaufrufen.
Aufgabe 6: Prozeduren entwickeln
(a) Was leistet die folgende Funktion ohne Rückgabedaten (Prozedur)? Versuche es erst einmal durch Analyse des Quelltextes herauszufinden.
def zahlen_ausgeben(anfang, ende):
zahl = anfang
while zahl <= ende:
print(zahl)
zahl = zahl + 1
Überprüfe anschließend deine Vermutung mit interaktiven Tests wie dem folgenden:
>>> zahlen_ausgeben(4, 11)
Was wird ausgegeben, wenn beide aktuellen Parameter gleich sind? Was wird ausgegeben, wenn der zweite aktuelle Parameter kleiner als der erste ist?
(b) Modifiziere das Programm in Aufgabe 3 so, dass sämtliche Quadratzahlen in einem vorgegebenen Intervall ausgegeben werden.
Zusatz: Statt Quadratzahlen sollen die Primzahlen im vorgegebenen Intervall ausgegeben werden.
Aufgabe 7: Prozeduren entwickeln
Mit Hilfe einer Prozedur sollen Rechteckmuster der folgenden Gestalt erzeugt werden:
Muster 1:
********
********
********
********
Muster 2:
OOOO
OOOO
OOOO
Entwickle und teste eine geeignete Prozedur.
Zusatz: Es soll nur der Rand des Rechtecks mit Zeichen dargestellt werden. Du kannst dir auch selbst ein neues Muster ausdenken.