PIWIN 1 Übung Blatt 5



Ähnliche Dokumente
Java Projekt: Tic Tac Toe + GUI

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Programmierkurs Java

Einführung in die Java- Programmierung

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Professionelle Seminare im Bereich MS-Office

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Dokumentation des Projektes Tic Tac Toe

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Leichte-Sprache-Bilder

Beispiel Shop-Eintrag Ladenlokal & Online-Shop im Verzeichnis 1

Wollen Sie einen mühelosen Direkteinstieg zum Online Shop der ÖAG? Sie sind nur einen Klick davon entfernt!

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Softwareentwicklung Schrittweise Verfeinerung, Programmieren üben: Tic-Tac-Toe in Raten

Faktura. IT.S FAIR Faktura. Handbuch. Dauner Str.12, D Mönchengladbach, Hotline: 0900/ (1,30 /Min)

Anzeige von eingescannten Rechnungen

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Firefox: Die Lesezeichen im Griff

Dokumentation zum Spielserver der Software Challenge

Java: Vererbung. Teil 3: super()

Institut für Programmierung und Reaktive Systeme 26. April Programmieren II. 10. Übungsblatt

Anwendungsbeispiele Buchhaltung

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Kommunikations-Management

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

CAQ Software für Ihr Qualitätsmanagement. Ablauf für die Erfassung der Fehler in der Fertigung

Pascal-Compiler für den Attiny

1 Vom Problem zum Programm

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Mehrere PDF-Dokumente zu einem zusammenfügen

SAMMEL DEINE IDENTITÄTEN::: NINA FRANK :: :: WINTERSEMESTER 08 09

Objektorientierte Programmierung

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen)

Urlaubsregel in David

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Software Engineering Klassendiagramme Assoziationen

Version 0.3. Installation von MinGW und Eclipse CDT

Objektorientierte Programmierung

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können.

Arbeiten mit dem Outlook Add-In

Bauteilattribute als Sachdaten anzeigen

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Lizenzen auschecken. Was ist zu tun?

Artikel Schnittstelle über CSV

Vorkurs C++ Programmierung

Übungen Programmieren 1 Felix Rohrer. Übungen

Excel Funktionen durch eigene Funktionen erweitern.

Jetzt sollt ihr von der Vorlage der Grundversion 1.0 ein eigenes Textadventure erstellen.

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Anleitung für den Zugriff auf Mitgliederdateien der AG-KiM

Zählen von Objekten einer bestimmten Klasse

Agentur für Werbung & Internet. Schritt für Schritt: Newsletter mit WebEdition versenden

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Handbuch für Easy Mail in Leicht Lesen

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

12. Dokumente Speichern und Drucken

teischl.com Software Design & Services e.u. office@teischl.com

104 WebUntis -Dokumentation

Klicken Sie auf Weiter und es erscheint folgender Dialog

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen

Empfehlungen zur Nutzung der CD zum Buch: Klee & Wiemann: Beweglichkeit und Dehnfähigkeit. Schorndorf: Hofmann,

Mediator 9 - Lernprogramm

Lieber SPAMRobin -Kunde!

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter

Gratis Excel SVERWEIS Funktions-Anleitung, Tutorial, ebook, PDF-E-Book

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Zimmertypen. Zimmertypen anlegen

Variablen & erweiterte Aktionen nutzen

5. Übung: PHP-Grundlagen

Persönliches Adressbuch

IDEP / KN8 für WINDOWS. Schnellstart

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Kurzanleitung MAN E-Learning (WBT)

Tutorial: Wie nutze ich den Mobile BusinessManager?

P&P Software - Adressexport an Outlook 05/29/16 14:44:26

5.2 Neue Projekte erstellen

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

TESTEN SIE IHR KÖNNEN UND GEWINNEN SIE!

Sicherheitseinstellungen... 2 Pop-up-Fenster erlauben... 3

Anleitung zum erfassen von Last Minute Angeboten und Stellenangebote

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Praktische Mathematik: Lineare und Netzwerk-Optimierung (SS 2015) Praktikumsaufgaben

Erstellen von x-y-diagrammen in OpenOffice.calc

Übungsblatt 3: Algorithmen in Java & Grammatiken

Anleitung. Verschieben des alten -Postfachs (z.b. unter Thunderbird) in den neuen Open Xchange-Account

Erstellen eines Screenshot

Bedienungsanleitung für den Online-Shop

SEP 114. Design by Contract

1. Einführung. 2. Weitere Konten anlegen

Transkript:

