Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Konzepte imperativer Programmierung Klaus Becker 2008.

Ähnliche Präsentationen


Präsentation zum Thema: "Konzepte imperativer Programmierung Klaus Becker 2008."—  Präsentation transkript:

1 Konzepte imperativer Programmierung Klaus Becker 2008

2 2... und ihre Implementierung in Python # Eingabe jung = int(raw_input("Anzahl der jungen Maeuse: ")) erwachsen = int(raw_input("Anzahl der erwachsenen Maeuse: ")) alt = int(raw_input("Anzahl der alten Maeuse: ")) # Verarbeitung schritt = 0 while 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: ", schritt print "Anzahl junger Maeuse: ", jung print "Anzahl erwachsener Maeuse: ", erwachsen print "Anzahl alter Maeuse: ", alt

3 3 Teil 1 Variablen

4 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 5 Aufgabe Schritt 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 6 Aufgabe Probieren Sie das mal aus. Alles klar? Alles ok? Was nun? >>> jung = 6 >>> erwachsen = 9 >>> alt = 12 >>> jung 6 >>> erwachsen 9 >>> alt 12 >>> alt = erwachsen / 3 >>> erwachsen = jung / 2 >>> jung = erwachsen*4 + alt*2 >>> jung 18 >>> erwachsen 3 >>> alt 3 >>> Schritt jung 6 60 = 4*9+2*12 erwachsen 9 3 = 6/2 alt 12 3 = 9/3 Python-Dialog

7 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 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 nachher Auswertung 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 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 = erwachsen = alt = schritt = schritt hilf = erwachsen*4 + alt* alt = erwachsen / erwachsen = jung / jung = hilf

10 10 Aufgaben siehe

11 11 Teil 2 Programme

12 12 Programmausführung >>> jung = 6 >>> erwachsen = 9 >>> alt = 12 >>> print jung, erwachsen, alt >>> hilf = erwachsen*4 + alt*2 >>> alt = erwachsen / 3 >>> erwachsen = jung / 2 >>> jung = hilf >>> print jung, erwachen, alt 60 Traceback (most recent call last): File " ", line 1, in print jung, erwachen, alt NameError: name 'erwachen' is not defined >>> # Anfangswerte jung = 6 erwachsen = 9 alt = 12 print jung, erwachsen, alt # Berechnung der neuen Werte hilf = erwachsen*4 + alt*2 alt = erwachsen / 3 erwachsen = jung / 2 jung = hilf print jung, erwachsen, alt >>> interaktive Ausführung Programmausführung Programm in Datei

13 13 Programm # Anfangswerte jung = 6 erwachsen = 9 alt = 12 print jung, erwachsen, alt # Berechnung der neuen Werte hilf = erwachsen*4 + alt*2 alt = erwachsen / 3 erwachsen = jung / 2 jung = hilf print 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 14 EVA-Prinzip # Eingabe jung = input("Anzahl der jungen Maeuse: ") erwachsen = input("Anzahl der erwachsenen Maeuse: ") alt = input("Anzahl der alten Maeuse: ") # Verarbeitung hilf = erwachsen*4 + alt*2 alt = erwachsen / 3 erwachsen = jung / 2 jung = hilf # Ausgabe print "Neue Populationswerte:" print "Anzahl junger Maeuse: ", jung print "Anzahl erwachsener Maeuse: ", erwachsen print "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 15 Aufgaben # Eingabe jung = input("Anzahl der jungen Maeuse: ") erwachsen = input("Anzahl der erwachsenen Maeuse: ") alt = input("Anzahl der alten Maeuse: ") # Verarbeitung hilf = erwachsen*4 + alt*2 alt = erwachsen / 3 erwachsen = jung / 2 jung = hilf # Ausgabe print "Neue Populationswerte:" print "Anzahl junger Maeuse: ", jung print "Anzahl erwachsener Maeuse: ", erwachsen print "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 16 Aufgaben siehe

