Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Wiederholung von Berechnungen

Bisherige Vorgehensweise

Die wiederholte Berechnung von Populationswerte erfolgte bisher, indem die zentrale Berechnungsformel (in geeigneter Form als Anweisung dargestellt) wiederholt im Quelltext aufgeführt wurde.

def popKa5Schritte(anzKa, zKa):
    neueAnzKa = anzKa
    neueAnzKa = neueAnzKa + zKa*neueAnzKa
    neueAnzKa = neueAnzKa + zKa*neueAnzKa
    neueAnzKa = neueAnzKa + zKa*neueAnzKa
    neueAnzKa = neueAnzKa + zKa*neueAnzKa
    neueAnzKa = neueAnzKa + zKa*neueAnzKa
    return neueAnzKa

Eleganter geht das mit einer Wiederholungsanweisung.

def popKa5Schritte(anzKa, zKa):
    schritte = 5
    zaehler = 0
    neueAnzKa = anzKa
    while zaehler < schritte:
        neueAnzKa = neueAnzKa + zKa*neueAnzKa
        zaehler = zaehler + 1
    return neueAnzKa

Aufgabe 1

(a) Verfolge erst einmal, wie die Funktionsdefinition hier ausgeführt wird.

Kannst du alle Ausführungsschritte erklären? Mehr über Wiederholungsanweisungen erfährst du im Abschnitt Wiederholungen.

(b) Ändere die Funktionsdefinition so ab, dass eine Kaninchen-Fuchs-Population simuliert wird.

def popKaFu5Schritte(anzKa, anzFu, zKa, aFu):
    ...
    return (anzKa5, anzFu5)

(c) Wenn man auch an Zwischenwerten interessiert ist, dann kann man sich diese auf dem Bildschirm ausgeben lassen. Teste hierzu folgende Funktionsdefinition mit integrierten print-Anweisungen.

def popKa5Schritte(anzKa, zKa):
    schritte = 5
    zaehler = 0
    neueAnzKa = anzKa
	print(zaehler, neueAnzKa)
    while zaehler < schritte:
        neueAnzKa = neueAnzKa + zKa*neueAnzKa
        zaehler = zaehler + 1
		print(zaehler, neueAnzKa)
    return neueAnzKa

Beachte: Solche in Funktionsdefinitionen integrierte print-Anweisungen liefern durchaus nützliche Zwischenwerte, gelten aber als eher unelegant, da sie Seiteneffekte auf dem Bildschirm erzeugen. In den weiteren Abschnitten werden wir auf diese Problematik noch genauer eingehen.

(d) Flexibler wird die Funktion zur Populationsentwicklung, wenn man die Anzahl der Schritte ebenfalls zur Verarbeitung übergeben kann.

<Black-Box-Diagramm><Funktionsname>popKa</Funktionsname><Übergaben><Übergabe><Wert>1000</Wert><Variable>anzKa</Variable><Typ>int</Typ></Übergabe><Übergabe><Wert>0.08</Wert><Variable>zKa</Variable><Typ>float</Typ></Übergabe><Übergabe><Wert>5</Wert><Variable>schritte</Variable><Typ></Typ></Übergabe></Übergaben><Rückgabe><Typ>float</Typ><Wert>1469.32...</Wert></Rückgabe></Black-Box-Diagramm>

Ändere die Funktionsdefinition passed ab. Passe auch die Funktion zur Simulation der gemeinsamen Kaninchen-Fuchs-Population entsprechend an.

(e) Mit der vordefinierten round-Funktion lassen sich die etwas merkwürdigen Daten zur Anzahl von Kaninchen und Füchsen vermeiden.

>>> round(1469.3280768)
1469

Benutze diese Funktion zur Verbesserung der Simulationen.

X

Fehler melden

X

Suche