der Universität Oldenburg

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
Die Schulkonsole für Lehrerinnen und Lehrer
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil3.
Einführung in die Informatik: Programmierung und Software-Entwicklung
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Prof. Dr. Bernhard Zimmermann
Vorteile der Online-Produkte
Telefonnummer.
CPCP Institute of Clinical Pharmacology AGAH Annual Meeting, 29. Februar 2004, Berlin, Praktischer Umgang mit den Genehmigungsanträgen gemäß 12. AMG Novelle.
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.
Imperative Programmierung
der Universität Oldenburg
der Universität Oldenburg
= = = = 47 = 47 = 48 = =
Java: Objektorientierte Programmierung
Rechneraufbau & Rechnerstrukturen, Folie 2.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 2.
© 2006 W. Oberschelp, G. Vossen Rechneraufbau & Rechnerstrukturen, Folie 2.1.
Grundkurs Theoretische Informatik, Folie 2.1 © 2006 G. Vossen,K.-U. Witt Grundkurs Theoretische Informatik Kapitel 2 Gottfried Vossen Kurt-Ulrich Witt.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Imperative Programmierung Funktionen und Parameter
Imperative Programmierung
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil2.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
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 Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Thema des Informatikkurses der Klasse 8
Das Java-Hamstermodell
Schieferdeckarten Dach.ppt


Rechneraufbau & Rechnerstrukturen, Folie 12.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 12.
1. 2 Schreibprojekt Zeitung 3 Überblick 1. Vorstellung ComputerLernWerkstatt 2. Schreibprojekt: Zeitung 2.1 Konzeption des Kurses 2.2 Projektverlauf.
20:00.
„Küsse deine Freunde“ – FlexKom-App teilen
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
NEU! 1 2. Wo kommt diese Art von Rezeptor im Körper vor?
Analyse von Ablaufdiagrammen
PROCAM Score Alter (Jahre)
Vorlesung Mai 2000 Konstruktion des Voronoi-Diagramms II
Symmetrische Blockchiffren DES – der Data Encryption Standard
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.
Analyseprodukte numerischer Modelle
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Technische Frage Technische Frage Bitte löse die folgende Gleichung:
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Bildergalerie PRESEASON CAMP Juni 2014 Romanshorn Get ready for the Season!
Berechenbarkeit Klaus Becker Berechenbarkeit.
1 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt Wie.
Das Java-Hamster-Modell
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
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/ Übungsaufgabe vom Logische Ausdrücke 1.true & false | true 2.(10>2)
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
 Präsentation transkript:

der Universität Oldenburg Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 3 Dietrich Boles

Gliederung von Vorlesung 3 Das Hamster-Modell Motivation Grundlagen Anweisungen und Programme Prozeduren Auswahlanweisungen Wiederholungsanweisungen Boolesche Funktionen Programmentwurf

Hamster-Modell / Motivation Spielerisches Erlernen wichtiger Programmierkonzepte Steuerung eines virtuellen Hamsters durch eine virtuelle Landschaft Erlernen imperativer Sprachkonstrukte inkrementelle Erweiterung des „Sprachschatzes“ Syntax: an Java angelehnt Vorbilder: LOGO, Karel the Robot „Learning-by-Doing“ Viele Übungsaufgaben

Hamster-Modell / Grundlagen

Hamster-Modell / Grundlagen Hamsteraufgaben: Gegeben sei die folgende Landschaft. Der Hamster soll zwei beliebige Körner fressen. Landschaft: Lösung: ein Hamsterprogramm

Hamster-Modell / Grundlagen Lexikalik: 16-Bit-Zeichensatz Unicode Trennung von Token durch Trennzeichen (Leerzeichen, Tabulatoren, Zeilenvorschubzeichen, Seitenvorschubzeichen) Bezeichner: Beginn mit Unterstrich („_“) oder Dollar („$“) oder Buchstaben weitere Buchstaben, Unterstriche oder Ziffern beliebig lang Unterscheidung von Groß- und Kleinbuchstaben Schlüsselwörter:

Hamster-Modell / Anweisungen / Befehle vier Grundbefehle: vor(); ein Feld nach vorne springen linksUm(); 90 Grad nach links schauen nimm(); ein Korn von der aktuellen Kachel aufnehmen gib(); ein Korn aus dem Maul auf der aktuellen Kachel ablegen

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

Hamster-Modell / Anweisungen / Programm

Hamster-Modell / Anweisungen / Kommentare