17 17 Teil 3 Datentypen

18 18 Halbe Mäuse? # Eingabe jung = input("Anzahl der jungen Maeuse: ") erwachsen = input("Anzahl der erwachsenen Maeuse: ") alt = input("Anzahl der alten Maeuse: ") # Verarbeitung hilf = erwachsen*4 + alt*2 alt = erwachsen / 3 erwachsen = jung / 2 jung = hilf # Ausgabe print "Neue Populationswerte:" print "Anzahl junger Maeuse: ", jung print "Anzahl erwachsener Maeuse: ", erwachsen print "Anzahl alter Maeuse: ", alt >>> Anzahl der jungen Maeuse: 5 Anzahl der erwachsenen Maeuse: 7 Anzahl der alten Maeuse: 2 Neue Populationswerte: Anzahl junger Maeuse: 32 Anzahl erwachsener Maeuse: 2 Anzahl alter Maeuse: 2 >>> Anzahl der jungen Maeuse: 5.0 Anzahl der erwachsenen Maeuse: 7.0 Anzahl der alten Maeuse: 2.0 Neue Populationswerte: Anzahl junger Maeuse: 32.0 Anzahl erwachsener Maeuse: 2.5 Anzahl alter Maeuse:

19 19 Datentyp >>> Anzahl der jungen Maeuse: 5 Anzahl der erwachsenen Maeuse: 7 Anzahl der alten Maeuse: 2 Neue Populationswerte: Anzahl junger Maeuse: 32 Anzahl erwachsener Maeuse: 2 Anzahl alter Maeuse: 2 >>> Anzahl der jungen Maeuse: 5.0 Anzahl der erwachsenen Maeuse: 7.0 Anzahl der alten Maeuse: 2.0 Neue Populationswerte: Anzahl junger Maeuse: 32.0 Anzahl erwachsener Maeuse: 2.5 Anzahl alter Maeuse: 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 20 Datentypen >>> 2 2 Datentyp: ganze Zahlint >>> >>> True True >>> 'Hallo!' 'Hallo!' >>> ('Hans', 'Meier', 34, 'Koblenz') ('Hans', 'Meier', 34, 'Koblenz') >>> [1, 2, 3, 4, 5] [1, 2, 3, 4, 5] Datentyp: Dezimalzahlfloat Datentyp: Wahrheitswertbool Datentyp: Zeichenkettestring Datentyp: Tupeltuple Datentyp: Listelist...

21 21 Teil 4 Entscheidungen

22 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: 23 Anzahl erwachsener Maeuse: 45 Anzahl alter Maeuse: 12 dominante Altergruppe: erwachsen

23 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

24 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 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 26 Aufgaben siehe

27 27 Teil 5 Wiederholungen

28 28 Ein Blick in die Zukunft # Eingabe jung =... erwachsen =... alt =... # Verarbeitung gesamt = jung + erwachsen + alt schritt = 0 while 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: ", schritt print "Anzahl junger Maeuse: ", jung print "Anzahl erwachsener Maeuse: ", erwachsen print "Anzahl alter Maeuse: ", alt print "Gesamtanzahl der Maeuse: ", gesamt Schrittjungerw.alt ??? 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 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... # Verarbeitung gesamt = jung + erwachsen + alt schritt = 0 while 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 30 Solange-Anweisung # Initialisierung jung = 6 erwachsen = 9 alt = 12 # Verarbeitung gesamt = jung + erwachsen + alt schritt = 0 while 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 # Initialisierung jung = 6 erwachsen = 9 alt = 12 # Verarbeitung gesamt = jung + erwachsen + alt schritt = 0 while 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 31 Exkurs: Iteration in Python # Initialisierung jung = 6 erwachsen = 9 alt = 12 # Verarbeitung gesamt = jung + erwachsen + alt for 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 # Initialisierung jung = 6 erwachsen = 9 alt = 12 min = 0 max = 10 # Verarbeitung gesamt = jung + erwachsen + alt for 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 32 Aufgaben siehe