Fakultät für Informatik Wintersemester 2008 André Gronemeier, LS 2, OH 14 Raum 307, andre.gronemeier@cs.uni-dortmund.de PIWIN 1 Übung Blatt 5 Ausgabedatum: 19.12.2008 Übungen: 12.1.2009-22.1.2009 Abgabe: Lösungen bitte spätestens einen Werktag vor der Übung per Email abgeben. Achtung: Aufgrund des krankheitsbedingten Ausfalls von Vorlesungen im Dezember finden in der Woche vom 5. Januar bis zum 9. Januar keine Übungen statt. Übungen: Gruppe Mo-ungerade: 12. Januar, 8:30 Uhr, OH 14 Hörsaal E 23 Gruppe Do-ungerade: 15. Januar, 10:15 Uhr, OH 16 Raum 205 Gruppe Di-gerade: 20. Januar, 10:15 Uhr, OH 16 Raum 205 Gruppe Do-gerade: 22. Januar, 10:15 Uhr, OH 16 Raum 205 Aufgabe 5.1: Klassenvariablen, Referenzen, überdeckte Attribute und überladene Methoden In Listing 5.1 ist ein kleines Programm angegeben, das aus insgesamt drei Klassen besteht. In der main-methode sind sieben Zeilen durch Kommentare markiert. Eine dieser Zeilen ist fehlerhaft. Suchen Sie die fehlerhafte Zeile und geben Sie an, worin der Fehler besteht. Geben Sie nun jeweils den Wert der folgenden Attribute nach der Ausführung der fehlerfreien markierten Zeilen tabellarisch an: a.x a.y a.z b.x b.y b.z c.x c.y c.z Begründen Sie Ihre Ergebnisse kurz stichwortartig.

class C1 public int x ; public static int y ; private int z ; Listing 1: Listing 5.1 public C1( int i, int j, int k ) x = i ; y = j ; z = k ; public void m1( int y, int z ) x = y ; y = z ; public void m2( int x, int z ) y = x ; this. x = z ; this. z += z ; class C2 public static int x ; public int y ; public static int z ; public C2 ( ) x = y = z = 0 ; public void m1( C1 a ) x = a. y++; y = a. x ; z += a. x ; public void m1( C1 a, int z ) x += a. y ; y = a. x ; z = this. z ; class Main public static void main ( S t r i n g [ ] args ) C1 a, b ; C2 c ; a = new C1 ( 1, 2, 3 ) ; c = new C2 ( ) ; b = new C1 ( 4, 5, 6 ) ; // B e f e h l 1 a.m2( 7, 8 ) ; // B e f e h l 2 b.m1( 9, 1 0 ) ; // B e f e h l 3 b = a ; // B e f e h l 4 c.m1( a ) ; // B e f e h l 5 c.m1(b, 1 1 ) ; // B e f e h l 6 b.m2( b. x, a. z ) ; // B e f e h l 7

Aufgabe 5.2: Objekte und Referenzen Ein Wörterbuch Variablen speichern nur eine Referenz auf ein Objekt, nicht das Objekt selbst. Daher kann die folgende Klasse namens Node auch problemlos Attribute vom Typ Node enthalten: class Node public Node next ; public Node ( ) next = null ; Dies ist nicht nur zulässig, sondern auch sehr praktisch, denn auf diese Weise kann man Objekte zu einer Liste verketten: Angenommen wir haben eine Variable head vom Typ Node. Dann kann head.next auf ein weiteres Objekt vom Typ Node zeigen, welches wiederum auf ein Node-Objekt zeigt, und so weiter. Das Ende dieser Kette wird durch eine null-referenz markiert. Graphisch lässt sich die Situation folgendermaßen darstellen: head next next next Durch das Verfolgen der next-referenzen lassen sich von der Variable head aus alle Objekte dieser Kette erreichen. Vergrößern lässt sich die Liste durch das Anhängen neuer Node-Objekte, die man einfach mit dem new-operator erzeugen kann. Erweitern Sie die Klasse Node so, dass in den zugehörigen Objekten ein Deutscher und ein Englischer Begriff als String gespeichert wird und nutzen Sie die oben beschriebene Konstruktion von Listen, um damit ein Deutsch-Englisch-Wörterbuch als Klasse Dictionary zu implementieren. Sie sollten die folgenden Methoden unterstützen: class Dictionary public static void main ( S t r i n g [ ] args ) // Test der Dictionary Klasse public D ictionary ( ) // Legt l e e r e s Woerterbuch an public void i n s e r t ( S t r i n g german, S t r i n g e n g l i s h ) // Eintragen von Übersetzung public S t r i n g lookup ( S t r i n g german ) // Nachschlagen. Ergebnis i s t e n g l i s c h e Uebersetzung // oder n u l l, f a l l s k e i n e Uebersetzung gefunden wurde Natürlich dürfen (und müssen) Sie eventuell weitere Methoden und Attribute hinzufügen, um die gewünschte Funktionalität zu realisieren. In der main-methode soll die Klasse getestet werden. Hier sollten Sie selbst sinnvolle Tests finden.

