konzepte imperativer programmierung klaus becker 2008
TRANSCRIPT
Konzepte imperativer Programmierung
Klaus Becker
2008
2
... und ihre Implementierung in Python
# Eingabejung = int(raw_input("Anzahl der jungen Maeuse: "))erwachsen = int(raw_input("Anzahl der erwachsenen Maeuse: "))alt = int(raw_input("Anzahl der alten Maeuse: "))
# Verarbeitungschritt = 0while schritt < 10: hilf = erwachsen*4 + alt*2 alt = erwachsen / 3 erwachsen = jung / 2 jung = hilf schritt = schritt + 1 # Ausgabe:print "Neue Populationswerte:"print "Anzahl der Schritte: ", schrittprint "Anzahl junger Maeuse: ", jungprint "Anzahl erwachsener Maeuse: ", erwachsenprint "Anzahl alter Maeuse: ", alt
3 Teil 1
Variablen
4 Mäusepopulation
Modellannahmen: Unterteilung in drei Alterklassen: junge Mäuse, erwachsene Mäuse und alte Mäuse. In jedem Schritt erfolgt ein Wechsel der Altersklasse: Junge Mäuse werden erwachsen, erwachsene werden alt (und alte Mäuse leider nicht mehr jung). Nur ein bestimmter Anteil (siehe Diagramm) erreicht die nächste Altersstufe. Im Diagramm sind zusätzlich die Geburtenraten eingetragen. Wir gehen davon aus, dass jede erwachsene Maus (im Durchschnitt) vier junge Mäuse erzeugt und dass jede alte Maus (im Durchschnitt) zwei junge Mäuse erzeugt.
5 Aufgabe
Schritt
0
1
2
3
4
5
...
Modellannahme: Zu Beginn besteht die Population aus 6 jungen, 9 erwachsenen und 12 alten Mäusen.
jung
6
60 = 4*9+2*12
erwachsen
9
3 = 6/2
alt
12
3 = 9/3
Berechnen Sie die jeweiligen Populationswerte.
6 Aufgabe
Probieren Sie das mal aus. Alles klar? Alles ok? Was nun?
>>> jung = 6>>> erwachsen = 9>>> alt = 12>>> jung6>>> erwachsen9>>> alt12>>> alt = erwachsen / 3>>> erwachsen = jung / 2>>> jung = erwachsen*4 + alt*2>>> jung18>>> erwachsen3>>> alt3>>>
Schritt
0
1
2
3
4
5
...
jung
6
60 = 4*9+2*12
erwachsen
9
3 = 6/2
alt
12
3 = 9/3
Python-Dialog
7 Variable
Variablen dienen in der Informatik dazu, Daten zu verwalten, die in Speicherzellen abgelegt sind. Jede Variable hat einen Namen, mit dem man auf den in der zugehörigen Speicherzelle abgelegten Datenwert (den sog. Variablenwert) zugreifen kann.
{jung: 6; erwachsen: 9; alt: 12}
aktueller Variablenzustand
Name
Wert
8 Wertzuweisung
Eine Veränderung eines Variablenwerts bzw. des zugehörigen Speicherzelleninhalts kann mit Hilfe einer Wertzuweisung an die entsprechende Variable erfolgen.
Variablenzustand vorher
Wertzuweisung
Variablenzustand nachherAuswertung einer Wertzuweisung:
Erst wird der Wert des Terms mit Hilfe des aktuellen Variablenzustands ermittelt. Dieser Wert wird dann der Variablen als neuer aktueller Wert zugewiesen.
Variable
Term
9 Trace-Tabelle
Eine Trace-Tabelle protokolliert die Veränderungen von Variablenzuständen, wenn mehrere Wertzuweisungen (bzw. sonstige Anweisungen) ausgeführt werden.
Wertzuweisung schritt jung erw. alt hilf
schritt = 0 0
jung = 6 0 6
erwachsen = 9 0 6 9
alt = 12 0 6 9 12
schritt = schritt + 1 1 6 9 12
hilf = erwachsen*4 + alt*2 1 6 9 12 60
alt = erwachsen / 3 1 6 9 3 60
erwachsen = jung / 2 1 6 3 3 60
jung = hilf 1 60 3 3 60
10 Aufgaben
siehe www.inf-schule.de
11 Teil 2
Programme
12 Programmausführung
>>> jung = 6>>> erwachsen = 9>>> alt = 12>>> print jung, erwachsen, alt6 9 12>>> hilf = erwachsen*4 + alt*2>>> alt = erwachsen / 3>>> erwachsen = jung / 2>>> jung = hilf>>> print jung, erwachen, alt60
Traceback (most recent call last): File "<pyshell#8>", line 1, in <module> print jung, erwachen, altNameError: name 'erwachen' is not defined>>>
# Anfangswertejung = 6erwachsen = 9alt = 12print jung, erwachsen, alt# Berechnung der neuen Wertehilf = erwachsen*4 + alt*2alt = erwachsen / 3erwachsen = jung / 2jung = hilfprint jung, erwachsen, alt
>>> 6 9 1260 3 3
interaktive Ausführung Programmausführung
Programm in Datei
13 Programm
# Anfangswertejung = 6erwachsen = 9alt = 12print jung, erwachsen, alt# Berechnung der neuen Wertehilf = erwachsen*4 + alt*2alt = erwachsen / 3erwachsen = jung / 2jung = hilfprint jung, erwachsen, alt
Quelltext
Ein (Python-) Programm ist eine Folge von (Python-) Anweisungen und Kommentaren. Der Programmtext wird auch Quelltext genannt.
Gestaltung von Programmen: Jede Anweisung wird (in der Regel) im Quelltext in eine neue Zeile geschrieben. Die Verständlichkeit eines Programms wird durch sogenannte sprechende Bezeichner deutlich erhöht. Ein sprechende Bezeichner ist ein Name (z. B. für eine Variable), der die Bedeutung des bezeichneten Gegenstands möglichst gut wiedergibt. Kommentare dienen dazu, die Bedeutung von Programmteilen zu erläutern. Kommentare werden eigentlich nur für die Menschen ergänzt, die den Quelltext bearbeiten. Bei der Ausführung von Programmen werden sie ignoriert.
14 EVA-Prinzip
# Eingabejung = input("Anzahl der jungen Maeuse: ")erwachsen = input("Anzahl der erwachsenen Maeuse: ")alt = input("Anzahl der alten Maeuse: ")# Verarbeitunghilf = erwachsen*4 + alt*2alt = erwachsen / 3erwachsen = jung / 2jung = hilf# Ausgabeprint "Neue Populationswerte:"print "Anzahl junger Maeuse: ", jung print "Anzahl erwachsener Maeuse: ", erwachsenprint "Anzahl alter Maeuse: ", alt
Eingabe
Viele Programme lassen sich wie im folgenden Beispiel nach dem EVA-Prinzip strukturieren. EVA steht hier für Eingabe - Verarbeitung - Ausgabe. Auf einen Eingabeteil folgt ein Verarbeitungsteil und schließlich ein Ausgabeteil.
Verarbeitung
Ausgabe
15 Aufgaben
# Eingabejung = input("Anzahl der jungen Maeuse: ")erwachsen = input("Anzahl der erwachsenen Maeuse: ")alt = input("Anzahl der alten Maeuse: ")# Verarbeitunghilf = erwachsen*4 + alt*2alt = erwachsen / 3erwachsen = jung / 2jung = hilf# Ausgabeprint "Neue Populationswerte:"print "Anzahl junger Maeuse: ", jung print "Anzahl erwachsener Maeuse: ", erwachsenprint "Anzahl alter Maeuse: ", alt
Eingabe
Verarbeitung
Ausgabe
Testen Sie das folgende Programm. Kopieren Sie die Anweisungen in den Python-Editor und speichern Sie sie unter einem geeigneten Dateinamen ab (z. B. "maeusepopulation2.py"). Mit [Run] [Run Module] kann man jetzt die Anweisungen von Python ausführen lassen. Achtung: Das Programm fordert Sie zur Mitarbeit auf!
16 Aufgaben
siehe www.inf-schule.de
17 Teil 3
Datentypen
18 Halbe Mäuse?
# Eingabejung = input("Anzahl der jungen Maeuse: ")erwachsen = input("Anzahl der erwachsenen Maeuse: ")alt = input("Anzahl der alten Maeuse: ")# Verarbeitunghilf = erwachsen*4 + alt*2alt = erwachsen / 3erwachsen = jung / 2jung = hilf# Ausgabeprint "Neue Populationswerte:"print "Anzahl junger Maeuse: ", jung print "Anzahl erwachsener Maeuse: ", erwachsenprint "Anzahl alter Maeuse: ", alt
>>> Anzahl der jungen Maeuse: 5Anzahl der erwachsenen Maeuse: 7Anzahl der alten Maeuse: 2Neue Populationswerte:Anzahl junger Maeuse: 32Anzahl erwachsener Maeuse: 2Anzahl alter Maeuse: 2
>>> Anzahl der jungen Maeuse: 5.0Anzahl der erwachsenen Maeuse: 7.0Anzahl der alten Maeuse: 2.0Neue Populationswerte:Anzahl junger Maeuse: 32.0Anzahl erwachsener Maeuse: 2.5Anzahl alter Maeuse: 2.33333333333
19 Datentyp
>>> Anzahl der jungen Maeuse: 5Anzahl der erwachsenen Maeuse: 7Anzahl der alten Maeuse: 2Neue Populationswerte:Anzahl junger Maeuse: 32Anzahl erwachsener Maeuse: 2Anzahl alter Maeuse: 2
>>> Anzahl der jungen Maeuse: 5.0Anzahl der erwachsenen Maeuse: 7.0Anzahl der alten Maeuse: 2.0Neue Populationswerte:Anzahl junger Maeuse: 32.0Anzahl erwachsener Maeuse: 2.5Anzahl alter Maeuse: 2.33333333333
Zu verarbeitende Daten können von ganz unterschiedlichem Typ sein, z. B. Zahlen, mit denen man rechnen kann, oder Zeichenketten, die man hintereinanderhängen kann. Mit dem Begriff Datentyp erfasst man in der Informatik diese unterschiedlichen Typen von Daten.
Ein Datentyp beschreibt eine Menge von Datenobjekten, die alle die gleiche Struktur haben und mit denen die gleichen Operationen ausgeführt werden können.
Datentyp: ganze Zahl
Datentyp: Dezimalzahl
20 Datentypen
>>> 22
Datentyp: ganze Zahl int
>>> 2.02.0
>>> TrueTrue
>>> 'Hallo!''Hallo!'
>>> ('Hans', 'Meier', 34, 'Koblenz')('Hans', 'Meier', 34, 'Koblenz')
>>> [1, 2, 3, 4, 5][1, 2, 3, 4, 5]
Datentyp: Dezimalzahl
float
Datentyp: Wahrheitswert
bool
Datentyp: Zeichenkette
string
Datentyp: Tupel tuple
Datentyp: Liste list
... ...
21 Teil 4
Entscheidungen
22 Maximum bestimmen
Aufgaben: Ergänzen Sie das Flussdiagramm und klären Sie, welche Altergruppe jeweils ausgegeben wird, wenn zwei bzw. alle drei gleich groß sind. Die Populationswerte der einzelnen Altersgruppen sollen hier der Größe nach geordnet ausgegeben werden. Entwickeln Sie ein geeignetes Struktogramm oder Flussdiagramm.
dominante Altersgruppe
Population: Anzahl junger Maeuse: 23Anzahl erwachsener Maeuse: 45Anzahl alter Maeuse: 12dominante Altergruppe: erwachsen
23 Wenn-Anweisung
wenn [Bedingung]: [Anweisungssequenz]sonst: [Anweisungssequenz]
Eine Wenn-Anweisung dient dazu, alternative Abläufe bzw. Fallunterscheidungen zu beschreiben.
if [Bedingung]: [Anweisungssequenz]else: [Anweisungssequenz]
if konto < 0: print "Der Kontostand ist negativ!" print "Bitte die Schulden begleichen!"else: print "Alles ok!"
Bedingung
Anweisungssequenz
Anweisungssequenz
24 Einseitige Wenn-Anweisung
wenn [Bedingung]: [Anweisungssequenz]
Eine Wenn-Anweisung dient dazu, alternative Abläufe bzw. Fallunterscheidungen zu beschreiben.
if [Bedingung]: [Anweisungssequenz]
if konto < 0: print "Der Kontostand ist negativ!" print "Du hast Schulden!"if konto > 0: print "Der Kontostand ist positiv!" print "Eine Auszahlung ist möglich!"
25 Exkurs: Mehrfachauswahl in Python
Eine Wenn-Anweisung dient dazu, alternative Abläufe bzw. Fallunterscheidungen zu beschreiben.
if konto > 0: print "Der Kontostand ist positiv!"else: if konto < 0: print "Der Kontostand ist negativ!" else: print "Der Kontostand ist gleich Null!"
if zahl > 0: print "Die Zahl ist positiv!"elif zahl < 0: print "Die Zahl ist negativ!"else: print "Die Zahl ist gleich Null!"
26 Aufgaben
siehe www.inf-schule.de
27 Teil 5
Wiederholungen
28 Ein Blick in die Zukunft
# Eingabejung = ...erwachsen = ...alt = ...
# Verarbeitunggesamt = jung + erwachsen + altschritt = 0while schritt < 10: hilf = erwachsen*4 + alt*2 alt = erwachsen / 3 erwachsen = jung / 2 jung = hilf gesamt = jung + erwachsen + alt schritt = schritt + 1 # Ausgabe:print "Neue Populationswerte:"print "Anzahl der Schritte: ", schrittprint "Anzahl junger Maeuse: ", jungprint "Anzahl erwachsener Maeuse: ", erwachsenprint "Anzahl alter Maeuse: ", altprint "Gesamtanzahl der Maeuse: ", gesamt
Schritt jung erw. alt
0 6 9 12
1 60 3 3
...
10 ? ? ?
Aufgaben:Ändere Sie das Programm so ab, dass folgende Aufgaben erledigt werden: In jedem Berechnungsschritt sollen die aktuellen Populationswerte ausgegeben werden. Der Benutzer kann selbst eingeben, wie viele Schritte simuliert werden sollen. Der Benutzer kann eine bestimmte Gesamtanzahl von Mäusen eingeben, bis zu der die Simulation durchgeführt werden soll. Ausgegeben werden soll, wie viele Schritte benötigt werden.
29 Solange-Anweisung
solange [Bedingung]: [Anweisungssequenz]
Eine Solange-Anweisung dient dazu, wiederholte Abläufe zu beschreiben. Sie ist aus einer Bedingung und einer (eventuell einelementigen) Anweisungssequenz aufgebaut.
# Eingabe...
# Verarbeitunggesamt = jung + erwachsen + altschritt = 0while schritt < 10: hilf = erwachsen*4 + alt*2 alt = erwachsen / 3 erwachsen = jung / 2 jung = hilf gesamt = jung + erwachsen + alt schritt = schritt + 1 # Ausgabe:...
Bedingung
Anweisungssequenz
while [Bedingung]: [Anweisungssequenz]
30 Solange-Anweisung
# Initialisierungjung = 6erwachsen = 9alt = 12
# Verarbeitunggesamt = jung + erwachsen + altschritt = 0while gesamt < 10: hilf = erwachsen*4 + alt*2 alt = erwachsen / 3 erwachsen = jung / 2 jung = hilf gesamt = jung + erwachsen + alt schritt = schritt + 1 # Ausgabe:...
kein Schleifendurchlauf
# Initialisierungjung = 6erwachsen = 9alt = 12
# Verarbeitunggesamt = jung + erwachsen + altschritt = 0while gesamt <> 25: hilf = erwachsen*4 + alt*2 alt = erwachsen / 3 erwachsen = jung / 2 jung = hilf gesamt = jung + erwachsen + alt schritt = schritt + 1 # Ausgabe:...
unendlich viele Schleifendurchläufe
Endlosschleife
31 Exkurs: Iteration in Python
# Initialisierungjung = 6erwachsen = 9alt = 12
# Verarbeitunggesamt = jung + erwachsen + altfor schritt in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]: hilf = erwachsen*4 + alt*2 alt = erwachsen / 3 erwachsen = jung / 2 jung = hilf gesamt = jung + erwachsen + alt # Ausgabe:...
Kollektion
# Initialisierungjung = 6erwachsen = 9alt = 12min = 0max = 10
# Verarbeitunggesamt = jung + erwachsen + altfor schritt in range(min, max, 1): hilf = erwachsen*4 + alt*2 alt = erwachsen / 3 erwachsen = jung / 2 jung = hilf gesamt = jung + erwachsen + alt # Ausgabe:...
for [Element] in [Kollektion]: [Anweisungssequenz]
32 Aufgaben
siehe www.inf-schule.de
33 Teil 6
Bedingungen
34 Ein interessantes Phänomen
>>> Anzahl der jungen Maeuse: 30Anzahl der erwachsenen Maeuse: 300Anzahl der alten Maeuse: 500Anzahl der Simulationsschritte: 20Schritt 0 : 30 300 500Schritt 1 : 1900 7 150Schritt 2 : 321 475 3Schritt 3 : 1431 80 237Schritt 4 : 714 357 40Schritt 5 : 1151 178 178...Schritt 10 : 972 249 119Schritt 11 : 985 243 124Schritt 12 : 977 246 121Schritt 13 : 980 244 123Schritt 14 : 978 245 122Schritt 15 : 979 244 122Schritt 16 : 976 244 122Schritt 17 : 976 244 122Schritt 18 : 976 244 122Schritt 19 : 976 244 122Schritt 20 : 976 244 122
Aufgaben:Versuchen Sie, das bisher entwickelte Programm so abzuändern, dass bei einer stabilen Population nicht mehr weitergerechnet wird.
geänderte Sterbe- und Geburtenraten
stabile Population
while (schritt < schritte) and (stabil == False): ...
35 Komplexe Bedingungen
Eine Bedingung wird aus elementaren Bedingungen und logischen Operatoren aufgebaut.
el. Bedingung
while (schritt < schritte) and (stabil == False): ...
el. Bedingung
logischer Operator
Operator Bedeutung Bsp. Ergebnis< kleiner 2 < 1 False> größer 4 > 2 True<= kleiner oder gleich 3 <= 3 True>= größer oder gleich 3 >= 4 False== gleich 4 == 3 False<> ungleich 2 <> 3 True!= ungleich 2 != 3 True
Operator Bedeutung Bsp. Ergebnisnot nicht not True Falseand und True and False Falseor oder True or False True
logische Operatoren
Vergleichsoperatoren
36 Aufgaben
siehe www.inf-schule.de
37 Teil 7
Prozeduren
38 Teile und herrsche
def population_eingeben(): ...
def neue_population_berechnen(): ...
def population_ausgeben(): ... # Hauptprogramm
population_eingeben()population_ausgeben()while schritt < schritte: neue_population_berechnen() population_ausgeben()
Teile und herrsche ist eine Problemlöse-strategie, bei der ein Problem immer weiter in Teilprobleme zerlegt wird, bis sich diese einfach lösen lassen. Aus den Lösungen der Teilprobleme wird dann die Lösung des Gesamtproblems zusammengesetzt.
def population_eingeben(): global jung, erwachsen, alt, gesamt, ... jung = input("Anzahl junger Maeuse: ") erwachsen = ... alt = ... schritte = input("Anzahl der Schritte: ") schritt = 0Aufgaben: Versuchen Sie, analog die beiden anderen Unterprogramme zu implementieren. Testen Sie auch, was geschieht, wenn man die Zeile "global ..." weglässt. Welchen Sinn könnte die Zeile "global ..." haben?
39 Prozeduren
Prozeduren sind Unterprogramme zur Lösung von Teilproblemen.
def population_eingeben(): ...
def neue_population_berechnen(): ...
def population_ausgeben(): ... # Hauptprogramm
population_eingeben()population_ausgeben()while schritt < schritte: neue_population_berechnen() population_ausgeben()
Prozeduraufruf
Prozedurdeklaration
Problem: Simulation einer MäusepopulationTeilprobleme: Population eingeben, neue Population berechnen, Population ausgeben
40 lokale / globale Variable
Eine lokale Variable ist nur innerhalb der Prozedur zugreifbar, in der sie eingeführt wird. Eine globale Variable ist (vereinfacht gesagt) eine Variable, die im Hauptprogramm eingeführt wird und in allen Prozeduren benutzt werden kann, in denen nicht eine gleichlautende lokale Variable eingeführt ist. Verändert man innerhalb einer Prozedur den Wert einer globalen Variablen, so spricht man auch von einem Seiteneffekt.
def population_eingeben(): ...
def neue_population_berechnen(): ...
def population_ausgeben(): ... # Hauptprogramm
population_eingeben()population_ausgeben()while schritt < schritte: neue_population_berechnen() population_ausgeben()
def neue_population_berechnen(): global jung, erwachsen, alt, schritt hilf = erwachsen*4 + alt*2 alt = erwachsen / 3 erwachsen = jung / 2 jung = hilf schritt = schritt + 1
globale Variable
lokale Variable
Achtung beim Umgang mit Variablen!
41 Datenmodell
# Datenmodelljung = Noneerwachsen = Nonealt = Noneschritte = Noneschritt = None
# Unterprogrammedef population_eingeben(): ...
def neue_population_berechnen(): ...
def population_ausgeben(): ... # Hauptprogrammpopulation_eingeben()population_ausgeben()while schritt < schritte: neue_population_berechnen() population_ausgeben()
globale Variablen
Datenmodell
Achtung beim Umgang mit Variablen!
Das Zusammenspiel von lokalen und globalen Variablen ist nicht einfach. Es ist daher wichtig, über Strategien zur Vermeidung von Fehlern zu verfügen. Eine Strategie besteht darin, ein Datenmodell zu entwickeln und explizit im Quelltext darzustellen.Das Datenmodell besteht hier aus den Variablen, mit deren Hilfe die entscheidenden Größen des Problembereichs erfasst werden. Diese werden zu Beginn des Programms aufgelistet. Nicht aufgeführt werden Hilfsvariablen und natürlich lokale Variablen von Unterprogrammen. Eine solche Variablendeklaration zu Beginn des Programms ist in Python nicht erforderlich. Sie trägt aber sehr zur Klarheit und Verständlichkeit des Programms bei.
42 Aufgaben
siehe www.inf-schule.de
43 Teil 8
Parameter
44 Grafische Aufbereitung
>>> Anzahl der jungen Maeuse: 6Anzahl der erwachsenen Maeuse: 9Anzahl der alten Maeuse: 12Anzahl der Simulationsschritte: 15Schritt 0 : ***************************Schritt 1 : ********************************************************Schritt 2 : ***********************
Schritt 3 : ********************************************Schritt 4 : ...
def balken_zeichnen(laenge, zeichen): balken = "" for i in range(laenge): balken = balken + zeichen print balken
Aufgaben: Testen Sie zunächst interaktiv die Prozedur "balken_zeichnen" durch Aufrufe wie balken_zeichen(7, "o"). Ändern Sie das bisher entwickelte Programm so ab, dass die Ausgabe mit Hilfe von Balkendiagrammen erfolgt.
45 Parameter
Parameter sind Platzhalter, mit deren Hilfe man Daten zur Laufzeit an Unterprogramme übergeben kann.
Prozeduraufruf
def balken_zeichnen(laenge, zeichen): balken = "" for i in range(laenge): balken = balken + zeichen print balken
>>> balken_zeichnen(6, "O")OOOOOO>>> balken_zeichnen(12, "#")############>>> balken_zeichnen(jung+erwachsen+alt, "M")MMMMMMMMMMMMMMMMMMMM
Prozedurdeklaration
formale Parameter
aktuelle Parameter
46 Aufgaben
siehe www.inf-schule.de
47 Teil 9
Funktionen
48 Modifizierte grafische Aufbereitung
>>> Anzahl der jungen Maeuse: 6Anzahl der erwachsenen Maeuse: 9Anzahl der alten Maeuse: 12Anzahl der Simulationsschritte: 10Veranschaulichung der relativen Haeufigkeiten (O entspricht 2%):Schritt 0 : 6 9 12OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOSchritt 1 : 60 2 4OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOSchritt 2 : 16 20 1OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOSchritt 3 : 82 5 10OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO...
Anforderungen: Die Balken sollen die Anteile der Populationsgruppen grafisch anzeigen. Die Gesamtlänge (100%) soll 50 betragen.
Anteil: 6/27 22%
Länge: 50*0.22 11
49 Modifizierte grafische Aufbereitung
def anteil(bestand, gesamtheit): if gesamtheit > 0: a = float(bestand) / float(gesamtheit) else: a = 0.0 return a
def absolut(anteil, gesamtheit): return anteil * gesamtheit
def balken_zeichnen(laenge, zeichen): balken = "" for i in range(laenge): balken = balken + zeichen print balken
Aufgaben: Testen Sie die gezeigten Unterprogramme. Was bewirkt die return-Anweisung? Modifizieren Sie das bisher entwickelte Programm.
Anteil: 6/27 22%
Länge: 50*0.22 11
>>> anteil(6, 6+9+12)0.22222222222222221>>> absolut(0.222, 50)11.1>>> balkenlaenge_jung = int(absolut(anteil(6, 6+9+12), 50))>>> balken_zeichnen(balkenlaenge_jung, "O")OOOOOOOOOOO
50 Funktionen
Eine Funktion ist ein Unterprogramm, das einen Rückgabewert als Ergebnis liefert.
def anteil(bestand, gesamtheit): if gesamtheit > 0: a = float(bestand) / float(gesamtheit) else: a = 0.0 return a
def absolut(anteil, gesamtheit): return anteil * gesamtheit
Rückgabe-Anweisung
Funktionsdeklaration
>>> anteil(6, 6+9+12)0.22222222222222221>>> absolut(0.222, 50)11.1
FunktionsaufrufFunktionswert als Berechnungsergebnis
51 Unterschied: Funktion - Prozedur
def anteil(bestand, gesamtheit): if gesamtheit > 0: a = float(bestand) / float(gesamtheit) else: a = 0.0 return a
def absolut(anteil, gesamtheit): return anteil * gesamtheit
def balken_zeichnen(laenge, zeichen): balken = "" for i in range(laenge): balken = balken + zeichen print balkendef demo2(): jung = 6 gesamt = 6 + 9 + 12 balken_zeichnen(int(absolut(anteil(jung, gesamt), 50)), "O")
def demo1(): jung = 6 gesamt = 6 + 9 + 12 anteil_jung = anteil(jung, gesamt) laenge_jung = int(absolut(anteil_jung, 50)) balken_zeichnen(laenge_jung, "O")
Im Unterschied zu einer Prozedur stellt ein Funktionsaufruf keine eigenständige Anweisung dar. Innerhalb eines Programms muss bei einem Funktionsaufruf immer die weitere Verarbeitung des Rückgabewerts festgelegt werden.
Prozeduraufruf als Anweisung
Funktionsaufruf als Term / Bestandteil eines Terms
52 Aufgaben
siehe www.inf-schule.de
53 Teil 10
Schnittstellen
54
Verwendung von Unterprogrammen
population_eingeben()# Man wird aufgefordert, eine Liste mit drei (natürlichen) Zahlen einzugeben.# Die Prozedur speichert diese Liste in der globalen Variablen population ab.
neue_population_berechnen()# Die Prozedur berechnet die neuen Populationswerte # und speichert sie als Liste in der globalen Variablen population ab.
population_ausgeben()# Die Prozedur gibt die aktuellen Populationswerte mit einem Balkendiagramm aus.# Jedes Zeichen entspricht einem Individuum der Population.>>> population_eingeben()Population als dreielementige Liste: [6, 9, 12]>>> population_ausgeben()OOOOOOOOOOOOOOOOOOOOOOOOOOO>>> neue_population_berechnen()>>> population_ausgeben()OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Unterprogramm-Beschreibungen
Verwendung, ohne die Details der Deklarationen zu
kennen
55 Schnittstellen
Die Schnittstelle eines Unterprogramms (Prozedur / Funktion) legt sämtliche Informationen fest, die man wissen muss, um das Unterprogramm benutzen zu können. Welchen Namen hat die Prozedur / Funktion? Wie viele Parameter gibt es? Welche Werte darf man für sie einsetzen? In welcher Reihenfolge treten sie auf? Wofür stehen sie? Wie verhält sich die Prozedur / Funktion?
balken_zeichnen(laenge, zeichen) # laenge: natürliche Zahl# zeichen: Zeichen(kette)
>>> balken_zeichnen(30, "!")!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Die Prozedur balken_zeichnen gibt eine Zeichenkette aus, deren Länge dem Wert von laenge entspricht und deren Zeichen dem Wert von zeichen entspricht.
anteil(bestand, gesamtheit) # bestand: Zahl# gesamtheit: Zahl# Rückgabewert: Dezimalzahl
>>> anteil(6, 27)0.22222222222222221
Die Funktion anteil liefert eine Dezimalzahl, die den Anteil des Werts von bestand am Wert von gesamtheit angibt.
Informationen, die man wissen muss
Signatur einer Prozedur
Signatur einer Funktion
Verhaltens-beschreibung
56
Exkurs: Verwaltung v. Daten mit Listen
def population_eingeben(): global population population = input("Population als dreielementige Liste: ")
def neue_population_berechnen(): global population population = [population[1]*3+population[2]*2, population[0]/4, population[1]/2]
def balken_zeichnen(laenge, zeichen): balken = "" for i in range(laenge): balken = balken + zeichen print balken
def balkendiagramm(liste): for i in range(len(liste)): balken_zeichnen(liste[i], "O")
def population_ausgeben(): global population balkendiagramm(population)
57 Teil 11
Miniprojekt
58 Problem / Auftrag
Problem: Sterben die Deutschen langsam aus? Überaltert unsere Gesellschaft zunehmend?
Auftrag: Entwickeln Sie ein Simulationsprogramm mit dem die weitere Entwicklung der Bevölkerung in Deutschland simuliert werden kann. Benutzen Sie das oben gezeigte (durchaus realistische) Populationsmodell.
Startwerte (jeweils in Millionen) für das Jahr 2005: 0-14-Jährige: 12.3; 15-49-Jährige: 39.1; 50-64-Jährige: 15.5; über-65-Jährige: 16.3
59 Pflichtenheft
Aufgabe: Formulieren Sie zunächst möglichst genau, was das zu entwickelnde Programm leisten soll.
Pflichtenheft: Der Benutzer kann den Zeitraum vorgeben, in dem die Bevölkerungsentwicklung simuliert wird. Die berechneten Daten werden als Zahlen und mit einem Balkendiagramm ausgegeben. ...
60 Algorithmen / Programm
Aufgabe: Ändern Sie die Algorithmen zur Entwicklung der Mäusepopulation geeignet ab.Entwickeln Sie ein gut strukturiertes und hinreichend dokumentiertes Programm.
61 Getestetes Produkt
Aufgabe: Testen Sie das entwickelte Programm. Dokumentieren Sie die Testergebnisse.