Konzepte imperativer Programmierung

Slides:



Advertisements
Ähnliche Präsentationen
Imperative Programmierung
Advertisements

OStR Dipl. Ing. Carsten Kraft
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil3.
Forschungszentrum caesar
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Zusammenfassung der Vorwoche
Telefonnummer.
Modelle und Methoden der Linearen und Nichtlinearen Optimierung (Ausgewählte Methoden und Fallstudien) U N I V E R S I T Ä T H A M B U R G November 2011.
Workshop zur Medienarbeit der katholischen Kirche Aspekte des Religionsmonitors Berlin, 02. April 2008.
1 JIM-Studie 2010 Jugend, Information, (Multi-)Media Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
= = = = 47 = 47 = 48 = =
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
ARRAY oder FELD oder VEKTOR
Internet facts 2008-II Graphiken zu dem Berichtsband AGOF e.V. September 2008.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil2.
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Prof. Dr. Bernhard Wasmayr
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Heute: Scherenzange zeichnen
Teil 4 Kontrollstrukturen.
AWA 2007 Natur und Umwelt Natürlich Leben
Rechneraufbau & Rechnerstrukturen, Folie 12.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 12.
Grundkonzepte Java - Klassendefinition
20:00.
Java programmieren mit JavaKara
Algorithmisches Problemlösen mit Scratch
Delphi II - OOP IFB Fortbildung
Algorithmisches Problemlösen mit Kara
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Eine Einführung in die CD-ROM
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Wir üben die Malsätzchen
Syntaxanalyse Bottom-Up und LR(0)
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Einführung in die Programmierung
Einführung in die Programmiersprache C 4
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
PROCAM Score Alter (Jahre)
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Symmetrische Blockchiffren DES – der Data Encryption Standard
Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014.
Zahlentheorie und Zahlenspiele Hartmut Menzer, Ingo Althöfer ISBN: © 2014 Oldenbourg Wissenschaftsverlag GmbH Abbildungsübersicht / List.
MINDREADER Ein magisch - interaktives Erlebnis mit ENZO PAOLO
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
PHP: Operatoren und Kontrollstrukturen
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
Folie Beispiel für eine Einzelauswertung der Gemeindedaten (fiktive Daten)
1 Arbeitsgemeinschaft Biologische Psychiatrie Verordnungsgewohnheiten von Psychopharmaka Statuserhebung 2005 W.Günther G.Laux T.Messer N.Müller M.Schmauss.
Technische Frage Technische Frage Bitte löse die folgende Gleichung:
Unternehmensbewertung Thomas Hering ISBN: © 2014 Oldenbourg Wissenschaftsverlag GmbH Abbildungsübersicht / List of Figures Tabellenübersicht.
Folie Einzelauswertung der Gemeindedaten
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Berechenbarkeit Klaus Becker Berechenbarkeit.
Datum:17. Dezember 2014 Thema:IFRS Update zum Jahresende – die Neuerungen im Überblick Referent:Eberhard Grötzner, EMA ® Anlass:12. Arbeitskreis Internationale.
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Programmieren 1 C++ Aufgaben / Übungen.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
 Präsentation transkript:

Konzepte imperativer Programmierung Klaus Becker 2008

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

Teil 1 Variablen

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.

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.

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?

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

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.

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

Aufgaben siehe www.inf-schule.de

Teil 2 Programme

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

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

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

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

Aufgaben siehe www.inf-schule.de

Teil 3 Datentypen

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

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

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

Teil 4 Entscheidungen

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.

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

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!"

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!"

Aufgaben siehe www.inf-schule.de

Teil 5 Wiederholungen

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

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]

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

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]

Aufgaben siehe www.inf-schule.de

Teil 6 Bedingungen

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 : 30 300 500 Schritt 1 : 1900 7 150 Schritt 2 : 321 475 3 Schritt 3 : 1431 80 237 Schritt 4 : 714 357 40 Schritt 5 : 1151 178 178 ... Schritt 10 : 972 249 119 Schritt 11 : 985 243 124 Schritt 12 : 977 246 121 Schritt 13 : 980 244 123 Schritt 14 : 978 245 122 Schritt 15 : 979 244 122 Schritt 16 : 976 244 122 Schritt 17 : 976 244 122 Schritt 18 : 976 244 122 Schritt 19 : 976 244 122 Schritt 20 : 976 244 122 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): ...

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

Aufgaben siehe www.inf-schule.de

Teil 7 Prozeduren

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.

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

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!

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!

Aufgaben siehe www.inf-schule.de

Teil 8 Parameter

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.

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

Aufgaben siehe www.inf-schule.de

Teil 9 Funktionen

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 : 6 9 12 OOOOOOOOOOO OOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOO Schritt 1 : 60 2 4 OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO O OOO Schritt 2 : 16 20 1 OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOO Schritt 3 : 82 5 10 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

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

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, 6+9+12) 0.22222222222222221 >>> absolut(0.222, 50) 11.1 Funktionswert als Berechnungsergebnis Funktionsaufruf

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

Aufgaben siehe www.inf-schule.de

Teil 10 Schnittstellen

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

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) 0.22222222222222221

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)

Teil 11 Miniprojekt

Problem / Auftrag Problem: Sterben die Deutschen langsam aus? Überaltert unsere Gesellschaft zunehmend? 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 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.

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

Algorithmen / Programm Aufgabe: Ändern Sie die Algorithmen zur Entwicklung der Mäusepopulation geeignet ab. Entwickeln Sie ein gut strukturiertes und hinreichend dokumentiertes Programm.

Getestetes Produkt Aufgabe: Testen Sie das entwickelte Programm. Dokumentieren Sie die Testergebnisse.