3. Bedingte Anweisungen

Ähnliche Dokumente
6. Wiederholungen und Zählschleifen

Staubsauger-Roboter. Als Vorlage dienen dir drei Klassen: RECHTECK Damit kannst du die Wände des Raums darstellen.

9. Vererbung und Polymorphie. Informatik Vererbung und Polymorphie 1

Projekt: Staubsauger-Roboter

Informatik 10 Objektorientiertes Modellieren und Programmieren mit Java

Klassen-Diagramm. spielt mit > 1. schlägt mit > 1. hat als Rand > enthält > 1. besteht aus >

2. Vererbung und Kapselung

In der heutigen Betrachtungsweise der Informatik besteht die Welt aus Objekten. Jedem Objekt liegt ein Bauplan zugrunde, nach dem es erstellt wurde.

ÜBUNGEN ZUR OBJEKTORIENTIERTEN MODELLIERUNG

7. Arrays. Beim Deklarieren und Initialisieren der Liste bräuchte man oft zueinander sehr ähnlichen Code:

Anwendung Kamel-Simulation

Inf-10 NTG Objektorientiertes Programmieren Projekt PingPong OStR Michael Ganshorn 1 Michael Andonie

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

Programmieren I. Kapitel 5. Kontrollfluss

Kapitel 10 Mampfi im Labyrinth

Kapitel 18 Jetzt kommt Bewegung ins Spiel

Klassen-Diagramm. Grund-Erfahrung mit der EDU-Variante der Engine-Alpha alpha.org Felder Deklaration und Initialisierung, Zugriff

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Zählschleifen Wiederholung mit fester Anzahl

Elementare Konzepte von

Javakurs für Anfänger

2 Programmieren in Java I noch ohne Nachbearbeitung

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Computeranwendung und Programmierung (CuP)

G 8 Inf- 10 O S tr Michae l Gansh orn 45. Vererbung stellt man im Klassen-Diagramm durch einen durchgezogenen Pfeil mit einem Dreieck als Spitze dar.

Programmierstarthilfe SS 2010 Fakultät für Ingenieurwissenschaften und Informatik 2. Blatt Für die Woche vom 3.5. bis zum 7.5.

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Programmiertechnik Klassenvariablen & Instantiierung

3. Das erste eigene Programm mit Greenfoot: Litte Crab

Greenfoot: Verzweigungen

Greenfoot: Verzweigungen Nicolas Ruh und Dieter Koch

Einführung in die Programmierung mit BlueJ

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

Objektorientierte Analyse Teil IV

Javakurs für Anfänger

Übungsblatt 1. Java Vorkurs (WS 2017)

System.out.println("TEXT");

Intensivübung zu Algorithmen und Datenstrukturen

Beispielprüfung CuP WS 2015/2016

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Vorbereitende Aufgaben

1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster

hue13 January 30, 2017

1 Grundlagen der Objektorientierung

Created by Michael Kirsch & Beat Rossmy

C# - Einführung in die Programmiersprache Bedingte Anweisungen und Schleifen

hue12 January 24, 2017

Grundwissen Informatik JS Oktober 2016

Probeklausur: Programmierung WS04/05

Übungen zur Vorlesung Wissenschaftliches Rechnen I. Grundelemente von Java. Eine Anweisung. wird mit dem Wertzuweisungsoperator = geschrieben.

Einführung in das Programmieren Probeklausur Lösungen

Objektorientierte Programmierung OOP Programmieren mit Java

Probeklausur Java Einführung in die Informatik. Wintersemester 2016/2017

Lernteam OOP3 SW Programmieren 1 - H1103 Felix Rohrer

Das aktuelle Objekt der Klasse AMPEL gibt an die Objekte gruen, gelb und rot der Klasse LAMPE die Botschaft, die Methode aus() aufzurufen.

M3 M4 M7 VORNAME: Nom-Kenner VERTIEFUNG: Ausdruck des vorab bekannt gemachten Quelltextes

