Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Konzepte imperativer Programmierung

Ähnliche Präsentationen


Präsentation zum Thema: "Konzepte imperativer Programmierung"—  Präsentation transkript:

1 Konzepte imperativer Programmierung
Klaus Becker 2008

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 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 Modellannahme:
Zu Beginn besteht die Population aus 6 jungen, 9 erwachsenen und 12 alten Mäusen. Schritt 1 2 3 4 5 ... jung 6 60 = 4*9+2*12 erwachsen 9 3 = 6/2 alt 12 3 = 9/3 Berechnen Sie die jeweiligen Populationswerte.

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

7 aktueller Variablenzustand
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. Wert Name {jung: 6; erwachsen: 9; alt: 12} aktueller Variablenzustand

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 Variable Term 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.

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

11 Teil 2 Programme

12 interaktive Ausführung
Programmausführung >>> jung = 6 >>> erwachsen = 9 >>> alt = 12 >>> print jung, erwachsen, alt 6 9 12 >>> hilf = erwachsen*4 + alt*2 >>> alt = erwachsen / 3 >>> erwachsen = jung / 2 >>> jung = hilf >>> print jung, erwachen, alt 60 Traceback (most recent call last): File "<pyshell#8>", line 1, in <module> 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 Programm in Datei >>> 6 9 12 60 3 3 interaktive Ausführung Programmausführung

13 Programm 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. # 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 Quelltext

14 EVA-Prinzip 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. # 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

15 Aufgaben 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! # 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

16 Aufgaben siehe

17 Teil 3 Datentypen

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 Datentyp 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 >>> 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:

20 Datentypen >>> 2 2 Datentyp: ganze Zahl int >>> 2.0
Datentyp: Dezimalzahl float >>> True True Datentyp: Wahrheitswert bool >>> 'Hallo!' 'Hallo!' Datentyp: Zeichenkette string >>> ('Hans', 'Meier', 34, 'Koblenz') ('Hans', 'Meier', 34, 'Koblenz') Datentyp: Tupel tuple >>> [1, 2, 3, 4, 5] [1, 2, 3, 4, 5] Datentyp: Liste list ... ...

21 Teil 4 Entscheidungen

22 dominante Altersgruppe
Maximum bestimmen Population: Anzahl junger Maeuse: 23 Anzahl erwachsener Maeuse: 45 Anzahl alter Maeuse: 12 dominante Altergruppe: erwachsen dominante Altersgruppe 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.

23 Wenn-Anweisung Eine Wenn-Anweisung dient dazu, alternative Abläufe bzw. Fallunterscheidungen zu beschreiben. if [Bedingung]: [Anweisungssequenz] else: wenn [Bedingung]: [Anweisungssequenz] sonst: Bedingung if konto < 0: print "Der Kontostand ist negativ!" print "Bitte die Schulden begleichen!" else: print "Alles ok!" Anweisungssequenz Anweisungssequenz