Aufgabe 5.3: Eine Anwendung Tic Tac Toe In der objektorientierten Programmierung benutzt man Klassen, um die für die Anwendung wichtigen Objekte und Konzepte zu realisieren. Angenommen wir wollen ein Tic-Tac-Toe-Spiel implementieren. Die Regeln dieses Spiels findet man zum Beispiel in der Wikipedia: http://de.wikipedia.org/wiki/tic Tac Toe Ein wichtiges Konzept dieses Spiels ist offensichtlich das Spielfeld. Wir wollen in dieser Aufgabe das Tic-Tac-Toe-Spielfeld als Java-Klasse modellieren: class TicTacToe public TicTacToe ( )... public TicTacToe ( TicTacToe t )... public void p r i n t ( )... public Boolean zug ( int s p i e l e r, int z e i l e, int s p a l t e )... public int gewinner ( )... Der parameterlose Konstruktor soll ein leeres Spielfeld anlegen. Zusätzlich implementieren wir einen Konstruktor, der als Argument ein Tic-Tac-Toe-Spielfeld erhält und von diesem eine Kopie erstellt. Die Methode print soll das Spielfeld auf dem Bildschirm ausgeben. Die Zeilen und Spalten sollen in der Ausgabe nummeriert sein. Nach einigen Spielzügen könnte die Ausgabe folgendermaßen aussehen: 123 1.oo 2.x. 3.xx Mittels der Methode zug kann einer der Spieler sein Zeichen auf das Spielfeld zeichnen. Hier soll Spieler 1 das Zeichen x zugeordnet sein, während Spieler 2 mit dem Zeichen o spielt. Sollte der Zug nicht möglich sein, da z.b. die Parameter unzulässig sind oder das Feld bereits besetzt ist, soll false zurückgegeben werden, anderenfalls wird der Zug ausgeführt und das Ergebnis ist true. Mit der Methode sieg kann schließlich überprüft werden, ob einer der Spieler gewonnen hat. Das Ergebnis 1 oder 2 zeigt an, dass der entsprechende Spieler gewonnen hat, bei dem Rückgabewert 0 ist das Spiel noch unentschieden. Sollten beide Spieler drei Zeichen in einer Reihe haben (in einem normalen Spiel kann dies natürlich nicht vorkommen), so kann die Funktion entweder 1 oder 2 ausgeben. Ihre Aufgabe ist es nun, diese Klasse zu implementieren. Dazu müssen Sie zunächst eine passende Datenstruktur für die Repräsentation des Spielfelds wählen und anschließend die oben beschriebenen Operationen für diese Datenstruktur implementieren.

Aufgabe 5.4: Kooperierende Klassen Ein Tic-Tac-Toe-Spiel Nun wollen wir das Tic-Tac-Toe-Spielfeld aus der letzten Aufgabe benutzen, um ein Tic-Tac- Toe-Spiel für zwei Spieler zu implementieren. Das Spiel soll als Klasse TicTacToeGame umgesetzt werden. Hierzu muss das Spielfeld dargestellt werden, die Eingabe des Spielers, der gerade am Zug ist, muss eingelesen werden und nach dem Zug muss geprüft werden, ob der Spieler gewonnen hat. Da Eingaben nicht in der Vorlesung behandelt wurden und Sprachelemente erfordern, die noch nicht aus der Vorlesung bekannt sind, stellen wir auf der PIWIN-Webseite eine Klasse Eingabe zur Verfügung, die passende Methoden zur Eingabe von Zeichenketten und Spielzügen enthält: class Eingabe public static int z e i l e ; public static int s p a l t e ; public static S t r i n g s t r i n g L e s e n ( )... public static Boolean zuglesen ( int s p i e l e r )... Die Klassenmethode Eingabe.stringLesen() liest eine Benutzereingabe und gibt diese als String zurück. Mit der Klassenmethode Eingabe.zugLesen kann ein Tic-Tac-Toe-Zug eingelesen werden. Parameter ist die Nummer des Spielers, der am Zug ist. Nach dem Aufruf wird zunächst die Nummer des Spielers und ein kleiner Hilfstext ausgegeben. Der Spieler kann dann entweder die Zeile und die Spalte seines Zugs durch Leerzeichen getrennt eingeben oder er kann das Spiel durch die Eingabe von e abbrechen. Im ersten Fall ist der Rückgabewert true, im zweiten Fall false. Wenn ein Zug eingegeben wurde, kann man anschließend Zeile und Spalte aus den Klassenvariablen Eingabe.zeile und Eingabe.spalte auslesen. Die Datei Eingabe.java kann man zusammen mit einer eigenen Eingabedatei nutzen, indem man beide Dateien gleichzeitig in der Entwicklungsumgebung DrJava öffnet. Sind mehrere Dateien geöffnet, so kann man durch einen Rechtsklick auf den Dateinamen im linken Bereich des Fensters mit dem Menüpunkt Run File s Main Method auswählen, in welcher Datei die main-methode enthalten ist. Freiwillige Bonusaufgabe: Wer möchte, kann einen computergesteuerten Gegenspieler implementieren. Wie man dies umsetzen kann, ist auf den folgenden Seiten beschrieben: http://www.iti.fh-flensburg.de/lang/algorithmen/graph/spielbaum.htm http://de.wikipedia.org/wiki/minmax-algorithmus