33 33 Teil 6 Bedingungen

34 34 Ein interessantes Phänomen >>> Anzahl der jungen Maeuse: 30 Anzahl der erwachsenen Maeuse: 300 Anzahl der alten Maeuse: 500 Anzahl der Simulationsschritte: 20 Schritt 0 : Schritt 1 : Schritt 2 : Schritt 3 : Schritt 4 : Schritt 5 : Schritt 10 : Schritt 11 : Schritt 12 : Schritt 13 : Schritt 14 : Schritt 15 : Schritt 16 : Schritt 17 : Schritt 18 : Schritt 19 : Schritt 20 : 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 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. Ergebnis not nicht not True False and und True and False False or oder True or False True logische Operatoren Vergleichsoperatoren

36 36 Aufgaben siehe

37 37 Teil 7 Prozeduren

38 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 = 0 Aufgaben: 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 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äusepopulation Teilprobleme: Population eingeben, neue Population berechnen, Population ausgeben

40 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 41 Datenmodell # Datenmodell jung = None erwachsen = None alt = None schritte = None schritt = None # Unterprogramme def population_eingeben():... def neue_population_berechnen():... def population_ausgeben():... # Hauptprogramm population_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 42 Aufgaben siehe

43 43 Teil 8 Parameter

44 44 Grafische Aufbereitung >>> Anzahl der jungen Maeuse: 6 Anzahl der erwachsenen Maeuse: 9 Anzahl der alten Maeuse: 12 Anzahl der Simulationsschritte: 15 Schritt 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 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 46 Aufgaben siehe

47 47 Teil 9 Funktionen

48 48 Modifizierte grafische Aufbereitung >>> Anzahl der jungen Maeuse: 6 Anzahl der erwachsenen Maeuse: 9 Anzahl der alten Maeuse: 12 Anzahl der Simulationsschritte: 10 Veranschaulichung der relativen Haeufigkeiten (O entspricht 2%): Schritt 0 : OOOOOOOOOOO OOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOO Schritt 1 : OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO O OOO Schritt 2 : OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOO O Schritt 3 : OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO OOOOO... Anforderungen: Die Balken sollen die Anteile der Populationsgruppen grafisch anzeigen. Die Gesamtlänge (100%) soll 50 betragen. Anteil: 6/27 22% Länge: 50*

49 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* >>> anteil(6, ) >>> absolut(0.222, 50) 11.1 >>> balkenlaenge_jung = int(absolut(anteil(6, ), 50)) >>> balken_zeichnen(balkenlaenge_jung, "O") OOOOOOOOOOO

50 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, ) >>> absolut(0.222, 50) 11.1 Funktionsaufruf Funktionswert als Berechnungsergebnis

51 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 balken def demo2(): jung = 6 gesamt = balken_zeichnen(int(absolut(anteil(jung, gesamt), 50)), "O") def demo1(): jung = 6 gesamt = 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 52 Aufgaben siehe

53 53 Teil 10 Schnittstellen

54 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() OOOOOO OOOOOOOOO OOOOOOOOOOOO >>> neue_population_berechnen() >>> population_ausgeben() OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO O OOOO Unterprogramm- Beschreibungen Verwendung, ohne die Details der Deklarationen zu kennen

55 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) 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 ProzedurSignatur einer Funktion Verhaltens- beschreibung

56 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 57 Teil 11 Miniprojekt

58 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; Jährige: 39.1; Jährige: 15.5; über-65-Jährige: 16.3

59 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 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 61 Getestetes Produkt Aufgabe: Testen Sie das entwickelte Programm. Dokumentieren Sie die Testergebnisse.


Herunterladen ppt "Konzepte imperativer Programmierung Klaus Becker 2008."

Ähnliche Präsentationen


Google-Anzeigen