Hamster-Modell / Anweisungen / Beispiel Aufgabe: Landschaft: Gegeben sei das folgende Hamster-Territorium. Der Hamster soll zwei Körner einsammeln. Programm: void main() { // nehme erstes Korn vor(); vor(); nimm(); /* nehme zweites Korn */ linksUm(); vor(); vor(); nimm(); }

Hamster-Modell / Anweisungen / Beispiel Aufgabe: Landschaft: Gegeben sei das folgende Territorium. Der Hamster habe vier Körner im Maul. Er soll in jeder Ecke eins ablegen und in seine Ausgangssituation zurückkehren. Programm: vorher nachher void main() { // begib dich an den Rand vor(); linksUm(); // laufe in die rechte untere Ecke vor(); vor(); vor(); vor(); gib(); linksUm(); // laufe in die rechte obere Ecke vor(); vor(); vor(); gib(); linksUm(); // laufe in die linke obere Ecke vor(); vor(); vor(); vor(); vor(); gib(); linksUm(); // laufe in die linke untere Ecke // begib dich in die Ausgangsposition zurück vor(); linksUm(); vor(); linksUm(); linksUm(); }

Hamster-Modell / Prozeduren / Motivation Der Hamster soll zwei Körner einsammeln. void main() { vor(); vor(); nimm(); linksUm(); linksUm(); linksUm(); } rechtsUm(); rechtsUm();

Hamster-Modell / Prozeduren / Definition Prozedurdefinition: Vereinbarung eines neuen Befehls

Hamster-Modell / Prozeduren / Aufruf Prozeduraufruf: Aufruf eines selbstdefinierten Befehls

Hamster-Modell / Prozeduren / Programme Programm (mit Prozeduren):

Hamster-Modell / Prozeduren / Beispiel Lösung des Motivationsproblems: Der Hamster soll zwei Körner einsammeln. void main() { vor(); vor(); nimm(); rechtsUm(); } void rechtsUm() { kehrt(); linksUm(); } void kehrt() { linksUm(); linksUm();

Hamster-Modell / Prozeduren / Vorteile Vorteile von Prozeduren: bessere Übersichtlichkeit von Programmen separate Lösung von Teilproblemen Platzeinsparung einfachere Fehlerbeseitigung Flexibilität Wiederverwendbarkeit

Hamster-Modell / Prozeduren / Beispiel Aufgabe: Landschaft: Gegeben sei das folgende Territorium. Der Hamster soll den Berg erklimmen. Programm: void main() { laufeZumBerg(); erklimmeErsteStufe(); erklimmeZweiteStufe(); erklimmeDritteStufe(); erklimmeGipfel(); } void laufeZumBerg() { vor(); void erklimmeErsteStufe() { erklimmeStufe(); void erklimmeZweiteStufe() { erklimmeStufe(); } void erklimmeDritteStufe() { void erklimmeGipfel() { void erklimmeStufe() { linksUm(); vor(); linksUm();linksUm();linksUm(); vor();

Hamster-Modell / Auswahl / Test-Befehle drei Test-Befehle: vornFrei() ist das Feld vor dem Hamster blockiert? maulLeer() ist das Maul des Hamsters leer? kornDa() liegt ein Korn auf der aktuellen Kachel?

Hamster-Modell / Auswahl / Boolesche Ausdrücke

Hamster-Modell / Auswahl / Blockanweisung

Hamster-Modell / Auswahl / Leeranweisung

Hamster-Modell / Auswahl / bedingte Anweisung

Hamster-Modell / Auswahl / bedingte Anweisung Beispiele: void sicheresVor() { if (vornFrei()) { vor(); } void sicheresGib() { if (!maulLeer()) { gib(); void sicheresNimm() { if (kornDa()) nimm(); if (kornDa() && vornFrei()) { nimm(); vor(); } if (kornDa()) if (vornFrei()) { nimm(); vor();

Hamster-Modell / Auswahl / Alternativanweisung if (vornFrei()) { vor(); } else { linksUm(); } if (maulLeer()) ; else gib(); if (vornFrei()) vor(); else if (kornDa()) nimm(); else if (!maulLeer()) gib(); else linksUm();

Hamster-Modell / Auswahl / Beispiel Aufgabe: Landschaft: Gegeben sei das folgende Territorium. Solange möglich soll der Hamster in jeder Ecke ein Korn ablegen. Programm: void main() { if (!maulLeer()) { gib(); laufeInNaechsteEcke(); } } } } } void laufeInNaechsteEcke() { vor(); vor(); linksUm(); }

Hamster-Modell / Wiederholung / Motivation Motivation: Der Hamster soll bis zur nächsten Wand laufen. void main() { vor(); vor(); } void main() { vor(); vor(); } Allgemeingültig: solange vornFrei(): vor();

Hamster-Modell / Wiederholung / while-Schleife

Hamster-Modell / Wiederholung / Beispiele Aufgabe: Landschaft beliebig! Der Hamster soll bis zur nächsten Wand laufen. void main() { while (vornFrei()) { vor(); } void laufeBisZurNaechstenWandUndSammle() { sammle(); while (vornFrei()) { vor(); } void sammle() { while (kornDa()) nimm();

Hamster-Modell / Wiederholung / do-Schleife void main() { do { nimm(); } while (kornDa()); } void main() { do { vor(); if (!maulLeer()) gib(); } while (vornFrei()); }

Hamster-Modell / Wiederholung / Endlosschleife void main() { while (vornFrei()) { linksUm(); }

Hamster-Modell / Wiederholung / Beispiel Aufgabe: Typische Landschaften: Der Hamster steht vor einem regelmäßigen Berg unbekannter Höhe. Er soll den Gipfel erklimmen. Programm: void main() { laufeZumBerg(); erklimmeGipfel(); } void laufeZumBerg() { while (vornFrei()) vor(); void erklimmeGipfel() { do { erklimmeEineStufe(); } while (!vornFrei()); void erklimmeEineStufe() { linksUm(); vor(); rechtsUm(); } void rechtsUm() {

Hamster-Modell / Test-Funktionen / Motivation Prozeduren: Definition neuer Befehle Test-Funktionen: Definition neuer Test-Befehle mauerDa() linksFrei() rechtsFrei() fuenfKoernerDa() ...

Hamster-Modell / Test-Funktionen / return return !kornDa() && vornFrei();

Hamster-Modell / Test-Funktionen / Definition Zusatzbedingung: In jedem möglichen Weg durch den Rumpf muss eine boolesche return-Anweisung stehen!

Hamster-Modell / Test-Funktionen / Aufruf

Hamster-Modell / Test-Funktionen / Beispiele boolean mauerDa() { return !vornFrei(); } boolean linksFrei() { linksUm(); if (vornFrei()) { rechtsUm(); return true; } else { return false; void main() { while (!mauerDa() && !linksFrei()) { vor(); } if (linksFrei()) linksUm(); void rechtsUm() {

Hamster-Modell / Test-Funktionen / Seiteneffekte boolean linksFrei() { linksUm(); return vornFrei(); } void main() { if (linksFrei()) ; if (!linksFrei()) else

Hamster-Modell / Testfunktionen / Beispiel Aufgabe: Typische Landschaft: Der Hamster (mit mindestens einem Korn im Maul) soll entlang der Wand laufen, bis er zur Ausgangsposition zurückgekehrt ist. Programm: void main() { gib(); // Markierung vor(); while (!kornDa()) { while (vornFrei() && !rechtsFrei() && !kornDa()) { } if (!kornDa()) { if (rechtsFrei()) { rechtsUm(); } else { linksUm() } } } } boolean rechtsFrei() { rechtsUm(); if (vornFrei()) { linksUm(); return true; } else { return false; } void rechtsUm() { linksUm(); linksUm();

Hamster-Modell / Programmentwurf Problem Analyse: exakte Formulierung der Aufgabe Entwurf: Entwicklung eines Algorithmus Implementierung: Codierung; Eingabe in den Rechner; Compilation Test: Verifikation der Korrektheit Dokumentation: Nachlass für andere Personen Analyse D o k u m e n t a i Entwurf Implementierung Test Programm

Hamster-Modell / Programm-Entwurf / Problem Der Hamster steht vor einem Berg unbekannter Höhe. Er soll den Gipfel erklimmen und auf dem Gipfel anhalten. Auf dem Weg zum Gipfel soll er auf jeder Stufe genau ein Korn ablegen.

Hamster-Modell / Programm-Entwurf / Analyse Präzisierung der Aufgabe: Der Hamster steht mit Blickrichtung West vor einem regelmäßigen Berg unbekannter Höhe (ohne Überhänge). Er muss nicht unbedingt direkt vor dem Berg stehen. Die Stufen des Berges sind jeweils eine Mauer hoch. Der Hamster habe mindestens so viele Körner im Maul, wie Stufen existieren. Auf dem Territorium befinden sich keine Körner. Außer den Mauern des Berges befinden sich keine Mauern im Territorium. Der Hamster soll den Berg erklimmen und auf dem Gipfel anhalten. Auf jeder Stufe - und nur dort! - soll er ein Korn ablegen. Auf dem Weg zum Gipfel muss er immer in Berührung zur Wand bleiben. Anfangsgrößen / Eingabewerte Position des Hamsters Blickrichtung des Hamsters Anzahl Körner im Maul des Hamsters Körner im Territorium Mauern im Territorium Endgrößen / Ausgabewerte Constraints bzgl. des Lösungsweges

Hamster-Modell / Programm-Entwurf / Entwurf Verfahren: Schrittweise Verfeinerung / Top-Down-Entwurf Ziel: Komplexitätsreduktion Prinzip: Gesamtproblem zu komplex => Aufteilung in einfachere Teilprobleme Lösen der Teilprobleme: Teilproblem zu komplex => Aufteilung in (noch) einfachere Teilprobleme ... Zusammensetzung der Lösungen der Teilprobleme zur Lösung des (übergeordneten) Teilproblems Zusammensetzung der Lösungen der Teilprobleme zur Lösung des Gesamtproblems Vergleich: Puzzlen

Hamster-Modell / Programm-Entwurf / Entwurf Gesamtproblem: Der Hamster soll bis zum Berg laufen und dann den Berg erklimmen. Teilprobleme: Der Hamster soll bis zum Berg laufen. Der Hamster soll den Berg erklimmen. // der Hamster soll bis zum Berg laufen und dann den // Berg erklimmen void main() { laufeZumBerg(); erklimmeDenBerg(); } // der Hamster soll bis zum Berg laufen void laufeZumBerg() {} // der Hamster soll den Berg erklimmen void erklimmeDenBerg() {}

Hamster-Modell / Programm-Entwurf / Entwurf Teilproblem 1: Der Hamster soll bis zum Berg laufen. // der Hamster soll bis zum Berg laufen void laufeZumBerg() { while (vornFrei()) { vor(); } gib(); Teilproblem 2: Der Hamster soll den Berg erklimmen. // der Hamster soll den Berg erklimmen void erklimmeDenBerg() { do { erklimmeEineStufe(); } while (!gipfelErreicht()); } void erklimmeEineStufe() {} boolean gipfelErreicht() {} Teilproblem 2.1 Teilproblem 2.2

Hamster-Modell / Programm-Entwurf / Entwurf Teilproblem 2.1: Der Hamster soll eine Stufe erklimmen. void erklimmeEineStufe() { linksUm(); vor(); rechtsUm(); vor(); gib(); } void rechtsUm() { linksUm(); linksUm(); linksUm(); Teilproblem 2.2: Ist der Gipfel erreicht? boolean gipfelErreicht() { return vornFrei(); }

Hamster-Modell / Programm-Entwurf / Implement. Codierung in die Entwurfsphase integriert Restaufgaben: Eingabe des Programms in den Rechner Compilation Anmerkungen / Hinweise: kein Spaghetti-Code! Entwurf mit Bleistift und Papier! Auf übersichtliche Strukturierung achten! Kommentare verwenden! Prozeduren / Funktionen definieren! Aussagekräftige Bezeichner wählen! void main() { while (vornFrei()) vor(); gib(); while (!vornFrei()) { linksUm(); vor(); r(); vor(); gib(); } } void r() { linksUm();linksUm();linksUm();}

Hamster-Modell / Programm-Entwurf / Test Verifikation der Korrektheit und Vollständigkeit Konstruktion einer Testmenge: disjunkte Zerlegung der Menge der zulässigen Anfangsgrößen in typische Klassen Vertreter jeder Klasse wählen Grenzwerte beachten erwartetes Ergebnis notieren Erfahrung und Intuition notwendig! Ausführung des Programms mit allen Elementen der Testmenge: Ergebnisse (Lösungsweg/Endgrößen) überprüfen Testläufe/Ergebnisse protokollieren

Hamster-Modell / Programm-Entwurf / Dokument. Zur Dokumentation gehören: eine exakte Problemstellung eine verständliche Beschreibung des entwickelten Algorithmus der Programmcode die gewählte Testmenge mit Protokollen der durchgeführten Testläufe eine Beschreibung von aufgetretenen Problemen alternative Lösungsansätze