Prof. Dr. Bernhard Zimmermann Programmierung Prof. Dr. Sigurd Günther Prof. Dr. Bernhard Zimmermann
Teil 1 Eine spielerische Einführung in die Programmierung in Java mit dem Hamster-Modell Literatur: Dietrich Boles Programmieren spielend gelernt Teubner-Verlag Hamster-Entwicklungsumgebung http://www.java-hamster-modell.de/
Programmierung / Terminologie Informatik Ingenieurswissenschaft Ingenieure entwickeln mit wissenschaftlichen Methoden und Werkzeugen Produkte und Verfahren zur Automatisierung von Prozessen Programmierung Erstellung von Computerprogrammen Algorithmus (benannt nach Al Chwarismi, geb. ca. 780 n. Chr., pers.-arab. Mathematiker und Astronom): Arbeitsanleitung zur Lösung eines Problems
Arbeitsanleitungen
Programmierung / Algorithmus / Motivation Arbeitsanleitungen: Kochrezepte Bastelanleitungen Partituren Spielregeln Aufbau: Menge von unterschiedlichen Anweisungen Charakteristika: Anweisungssequenzen bedingte Anweisungen Anweisungsschleifen Zutaten / Voraussetzungen „schwammige“ Formulierungen Beispiel für eine schwammige Formulierung: mit Salz und Pfeffer herzhaft würzen
Arbeitsanleitungen Kochrezepte Zwiebel feinhacken; Brötchen einweichen; aus gemischtem Hack, Eiern, feingehackter Zwiebel und eingeweichtem und gut ausgedrücktem Brötchen einen Fleischteig bereiten; mit Salz und Pfeffer herzhaft würzen; Anleitung für einen Fußballschiedsrichter: ein Spieler von Mannschaft A wird von einem Spieler von Mannschaft B gefoult; wenn das Foul im Strafraum von Mannschaft B erfolgt, dann pfeife Strafstoß, ansonsten pfeife Freistoß Anleitung beim Mensch-Ärgere-Dich-Nicht-Spiel: Solange ein Spieler eine 6 würfelt, darf er nochmal würfeln.
Arbeitsanleitungen Zutaten beim Kochen: Jenga-Spiel: 250g Mett 250g gemischtes Hack 2 Eier 1 Zwiebel 1 Brötchen Pfeffer Salz Jenga-Spiel: Zubehör: 1 Spielanleitung 45 Holzklötzchen Spielanleitung: solange die Spieler noch Lust haben zu spielen: Turm aufbauen, dabei jeweils die Klötzchen rechtwinklig zueinander versetzen; solange der Turm noch nicht eingestürzt ist, müssen die Spieler der Reihe nach folgendes tun: ein Klötzchen aus dem Turm entnehmen; das Klötzchen oben auf den Turm legen
Sie müssen erst den Nippel durch die Lasche zieh'n und mit der kleinen Kurbel ganz nach unten dreh'n. Dann erscheint ein kleiner Pfeil und da drücken Sie dann drauf und schon geht die Tube auf.
Programmierung / Algorithmus / Definition Arbeitsanleitung zum Lösen eines Problems bzw. einer Aufgabe, die so präzise formuliert ist, daß sie von einem Computer ausgeführt werden kann Ausführung von Algorithmen: durch einen Prozessor (Mensch / Computer) Computer: schnell zuverlässig hohe Speicherfähigkeit Formulierung von Algorithmen: umgangssprachlich Programmiersprache ...
Programmierung / Programmiersprachen / Programme computerverständliche Notation zur Formulierung von Algorithmen Programm (Programmcode, Quellcode, Sourcecode): ein in einer Programmiersprache formulierter Algorithmus ausführbares Programm: Programm in maschinenverständlicher Form Programmaufruf: Ausführung eines ausführbaren Programms Programmieren: Erstellen von Programmen computerverständliche Notation: das Programm kann in dieser Notation prinziell von jedem Computer ausgeführt werden maschinenverständlicher Form: das Programm kann in dieser Notation von der akuell betrachteten Maschine ausgeführt werden
Programmierung „Programmieren im Kleinen“: „Programmieren im Großen“: Lösen kleiner Probleme „Programmieren im Großen“: Lösen komplexer Probleme Software Engineering computerverständliche Notation: das Programm kann in dieser Notation prinziell von jedem Computer ausgeführt werden maschinenverständlicher Form: das Programm kann in dieser Notation von der akuell betrachteten Maschine ausgeführt werden
Programmiersprachen / Klassifikation Anwender: Anfänger Experten Abstrahierungsgrad: maschinennah sehr effizient, aber abhängig vom speziellen Computertyp problemorientiert für den Menschen verständlicher und leichter handhabbar Für den Anfänger: sehr einfach gehalten, mit geringem Sprachumfang
Compiler - Interpreter Zielprogramm in B Compiler Quellprogramm in J Quellprogramm in B Ergebnis Interpreter Daten
Wie verarbeitet ein Computer vorgegebene Programme ? Interpreter Eingaben: Programm + Daten schrittweise Ausführung der einzelnen Programmteile und Berechnung von Zwischenergebnissen Ausgabe: Endergebnis (Letztes Zwischenergebnis) Compiler Eingabe: Programm formuliert in der Quellsprache Transformation des Eingabeprogramms Ausgabe: Semantisch äquivalentes Programm der Zielsprache 1. Auf dem Computer gibt es ein Programm, genannt Interpreter, das als Eingaben ... 2. Auf dem Computer gibt es keinen Interpreter, der Programme der betrachteten Programmiersprache ausführen kann. Wir benötigen dann einen Compiler, der ...
Programmentwicklung / Entwicklungswerkzeuge Editor: Eingabe und Manipulation des Programmcodes Compiler Interpreter Debugger: Auffinden von Laufzeitfehlern Laufzeitsystem: Hilfsprogramme bei der Programmausführung Programmbibliotheken: Sammlungen fertiggestellter Programme
Programmieren mit dem Java-Hamster-Modell
Hamster-Modell / Grundlagen Landschaft Hamster (Blickrichtung Ost) Hamster (Blickrichtung Süd) Hamster (Blickrichtung West) Hamster (Blickrichtung Nord) blockierte Kachel Kachel mit Körnern Auch auf dem „Hamsterfeld“ können beliebig viele Körner liegen.
Hamster-Modell / Grundlagen Hamsteraufgabe: Gegeben sei die folgende Landschaft. Der Hamster soll zwei beliebige Körner fressen. Landschaft: Lösung: ein Hamsterprogramm
Hamster-Modell / Anweisungen / Befehle vier Grundbefehle (Grundanweisungen): vor(); ein Feld nach vorne springen linksUm(); 90 Grad nach links drehen nimm(); ein Korn von der aktuellen Kachel aufnehmen gib(); ein Korn aus dem Maul auf der aktuellen Kachel ablegen vor Befehl vor(); nach Befehl vor(); vor Befehl linksUm(); nach Befehl linksUm();
Hamster-Modell / Anweisungen / Befehle Laufzeitfehler: vor(); ... und Feld vor dem Hamster ist blockiert nimm(); ... und kein Korn auf der aktuellen Kachel vorhanden gib(); ... und kein Korn im Maul des Hamsters die Programmausführung wird abgebrochen! vor Befehl vor(); nach Befehl vor(); Laufzeitfehler!
Hamster-Modell / Anweisungsfolge / Programm void main() { Anweisungsfolge } Kommentare wirken sich nicht auf die Steuerung des Hamsters aus, d.h. sie haben für die Programmausführung keine Bedeutung dienen dem besseren Verständnis eines Programms 2 Notationsmöglichkeiten Kommentar über mehrere Zeilen /* Der Hamster soll sich einmal im Kreis drehen */ 1-zeiliger Kommentar // Der Kommentar endet am Zeilenende können außer in Namen (fast) überall im Programm auftreten
Hamster-Modell / Programm / Beispiel Aufgabe (Bsp1): Gegeben sei das folgende Hamster-Territorium. Programm void main() { // nehme erstes Korn vor(); vor(); nimm(); /* nehme zweites Korn */ linksUm(); vor(); vor(); nimm(); // Korn ablegen vor(); vor(); gib(); // ein Feld nach vorn springen vor(); } Der Hamster soll zwei Körner einsammeln, eins an der Stelle ablegen und ein Feld nach vorn springen.
Die Hamster-Entwicklungsumgebung Editor für Programme Landschaften Compiler Interpreter Aktivierung über den Explorer: In das Verzeichnis „D:\Daten\HamsterV2“ wechseln hamstersimulator.bat starten
Die Hamster-Entwicklungsumgebung - Simulator Interpreter- Steuerung Landschaftseditor Aktivitätsprotokoll ?: Info-Fenster, das u. a. die aktuelle Körneranzahl im Maul anzeigt +1/-1: inkrementieren bzw. dekrementieren der Körneranzahl im Maul
Die Hamster-Entwicklungsumgebung - Editor Compiler- Aktivierung Programm- Editor Compiler- Meldungen
Programmerstellung mit der Hamster-Entwicklungsumgebung neue Programm-Datei (Typ „imperatives Programm“) über den Programm-Editor erzeugen und in einer Datei mit dem Dateityp „Programm“ (Datei-Erweiterung .ham nicht angeben) speichern, z. B. in bsp1 Programm compilieren ggf. Syntaxfehler mit dem Programm-Editor entfernen Landschaft mit dem Landschafts-Editor konstruieren und speichern z.B. bsp1 (Datei-Erweiterung .ter nicht angeben) Hamster-Programm vom Interpreter ausführen lassen (Programmtest) Es wird automatisch die zur Programm-Datei passende .class-Datei benutzt. ggf. Fehler mit dem Programm-Editor entfernen
Programmerstellung mit der Hamster-Entwicklungsumgebung Syntax von Namen, z. B. Dateinamen: Folge von Buchstaben, Ziffern und dem Zeichen ‘_‘, die mit einem Buchstaben beginnen muss. Sonderzeichen und Leerzeichen dürfen in Namen nicht vorkommen!
Hamster-Modell / Aufgabe 1 Der Hamster stehe vor einem Berg. Er soll den Berg erklimmen, das Korn einsammeln, eine Stufe auf der anderen Seite des Bergs absteigen, dort das Korn ablegen und eine weitere Stufe absteigen.
Hamster-Modell / Prozeduren / Motivation Beispielaufgabe: Gegeben sei das folgende Hamster-Territorium. Programm void main() { vor(); vor(); nimm(); linksUm(); linksUm(); linksUm(); vor(); vor(); vor(); } Der Hamster soll zwei Körner einsammeln und anschließend ein Feld nach vorn springen. rechtsUm(); rechtsUm();
Hamster-Modell / Prozeduren / Deklaration Prozedurdeklaration: Vereinbarung eines neuen Befehls void Prozedurname() { Anweisungsfolge } Beispiel: void kehrt() { linksUm(); linksUm(); } ! Prozedurnamen haben die gleiche Syntax wie Dateinamen. (Sonderzeichen oder Leerzeichen sind nicht erlaubt) Prozedurkopf Prozedurrumpf
Hamster-Modell / Prozeduren / Aufruf - Programm Prozeduraufruf: Aufruf eines selbstdefinierten Befehls Prozedurname(); Anweisung Grundanweisung (Grundbefehl) Prozeduraufruf Programm mit Prozeduren void main() { Anweisungsfolge } Prozedurdeklaration ... Prozedurdeklaration Dabei müssen die folgenden Bedingungen gelten: Die Prozedurnamen sind paarweise verschieden. Innerhalb der Prozedurrümpfe werden nur Prozeduren aufgerufen, die auch deklariert sind. Es spielt keine Rolle, ob die aufgerufene Prozedur vor oder nach dem Aufruf deklariert wird! Die Prozedurdeklarationen sind nicht geschachtelt.
Hamster-Modell / Prozeduren / Beispiel Aufgabe: Gegeben sei das folgende Hamster-Territorium. Programm void main() { vor(); vor(); nimm(); rechtsUm(); vor(); vor(); vor(); } Der Hamster soll zwei Körner einsammeln und anschließend ein Feld nach vorn springen. void rechtsUm() { kehrt(); linksUm(); } void kehrt() linksUm(); linksUm();
Hamster-Modell / Prozeduren / Vorteile Vorteile von Prozeduren: Platzeinsparung separate Lösung von Teilproblemen bessere Übersichtlichkeit von Programmen einfachere Fehlerbeseitigung Wiederverwendbarkeit
Hamster-Modell / Aufgabe 2 Wie in Aufgabe 1 steht der Hamster vor einem Berg. Er soll den Berg erklimmen, das Korn einsammeln, eine Stufe auf der anderen Seite des Bergs absteigen, dort das Korn ablegen und eine weitere Stufe absteigen. Strukturieren Sie Ihr Programm mit Hilfe von Prozeduren.
Hamster-Modell / Aufgabe 3 Gegeben sei das linke Hamster-Territorium. Der Hamster soll in allen Feldern der beiden Diagonalen jeweils ein Korn ablegen, so daß nach der Beendigung des Programms das rechte Hamster-Territorium vorliegt. Der Hamster habe anfangs genau 9 Körner im Maul. Strukturieren Sie Ihr Programm mit Hilfe von Prozeduren!
Hamster-Modell / Aufgabe 4 Der Hamster hat Schiffbruch erlitten und ist auf einer einsamen Insel gestrandet. Er hat zum Glück noch 100 Körner im Maul. Um Flugzeuge auf sich aufmerksam zu machen, will er aus den Körnern die Buchstaben SOS ablegen. Helfen Sie ihm dabei! Der Hamster steht anfangs in der linken unteren Ecke des Territoriums mit Blickrichtung Ost. Strukturieren Sie Ihr Programm mit Hilfe von Prozeduren!
Hamster-Modell / Ausblick Auswahlanweisungen Wiederholungsanweisungen Funktionen Hamster, die nicht mehr auf einer fest vorgegebenen Landschaft operieren, sondern auf allen, die bestimmte Voraussetzungen erfüllen Vermeidung von Laufzeitfehlern Hamster mit Gedächtnis (Boolesche Variablen) Hamster mit Gedächtnis (Zahlen) Integer-Funktionen Verallgemeinerungen von Daten und Funktionen Prozeduren und Funktionen mit Parametern