24 Einseitige Wenn-Anweisung
Eine Wenn-Anweisung dient dazu, alternative Abläufe bzw. Fallunterscheidungen zu beschreiben. if [Bedingung]: [Anweisungssequenz] wenn [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!" 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

27 Teil 5 Wiederholungen

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 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 Schritt jung erw. alt ... 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 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 schritt = schritt + 1 # Ausgabe: solange [Bedingung]: [Anweisungssequenz] Bedingung Anweisungssequenz while [Bedingung]: [Anweisungssequenz]

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 schritt = schritt + 1 # Ausgabe: ... # 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 schritt = schritt + 1 # Ausgabe: ... Endlosschleife unendlich viele Schleifendurchläufe kein Schleifendurchlauf

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 # Ausgabe: ... # 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 # Ausgabe: ... Kollektion for [Element] in [Kollektion]: [Anweisungssequenz]

32 Aufgaben siehe

33 Teil 6 Bedingungen

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 : geänderte Sterbe- und Geburtenraten Aufgaben: Versuchen Sie, das bisher entwickelte Programm so abzuändern, dass bei einer stabilen Population nicht mehr weitergerechnet wird. stabile Population while (schritt < schritte) and (stabil == False): ...

35 Vergleichsoperatoren
Komplexe Bedingungen Eine Bedingung wird aus elementaren Bedingungen und logischen Operatoren aufgebaut. while (schritt < schritte) and (stabil == False): ... logischer Operator el. Bedingung el. Bedingung 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 Vergleichsoperatoren Operator Bedeutung Bsp. Ergebnis not nicht not True False and und True and False False or oder True or False True logische Operatoren

36 Aufgaben siehe

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() 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? 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.

39 Prozeduren Prozeduren sind Unterprogramme zur Lösung von Teilproblemen. Problem: Simulation einer Mäusepopulation Teilprobleme: Population eingeben, neue Population berechnen, Population ausgeben def population_eingeben(): ... def neue_population_berechnen(): def population_ausgeben(): # Hauptprogramm population_eingeben() population_ausgeben() while schritt < schritte: neue_population_berechnen() Prozedurdeklaration Prozeduraufruf

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() 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 lokale Variable globale Variable Achtung beim Umgang mit Variablen!

41 Achtung beim Umgang mit Variablen!
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() 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. Datenmodell globale Variablen Achtung beim Umgang mit Variablen!

42 Aufgaben siehe

43 Teil 8 Parameter

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 Parameter Parameter sind Platzhalter, mit deren Hilfe man Daten zur Laufzeit an Unterprogramme übergeben kann. formale Parameter def balken_zeichnen(laenge, zeichen): balken = "" for i in range(laenge): balken = balken + zeichen print balken Prozedurdeklaration aktuelle Parameter >>> balken_zeichnen(6, "O") OOOOOO >>> balken_zeichnen(12, "#") ############ >>> balken_zeichnen(jung+erwachsen+alt, "M") MMMMMMMMMMMMMMMMMMMM Prozeduraufruf

46 Aufgaben siehe

47 Teil 9 Funktionen

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 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*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, ) >>> absolut(0.222, 50) 11.1 >>> balkenlaenge_jung = int(absolut(anteil(6, ), 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 Funktionsdeklaration Rückgabe-Anweisung >>> anteil(6, ) >>> absolut(0.222, 50) 11.1 Funktionswert als Berechnungsergebnis Funktionsaufruf

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 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. def demo1(): jung = 6 gesamt = anteil_jung = anteil(jung, gesamt) laenge_jung = int(absolut(anteil_jung, 50)) balken_zeichnen(laenge_jung, "O") def demo2(): jung = 6 gesamt = balken_zeichnen(int(absolut(anteil(jung, gesamt), 50)), "O") Prozeduraufruf als Anweisung Funktionsaufruf als Term / Bestandteil eines Terms

52 Aufgaben siehe

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. Unterprogramm-Beschreibungen 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() OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO O OOOO 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? Informationen, die man wissen muss Signatur einer Prozedur Signatur einer Funktion balken_zeichnen(laenge, zeichen) # laenge: natürliche Zahl # zeichen: Zeichen(kette) anteil(bestand, gesamtheit) # bestand: Zahl # gesamtheit: Zahl # Rückgabewert: Dezimalzahl Die Prozedur balken_zeichnen gibt eine Zeichenkette aus, deren Länge dem Wert von laenge entspricht und deren Zeichen dem Wert von zeichen entspricht. Die Funktion anteil liefert eine Dezimalzahl, die den Anteil des Werts von bestand am Wert von gesamtheit angibt. Verhaltens- beschreibung >>> balken_zeichnen(30, "!") !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! >>> anteil(6, 27)

56 Exkurs: Verwaltung v. Daten mit Listen
def population_eingeben(): global population population = input("Population als dreielementige Liste: ") def neue_population_berechnen(): 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(): balkendiagramm(population)

57 Teil 11 Miniprojekt

58 Problem / Auftrag Problem:
Sterben die Deutschen langsam aus? Überaltert unsere Gesellschaft zunehmend? Startwerte (jeweils in Millionen) für das Jahr 2005: Jährige: 12.3; Jährige: 39.1; Jährige: 15.5; über-65-Jährige: 16.3 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.

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.


Herunterladen ppt "Konzepte imperativer Programmierung"

Ähnliche Präsentationen


Google-Anzeigen