Grundlagen. Übungen. Klassen, Attribute, Assoziationen, Methoden. Grundlagen_Klassen_Attribute_Assoziationen_Methoden.odt. Christine Janischek

Kapitel 1: Die ersten Schritte 1

Programmierung für Mathematik HS11

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

Wir wollen im Folgenden dieses uralte Spiel aus objektorientierter Sichtweise analysieren und es Stück für Stück programmieren.

Aufgabenblatt 1. Kompetenzstufe 1. Allgemeine Informationen zum Aufgabenblatt:

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

Probeklausur Informatik 2 Sommersemester 2013

4. Modellieren und Diagrammarten

Vorbereitende Aufgaben

M3 M4 M7 VORNAME: Gewinnt VERTIEFUNG:

Objektorientierung. Marc Satkowski 20. November C# Kurs

Fakultät IV Elektrotechnik/Informatik

Java: Eine kurze Einführung an Beispielen

Weitere Spielvarianten für mehr Action

Einführung in die Programmierung für Nebenfach Medieninformatik. Beat Rossmy, Michael Kirsch

Java programmieren mit JavaKara. Eine Zusammenfassung in Beispielen

1 - EIN NEUES GAMEGRID ANLEGEN

Objektorientierte Programmierung Studiengang Medieninformatik

Programmiertechnik Kontrollstrukturen

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

