Skip to content

Unterprogramme

ProgrammierenProgrammablauf

Ein Unterprogramm stellt einen wiederverwendbaren Code-Block dar. Es kann durch übergebene Argumente mit verschiedenen Situationen umgehen. Zudem kann es einen Wert berechnen und diesen als Rückgabewert an den Aufrufenden zurückliefern.

python
def unterprogramm(argument1, argument2, ...):
	block
	return rückgabewert

variable = unterprogramm(argument1, argument2, ...)

Beispiel

Wir schreiben die Lösungsformel der Quadratischen Gleichung neu und verpacken die Berechnung in ein Unterprogramm, so dass wir dieses mehrmals verwenden können:

python
from math import sqrt

def quadr(a, b, c):
	x1 = (-b + sqrt(b**2 - 4*a*c))/(2*a)
	x2 = (-b - sqrt(b**2 - 4*a*c))/(2*a)
	return (x1, x2)

print("Dieses Programm löst eine Quadratische")
print("Gleichung der Form ax^2 + bx + c = 0")

a = float(input("Gib den Wert für den Koeffizienten a ein: "))
b = float(input("Gib den Wert für den Koeffizienten b ein: "))
c = float(input("Gib den Wert für den Koeffizienten c ein: "))

(x1, x2) = quadr(a, b, c)

print("Die Lösungen lauten:")
print("x1 =", x1)
print("x2 =", x2)
python
from math import sqrt

print("Dieses Programm löst eine Quadratische")
print("Gleichung der Form ax^2 + bx + c = 0")

a = float(input("Gib den Wert für den Koeffizienten a ein: "))
b = float(input("Gib den Wert für den Koeffizienten b ein: "))
c = float(input("Gib den Wert für den Koeffizienten c ein: "))

x1 = (-b + sqrt(b**2 - 4*a*c))/(2*a)
x2 = (-b - sqrt(b**2 - 4*a*c))/(2*a)

print("Die Lösungen lauten:")
print("x1 =", x1)
print("x2 =", x2)

Aufgabe

Löse mit dem obigen Programm die folgenden Quadratischen Gleichungen:

x24x+3=0x22x+1=05x2+2.3x3=0
  • Was beobachtest du?
  • Wo gibt es Probleme? Wieso?

Aufruf

Im Allgemeinen ruft man ein Unterprogramm auf, indem man seinen Namen, gefolgt von runden Klammern mit – falls vorhanden – durch Kommas getrennte Werte, sogenannte Argumente, schreibt.

Definition

Wenn wir ein eigenes Unterprogramm definieren, so verlassen wir die eigentliche Haupt-Sequenz des Programms. Dies kennzeichnen wir durch Einrücken:

python
def hallo():
	print("Hallo Welt")
	print("Hallo Zorg")    
	
print("hi")
hallo()
output
hi
Hallo Welt
Hallo Zorg
Zeile 1
definiert ein Unterprogramm name mit Argumenten args
Zeilen 2-3
gehören zur Sequenz des Unterprogramms, werden also erst aufgerufen wenn irgendwo das Unterprogramm aufgerufen wird
Zeile 5
gehört nicht mehr zum Unterprogramm
Zeile 6
ruft das Unterprogramm auf.

Das Unterprogramm hallo wird zwar auf den Zeilen 1-3 definiert, aber erst am Schluss aufgerufen. Der erste print-Befehl, der ausgeführt wird, ist der auf Zeile 5.

Warnung

Bevor ein Unterprogramm aufgerufen werden kann, muss es definiert sein!

Argumente

Ein Unterprogramm kann kein, ein oder mehrere Argumente entgegennehmen. Damit wir ein Unterprogramm mit den korrekten Argumenten «füttern» können, müssen wir aber wissen, was es tut und was es als Argument(e) erwartet.

Übergeben von Argumenten beim Aufruf

Wir schauen uns das Beispiel mit der quadratischen Lösungsformel an. Hier werden die Argumente des Unterprogramms quadr auf Zeile 3 definiert:

python
from math import sqrt

def quadr(a, b, c):
	x1 = (-b + sqrt(b**2 - 4*a*c))/(2*a)
	x2 = (-b - sqrt(b**2 - 4*a*c))/(2*a)
	return (x1, x2)

Das Unterprogramm quadr erhält 3 Argumente. Diese werden mit a, b und c bezeichnet. Die Namen der Argumente verhalten sich wie Variablennamen. Die Argumente selbst sind nur im Unterprogramm drin gültig.

Entgegennehmen von Argumenten bei der Definition

Beim Aufruf des Unterprogramms quadr müssen wir wissen wieviele Argumente dieses erwartet und welches Argumente für was steht – also die Reihenfolge der Argumente.

python
a = float(input("Gib den Wert für den Koeffizienten a ein: "))
b = float(input("Gib den Wert für den Koeffizienten b ein: "))
c = float(input("Gib den Wert für den Koeffizienten c ein: "))

(x1, x2) = quadr(a, b, c)
print(x1, x2)

Als Argumente übergeben werden Werte! Wir müssen beim Aufruf keine Variablen verwenden und diese müssen auch nicht gleich lauten wie die Argumente:

python
(x1, x2) = quadr(1, -2, 1)
print(x1, x2)
python
koeff1 = 1
koeff2 = -4
koeff3 = 3
(x1, x2) = quadr(koeff1, koeff2, koeff3)
print(x1, x2)

Syntax

Eingeleitet wird die Definition des Unterprogramms mit dem Schlüsselwort def gefolgt vom Namen des Unterprogramms, der sicherstellt, dass das Unterprogramm auch aufgerufen werden kann.

Nach dem Namen folgt eine Runde Klammer, worin die übergebenen Argumente aufgelistet werden. Die Klammer muss da sein, kann aber auch leer bleiben.
Die Definition wird mit einem Doppelpunkt abgeschlossen.

Der Inhalt des Unterprogramms muss eine Ebene eingerückt sein. Als letzter Befehl kann mit dem Schlüsselwort return ein Wert zurückgegeben werden. return bricht die Ausführung des Unterprogramms ab!

python
def unterprogramm(argument1, argument2, ...):
	befehl1
	befehl2
	...
	return rückgabewert
python
variablen = unterprogramm(argument1, argument2, ...)

Gymnasium Kirchenfeld, fts