if ( Logischer Operator ) { } else { Anweisungen false

Einstieg in die Informatik mit Java

Einführung in die Programmierung für Nebenfach Medieninformatik. Beat Rossmy, Michael Kirsch

JAVA - Methoden

Programmierung für Mathematik (HS13)

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Erste Java-Programme (Java Wiederholung & Vererbung)

Einführung in die Programmierung I. 2.4 Felder. Thomas R. Gross. Department Informatik ETH Zürich

Java Anweisungen und Ablaufsteuerung

Umsetzung einer Klassenkarte in einer Programmiersprache

Überschreiben von Methoden

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Welche Informatik-Kenntnisse bringen Sie mit?

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Transkript:

3. Bedingte Anweisungen Fallunterscheidungen der Form WENN...DANN... in der Informatik kennst du aus der 7. Klasse beim Programmieren mit Karol sowie aus der 9. Klasse beim Arbeiten mit Tabellen und Datenbanken. Grafisch kann man sie als Struktogramm darstellen. Beispiel: 1

Einfache bedingte Anweisung if ( Bedingung ) { Anweisung; Die Bedingung ist ein Ausdruck oder ein Methodenaufruf, der den Wert true oder false zurückgibt. Beispiele : if ( a < b ) { a = a + 1; if ( name == Richtig ) { return name; if ( karol.istziegel() ) { karol.aufheben() ; 2

Beispiel : if ( a < b ) { a = a + 1; else { a = a 1; Bedingte Anweisung mit Alternative if ( Bedingung ) { Anweisung1; else { Anweisung2; 3

Mehrfache Auswahl if ( Fall 1 ) { Anweisung 1; else if ( Fall 2 ) { Anweisung 2; else if ( Fall 3 ) { Anweisung 3; 4

Mehrfache Auswahl mit Alternative if ( Fall 1 ) { Anweisung 1; else if ( Fall 2 ) { Anweisung 2; else if ( Fall 3 ) { Anweisung 3; else { Anweisung 4; 5

Mehrfache Auswahl mit Alternative Beispiel : if ( tag == Montag ) { b = 1; else if ( tag == Dienstag ) { b = 2; else if ( tag == Mittwoch ) { b = 3; else { b = -1; 6

Übung 1 JAVA Karol a) Kopiere das BlueJ-Projekt JavaKarol in deinen Ordner und ändere den Namen im JavaKarolBedingungen ab. b) Erzeuge darin eine neue Klasse STEUERUNG nach nebenstehender Klassenkarte. Ein vor einem Attribut bedeutet private. Die Welt wird im Quelltext durch den Befehl welt = new WELT("welt-01.kdw"); erzeugt. 7

Übung 1 JAVA Karol c) Schreibe die Methode aufrauemen() und teste sie. public void aufraeumen() { if( karol.istziegel() ) { karol.aufheben() ; karol.schritt(); 8

Übung 1 JAVA Karol d) Schreibe die Methode invertieren() und teste sie. Verwende wie im Struktogramm vorgegeben die bedingte Anweisung mit Alternative. (if und else) Tipp: Um zu erfahren, welche Methoden die Klasse ROBOTER hat und erbt, kann man im Editor nach dem Eintippen von karol. ctrl(strg)+leertaste drücken und BlueJ listet alle Methoden auf. Noch informativer ist es, die Projektdokumentation zu öffnen. (BlueJ Menü -Tools - Project Documentation) 9

Übung 1 JAVA Karol e) Schreibe die Methode vorsichtigerschritt(), welche karol einen Schritt machen lässt, wenn keine Wand vor ihm ist. 10

Übung 2 Greifroboter a) Kopiere das BlueJ-Projekt GreifRoboter und ändere den Namen in GreifRoboterBedingungen ab. Erstelle eine Klasse SORTIERER, die von Roboter erbt. Denke an einen Konstruktor, der den Konstruktor der Oberklasse aufruft. 11

Übung 2 Greifroboter b) Schreibe in der Klasse SORTIERER eine Methode sortieregruen(), welche die nächste Kugel greift und fallen lässt, wenn sie nicht grün ist. Grüne Kugeln werden in den rechten Becher gelegt und der Arm wird anschließend wieder zum Fließband zurück bewegt. Ob die Farbe grün ist, testest du so: if( kugelfarbegeben() == grün )... 12

Übung 2 Greifroboter c) Schreibe eine weitere Methode sortiere(string farbe), welche sich genauso verhält, aber die gewünschte Farbe als Übergabeparameter hat. Erlaubte Farben sind: rot magenta grün blau weiß 13

Übung 3 Greifroboter a) Öffne das Projekt GreifRoboterBedingungen aus Übung 2. Schreibe eine Methode nimmdrei(), welche eine Kugel vom Fließband nimmt und in den linken Becher wirft, wenn die Nummer nicht 3 ist. Wenn die Nummer 3 ist, wird die Kugel in den rechten Becher geworfen. Anschließend wird in beiden Fällen der Arm wieder zum Fließband zurück bewegt. Tipp: Falls dir das Zurückbewegen des Arms auf diese Weise nicht gelingt, bewege den Arm in jedem einzelnen Fall gleich wieder zurück. 14

Übung 3 Greifroboter b) Schreibe eine Methode nimm(int nummer), welche sich genauso verhält, aber die gewünschte Nummer als Übergabeparameter hat. c) Schreibe eine weitere Methode nimmkleiner(int nummer), welche alle Kugeln, deren Nummer kleiner als der Wert des Übergabeparameters sind, in den linken Becher wirft. Ist die Nummer gleich oder größer, wird sie in den rechten Becher geworfen. 15

Übung 4 Greifroboter2 a) Öffne das Projekt GreifRoboter2_Bedingungen. Erzeuge ein Objekt von SORTIERER. Es gibt nun vier Becher. Um den Greifarm zu den Bechern zu bewegen, sind jeweils, ausgehend von der Position am Fließband, die Winkel 60, 100, 135 und 170 nötig. Der Winkel 210 (= -150) dreht den Arm nach rechts, so dass eine Kugel ins Leere fallen würde. Teste diese Methoden. 16

Übung 4 Greifroboter2 b) Schreibe eine Methode sortierefarben(), die folgende Mehrfachauswahl mit Alternative umsetzt. Verwende if - else if - else. 17

Übung 4 Greifroboter2 c)* Anstelle der Konstruktion mit if, else if und else gibt es in Java auch die switch case Konstruktion. Die Variable kann vom Typ char, int oder ein String-Objekt sein. (In unserem Beispiel die Farbe der Kugel) Fall 1, Fall 2,... steht dann jeweils einfach für einen möglichen Wert der Variable. (In unserem Beispiel rot, blau,...) In den Block mit default kommt man, wenn keiner der Fälle zutrifft. Schreibe eine Methode sortierefarben2(), die dasselbe leistet wie sortierefarben(). Verwende switch - case. switch (Variable){ case Fall 1: Anweisung 1; break; case Fall 2: Anweisung 2; break; case Fall 3: Anweisung 3; break;... default : Anweisung 1; break; 18

Bedingte Anweisungen boolesche Variablen Oft muss man die booleschen Variablen in den Bedingungen verknüpfen. Beispiel 1: 19

Bedingte Anweisungen boolesche Variablen Oft muss man die booleschen Variablen in den Bedingungen verknüpfen. Beispiel 2: Die Farbe muss rot sein und zugleich muss die Nummer gerade sein. 20

Bedingte Anweisungen boolesche Variablen Oft muss man die booleschen Variablen in den Bedingungen verknüpfen. Beispiel 3: Beispiele hierfür: Nr. 2, rot à 2.Becher Nr.6, blau à 2.Becher Nr.5, rot à 2.Becher Nr.7, weiß à1.becher 21

Die OR (ODER) Verknüpfung (in Java: a b) a b a OR b false false false false true true true false true true true true a OR b liefert nur dann false, wenn sowohl a als auch b den Wert false hat. 22

Die AND (UND) Verknüpfung (in Java: a&&b) a b a AND b false false false false true false true false false true true true a AND b liefert nur dann true, wenn sowohl a als auch b den Wert true hat. 23

Der NOT (NICHT) Operator (in Java:!a) a!a false true true true a ungleich b schreibt man in Java so: a!=b oder!(a==b) 24

! ( a b ) =!a &&!b! ( a && b) =!a!b Vergleiche dazu das Beispiel 3: NICHT (rot ODER gerade) ist dasselbe wie NICHT rot UND NICHT gerade 25

Übung 5 Greifroboter, logische Verknüpfungen a) Schreibe im Projekt GreifroboterBedingungen die Methoden rotoderblau() rotundgerade() und nichtrotodergerade() Ob die Kugelnummer gerade ist, prüfst du so: kugelnummergeben()%2==0 (Erläuterung: a%2 berechnet in Java den Rest bei der Division durch 2.) b)* Schreibe eine Methode entwederrotodergerade(), die die Kugel in den 1. Becher ablegt, wenn die Kugel entweder rot oder die Nummer gerade ist. 26

Übung 6 Animierter Ball 1 Öffne das Projekt Ball_Animation_1. Die Klasse BALL erbt von KREIS, der Konstruktor erzeugt ein Objekt gemäß der abgebildeten Objektkarte. a) Schreibe eine Methode bewegen(), welche die geerbte Methode verschiebenum(...,...) aufruft. Als Parameter für diese Methode wählst du die Attributwerte von deltax und deltay. Hierdurch wird der Ball horizontal um den Wert deltax und vertikal um den Wert deltay verschoben. 27

Übung 6 Animierter Ball 1 b) Ergänze die Methode bewegen() so, dass der Ball an den Rändern reflektiert wird. Teil 1: Das Spielfeld ist 800 Pixel breit und 600 Pixel hoch. Überlege dir zunächst Bedingungen, wann der Ball einen Bildschirmrand erreicht hat. Betrachte hierzu die Werte der geerbten Attribute M_x und M_y, das sind die Koordinaten des Mittelpunkts des Balls. Daraus ergibt sich folgende Struktur der Fallunterscheidung: wenn (linker Rand erreicht) dann... sonst wenn (rechter Rand erreicht) dann... sonst wenn (oberer Rand erreicht) dann... sonst wenn (unterer Rand erreicht) dann... Übersetze diese Fallunterscheidung in JAVA. Die dann-anweisung für die eigentlichen Reflexionen überlegst du dir im nächsten Schritt. Wenn du die Bedingungen erst testen möchtest, kannst du z.b. beim Erreichen eines Rands die Farbe des Balls ändern. Um eine Wand zu erreichen, kannst du die geerbte Methode setzemittelpunkt(...,...) gut verwenden. 28

Übung 6 Animierter Ball 1 b) Ergänze die Methode bewegen() so, dass der Ball an den Rändern reflektiert wird. Teil 2: Schließlich muss noch jeweils die Reflexion am Rand umgesetzt werden. Überlege dir dazu anhand einer Zeichnung, wie sich die Werte von deltax und deltay nach der Reflexion ändern müssen. Hinweis: beim Testen der Methode wirst du feststellen, dass der untere Rand nicht exakt bei 600, sondern bei 628 ist. Lass es vorerst so und rechne trotzdem mit 600, der Ball wird einfach etwas oberhalb des unteren Randes reflektiert. 29

Vererbung 2 Überschreiben von Methoden Erbt eine Klasse Attribute und Methoden einer Superklasse, so werden die Methoden unverändert ausgeführt. Manchmal möchte man aber das Verhalten einer geerbten Methode verändern. Beispiel: Erzeuge ein Objekt der Klasse SPIEL. Die Methode tick() dieser Klasse wird nach einem bestimmten Zeitintervall automatisch immer wieder ausgeführt. Sie schreibt die Wörter tick und tack in ein Fenster. Diese Methode wollen wir für eine Animation des Balls nutzen. Dazu soll sie natürlich nicht tick und tack schreiben sondern stattdessen die Methode bewegen() aufrufen. 30

Möchte man das Verhalten einer geerbten Methode nachträglich ändern, so muss man die geerbte Methode in der Subklasse überschreiben. Das Überschreiben eröffnet man mit dem Statement @Override. In der nächsten Zeile schreibt man den Kopf der geerbten Methode genau so wie in der Superklasse. Anschließend folgt der neue Code der Methode, der dann für ein Objekt der Subklasse so ausgeführt wird. Beispiel: @Override public void tick() { this.ball.bewegen(); 31

Übung 7 Animierter Ball 2 Öffne das BlueJ-Projekt Ball_Animation1_Lsg. Schreibe eine Klasse BILLARD, welche von Spiel erbt. Deklariere und initialisiere in der Klasse BILLARD ein Referenzattribut der Klasse BALL und nenne es ball. Überschreibe in der Klasse BILLARD schließlich die geerbte Methode tick() und rufe in ihrem Rumpf die Methode bewegen() des BALL-Objekts auf. Teste die Methode, der Ball sollte sich nun automatisch bewegen und an den Rändern reflektiert werden. Experimentiere mit der Methode tickerintervallsetzen(...) und anderen Werten von deltax und deltay, so dass die Animation möglichst gleichmäßig ist. 32

Übung 8 zwei Bälle Kopieredas BlueJ-Projekt aus Übung7 und ändere den Namenin Ball_Animation_2_Baelle ab. Ziel ist es, dass sich zwei Bälle im Spielfeld bewegen. 33

Übung 8 zwei Bälle Erstelle dazu in BALL einen zweiten Konstruktor mit folgenden Übergabeparametern int dx, int dy, String farb, int mx, int my Im Konstruktor erhalten die Attribute deltax, deltay, farbe, M_x und M_y die Werte der entsprechenden Übergabeparameter. In der Klasse BILLARD nimmst du folgende Änderungen vor: Es gibt zwei Attribute ball1 und ball2 der Klasse BALL. Im Konstruktor erzeugst du diese Objekte mit Attributwerten deiner Wahl. 34

Übung 9* zwei Bälle (für Spezialisten) Die Bälle sollen auch untereinander reflektiert werden, wenn sie sich treffen. Dies musst du in der Methode tick() erledigen. Die Reflexion soll stattfinden, wenn der Abstand der x-koordinaten der Mittelpunkte und der Abstand der y-koordinaten der Mittelpunkte kleiner oder gleich der Summe der Radien ist. Deklariere im Kopf der Klasse die Attribute dmx und dmy für die Abstände. In der methode tick() werden sie berechnet und dadurch immer aktualisiert. Schreibe die Bedingung für die Reflexion und überlege, wie sich die Bälle danach bewegen sollen. 35