Datum, Uhrzeit: , Uhr Semester: INBac2 Note:...

Ähnliche Dokumente
Datum, Uhrzeit: , Uhr Matrikelnummer:... Semester: INbac2 Prüfer: Prof. Meixner Note:...

Datum, Uhrzeit: , Uhr Semester: I1 Note:... Prof. Dr. G. Meixner

Datum, Uhrzeit: , Uhr Semester: IN1 Note:... Prof. Dr. G. Meixner

Hochschule Augsburg, Fakultät für Informatik Name:... Prüfung "Programmieren 1", IN1bac, WS 10/11 Seite 1 von 6

Datum, Uhrzeit: , Uhr Matrikelnummer:... Semester: INbac2 Prüfer: Prof. Meixner Note:...

Probeklausur Informatik 2 Sommersemester 2013

Fakultät Angewandte Informatik Programmierung verteilter Systeme Übungen zur Vorlesung Informatik II, Blatt 8

Datum, Uhrzeit: , Uhr Semester: INBac2 Note:...

Zahlenraten: Ein Spiel in Java.

Hochschule Augsburg, Fakultät für Informatik Name:... Prüfung "Programmieren 2", IN2, SS 2016 Seite 1 von 8

Klausur Grundlagen der Programmierung

Prüfung Softwareentwicklung II (IB)

M3 M4 M7 VORNAME: Gewinnt VERTIEFUNG:

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

/** Main-Methode erzeugt einen neuen Editor zum Testen */ public static void main(string[] args) { new Editor();

M3 M4 M7 VORNAME: Compare VERTIEFUNG:

Beispielprüfung CuP WS 2015/2016

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

Klausur: Java (Liste P)

Klausur Software-Entwicklung März 01

Interface. So werden Interfaces gemacht

OOP Aufgabenblatt 7 6. Dezember 2013

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

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

Matrikelnummer:

Software Entwicklung 1

Programmieren 2 Java Überblick

JUnit 4 Tutorial. Wolfgang Stöttinger

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

Nachholklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415

Matrikelnummer: 1 Aufgabe 1: Quickies (30 Punkte) a) Wird das folgende Programm von einem Java-Übersetzer ohne Beanstandungen übersetzt? Falls nicht,

Software Entwicklung 1

Objekt-Orientierte Programmierung. II/Wb17

Programmieren in Java

Java II - Übungsgruppe

Kapitel 5: Interfaces

Basispruefung Herbst 2016/ Einführung in die Programmierung

EPROG 2.Teilprüfung. Aufgabe 1:

Übung Nr. 20 Freitag, 09:00-11:00 Uhr in E3.301

2 Eine einfache Programmiersprache

Objektorientierte Programmierung

8.6 Visualisierung der Sortieralgorithmen

Algorithmen und Programmierung III

Einführung in die Programmierung. (K-)II/Wb17

Programmieren in Java -Eingangstest-

Probeklausur: Programmierung WS04/05

Fachhochschule Stuttgart Prof. Uwe Schulz 5. Juli 2006 Hochschule der Medien Klausur Informatik, EDV-Nr (42021) Seite 1 von 4

Programmieren in Java

Systematisches Testen

Lösungshinweise/-vorschläge zum Übungsblatt 11: Software-Entwicklung 1 (WS 2017/18)

Rückgabewerte von Methoden

Aufgabe 1: Objekte, Klassen, Vererbung (15 Punkte)

Klausur Fachprüfung Wirtschaftsinformatik Dauer: 2 Stunden. Name:

Programmierung für Mathematik HS11

Java Übung. Übung 3. Werner Gaulke. 2. Mai Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Probeklausur zur Vorlesung

Übungen zur Vorlesung Softwaretechnologie - Wintersemester 2018/19 - Dr. Günter Kniesel. Übungsblatt 10 Lösungen

Dies ist eine Probeklausur, die keine formalen Schlüsse auf die Form, die Struktur oder den Inhalt der endgültigen Klausur zulässt.

Programmieren in Java

public class SternchenRechteckGefuellt {

Programmierung für Mathematik HS10 Übung 8

Einstieg in die Informatik mit Java

Stack und Queue. Thomas Schwotzer

Einstieg in die Informatik mit Java

*** Viel Erfolg! ***

Aufgabenblatt Ein Multigraph kann als Graph mit gewichteten Kanten interpretiert werden. Erläutern Sie an einem Beispiel.

2 Eine einfache Programmiersprache

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

Wiederholung. Klassenhierarchie:

Programmierung Nachklausurtutorium

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

Informatik I Eprog HS12

Prüfung Softwareentwicklung II (IB)

Übungsstunde 11. Einführung in die Programmierung

Prüfung Softwareentwicklung I (IB)

Klassen, Vererbung, Benutzereingabe

Aufgabenblatt: Methoden - rekursiv

Allgemeine Informatik II SS :30-11:30 Uhr

Allgemeine Informatik II SS :30-13:30 Uhr

Vorkurs Informatik WiSe 15/16

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Medientechnik Sommersemester 2016

I N F O R M A T I K UNIVERSITÄT LINZ. SWE1 / Übung 9. Schrittweise Verfeinerung

Punkte. Teil 1. Teil 2. Summe. 1. Zeigen Sie, dass der untenstehende Suchbaum die AVL-Bedingung verletzt und überführen Sie ihn in einen AVL-Baum.

- EINSTIEG IN JAVA - (1/5) Datum:

Klausur "ADP" SS 2015

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Klausur Fachprüfung Wirtschaftsinformatik. Name:

Java Einführung Collections

pue13 January 28, 2017

Klausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java im Wintersemester 2015/16

Programmieren in Java

Fachhochschule Stuttgart Prof. Uwe Schulz 14. Juli 2005 Hochschule der Medien Klausur Informatik, EDV-Nr (42021) Seite 1 von 4

Institut für Programmierung und Reaktive Systeme 7. Mai Programmieren II. 11. Übungsblatt

Javakurs für Anfänger

Institut für Programmierung und Reaktive Systeme 10. Mai Programmieren II. 11. Übungsblatt

Klausur Programmieren 2 WS 2017/18

Geoinformatik und Vermessung Prüfung 502 : Informatik (JAVA)

Transkript:

Prüfung "Programmieren 2", INBac2, SS 2017 Seite 1 von 8 Datum, Uhrzeit: 13. 07. 2017, 10.30 Uhr Semester: INBac2 Note:... Prüfer: Prof. Meixner Dauer: 60 Min. Hilfsmittel: keine Punkte:... Diese Prüfung umfasst 8 Seiten. Die Lösungen sind auf den Aufgabenblättern einzutragen (notfalls Rückseiten verwenden!). Alle Aufgaben sind bezogen auf die Programmiersprache Java. Ist eine Aufgabenstellung Ihrer Meinung nach nicht vollständig oder mehrdeutig, so treffen Sie entsprechende Annahmen. Die Aufgabe Es soll ein einfaches Programm entwickelt werden, mit dem für das populäre Spiel Scrabble geübt werden kann (Dessen Spielregeln werden nicht als bekannt vorausgesetzt!). Die Übung besteht darin, dass einem Spieler wiederholt eine Zeichenkette als Buchstabenvorrat vorgelegt wird. Durch geschickte Auswahl und Reihung soll aus allen oder einem Teil der Buchstaben des Vorrats ein Wort erstellt und eingetippt werden. Das eingegebene Wort wird gegen eine interne Wortliste (eine Art Lexikon) geprüft. Für ein richtiges Wort erhält der Spieler Punkte, die sich aus den Einzelpunkten für die im Wort enthaltenen Buchstaben aufsummieren. Diese Punkte werden dem Gesamtkonto des Spielers gutgeschrieben. Der Spieler hat immer nur eine begrenzte Zeit zur Verfügung, um das Wortschöpfungsproblem zu lösen. Die Wörter im Lexikon sind alle in Großbuchstaben abgelegt. Der Spieler soll dagegen bei der Eingabe auf Groß-/Kleinschreibung keine Rücksicht nehmen müssen. Nach Abschicken der Eingabe links soll z. B. die Bestätigung rechts erscheinen, falls das Wort GEDULD im Lexikon enthalten ist. a) Die Buchstaben mit ihren jeweiligen Punkten werden der Übersichtlichkeit halber in einer Aufzählung gelistet. Erweitern Sie den nachfolgenden Typ so, dass die in Klammern enthaltenen Punkte pro Buchstabe verwaltet und bei Bedarf wieder abgerufen werden können. public enum Letter { A(1), B(2), C(3), D(1), E(1), F(2), G(2), H(2), I(2), J(4), K(2), L(2), M(1), N(1), O(2), P(3), Q(7), R(1), S(1), T(1), U(3), V(5), W(4), X(10), Y(10), Z(5); 4 P.

Prüfung "Programmieren 2", INBac2, SS 2017 Seite 2 von 8 b) Realisieren Sie die Klasse Player, die einen unveränderlichen (User-)Namen und den Gesamtpunktestand (Score) eines Spielers verwaltet. Es soll insbesondere Methoden zum Hinzuzählen von weiteren im Spiel erzielten Punkten und zum Abfragen des Gesamtpunktestands geben. Der Klasse soll außerdem eine natürliche Ordnung, basierend auf der lexikographischen Ordnung des Namens, eingepflanzt werden, indem (typsicher) das Interface Comparable implementiert wird. Zudem sollen die equals()- und tostring()-methode geeignet implementiert werden. Markieren Sie alle überschreibenden Methoden der Klasse mit der Annotation Override. 10 P.

Prüfung "Programmieren 2", INBac2, SS 2017 Seite 3 von 8 c) Die Klasse WordManager verwaltet die Wortliste, aus der per Zufall jeweils ein Wort ausgewählt wird. Die Buchstaben dieses Wortes (ergänzt um eine feste Anzahl weiterer zufällig gewählter Buchstaben!) werden in eine willkürliche Reihenfolge gebracht. Die Buchstabenauswahl und das -vertauschen passieren beide in createwordpuzzle(). Aus dem so ermittelten Buchstabenvorrat, der per getletterstring() abgeholt werden kann, soll vom Benutzer ein Wort aus der Wortliste zusammengestellt werden (s. o.). Ob das erfolgreich war, kann mit der Methode evalstring() geprüft werden. Falls die übergebene Zeichenkette kein Wort in der Wortliste darstellt, oder die Vorgaben durch den aktuellen Buchstabenvorrat nicht eingehalten wurden, soll eine EvalFailedException mit geeignetem Fehlertext geworfen werden. Andernfalls sollen die Punkte der im Wort enthaltenen Buchstaben aufsummiert und als Ergebnis zurückgeliefert werden. Zur Strukturierung kommen hier Hilfsmethoden zum Einsatz. Erweitern Sie den gegebenen Klassenrahmen durch die Implementierung fehlender bzw. Ergänzung vorhandener Methoden und fügen Sie benötigte Attribute hinzu. Definieren Sie zudem EvalFailedException als geprüfte (checked) Exception. public class WordManager { private Random random = new Random(); 14 P. public void setwordlist(list<string> wordlist) { this.wordlist = Collections.unmodifiableList(wordList); public void createwordpuzzle() { int randomwordno = random.nextint(wordlist.size()); List<Character> letterlist = string2characterlist(selectedword); // zufaellige Buchstaben hinzufuegen for (int k=1; k <= FILLER_COUNT; k++) { letterlist.add(letter.values()[randomletterno].tostring().charat(0)); Collections.shuffle(letterList); StringBuilder sb = new StringBuilder(); letterstring = sb.tostring(); private List<Character> string2characterlist(string string) { char[] charsofstring = string.tochararray(); List<Character> letterlist = new ArrayList<>(); for (char c : charsofstring) { letterlist.add(c); return letterlist;

Prüfung "Programmieren 2", INBac2, SS 2017 Seite 4 von 8 public String getletterstring() { public int evalstring(string word) word = word.touppercase(); checkiflegalword(word); return calcpoints(word);

Prüfung "Programmieren 2", INBac2, SS 2017 Seite 5 von 8 d) Nun wird ein Teil der Funktionalität von WordManager getestet! In einem Testfall für die Methode createwordpuzzle() soll geprüft werden, ob der erzeugte Buchstabenvorrat, der mit getletterstring() abgeholt werden kann, die richtige Länge hat, sprich die Summe der Länge des aus der internen Wortliste ausgewählten Wortes plus der Zahl der noch zufällig hinzugefügten Buchstaben (FILLER_COUNT). Um den Zufall teilweise zu eliminieren, wählen Sie einfach eine Wortliste, die nur aus einem Wort besteht. Unter der selben Randbedingung, sollten Sie in Tests für die Methode evalstring() die Fälle abhandeln, dass die übergebene Buchstabenfolge als Wort erkannt wird und dann eine Punktzahl größer 0 zurückgeliefert wird (genaue Punktzahl braucht nicht geprüft zu werden) und bei einer falschen Buchstabenfolge die entsprechende Exception geworfen wird. Führen Sie gemeinsame Vorbereitungsarbeiten für alle Tests (Vorbereitung des Wordmanagers) am besten in einer Setup-Methode aus. import org.junit.before; import org.junit.test; import static org.junit.assert.assertequals; import static org.junit.assert.asserttrue; import static org.junit.assert.fail; import java.util.arrays; public class WordManagerTest { private WordManager wordmanager; private String singleword = "HAUSAUFGABE"; 8 P.

Prüfung "Programmieren 2", INBac2, SS 2017 Seite 6 von 8 e) Der Kern (Engine) des Spiels wird durch die Klasse WordPuzzle (s. u.) realisiert. Implementierungen Sie die Methoden getletterstring(), addplayer(), getscore() und submitword() gemäß Spielidee und spezifizierenden Kommentaren in der Klasse. public class WordPuzzle { private WordManager wordmanager = new WordManager(); private Map<String, Player> players = new HashMap<String, Player>(); public WordPuzzle() { startnewturn(); /** Startet eine Raterunde */ private void startnewturn() { wordmanager.createwordpuzzle(); // Vorkehrungen fuer ein Timeout treffen mit anschließender neuen // Aufgabe, wenn niemand in der vorgegebenen Zeit ein Wort erraten hat... // braucht nicht implementiert zu werden!!!! public String getletterstring() { 10 P. private void assertuserexists(string username) { if ( username == null!players.containskey(username)) throw new IllegalArgumentException("Spieler gibt es nicht"); /** Fuegt einen neuen Spieler mit dem uebergebenen Namen hinzu, * aber nur, wenn der Name nicht schon vorhanden */ public void addplayer(string username) { /** Liefert die bisher erzielten Punkte eines Spielers mit Namen username */ public int getscore(string username) { /** Spieler mit Namen username macht einen Vorschlag fuer ein Wort. * Die erzielten Punkte werden dem Spieler ggf. gutgeschrieben und * zurueckgegeben. Es wird sodann eine neue Raterunde gestartet. * Bei falschem Wort: Abbruch mit EvalFailedException */ public int submitword(string username, String word)

Prüfung "Programmieren 2", INBac2, SS 2017 Seite 7 von 8 f) Folgende Klasse realisiert ein GUI-Element für das Wortpuzzle. Ergänzen Sie dieses so um eine Ereignisverarbeitung, dass nach Eingabe einer Zeichenfolge mit abschließendem <return> im Textfeld die eingegebene Zeichenfolge geprüft und ggf. per Popup eine Erfolgsmeldung (siehe Screenshots oben) ausgegeben wird. Wurde eine nicht nicht zu den Spielregeln passende Zeichenfolge eingegeben, soll im Popup eine entsprechende Meldung angezeigt werden. Tritt ein sonstiges Problem in Form einer Exception auf, soll im Popup Spiel gestört erscheinen. In allen Fällen soll das Eingabetextfeld abschließend geleert werden. Ergänzen Sie außerdem die periodische Anzeige der Inhalte von outtextfield und msglabel. (Geeignete Einfügestellen für den Code zu den Anforderungen oben sind durch --> markiert.) public class WordPuzzleForm extends GridPane { private TextField outtextfield = new TextField(); private TextField intextfield = new TextField(); private Label msglabel = new Label(""); private WordPuzzle wordpuzzle; private Timer timer = new Timer(); private String playername; private WordPuzzleForm(final String name, final WordPuzzle wordpuzzle) { this.playername = name; this.wordpuzzle = wordpuzzle; // arrangement of elements and some formatting... hier weggelassen --> 10 P. --> // refresh outtextfield and msglabel periodically timer.scheduleatfixedrate(new TimerTask() { public void run() { Platform.runLater(() -> { );, 0, 1000); public class WordEnteredHandler implements EventHandler<ActionEvent> { public void handle(actionevent e) { --> /** shows a popup window with the text msg */ private void popupmsgwindow(string msg) {...

Prüfung "Programmieren 2", INBac2, SS 2017 Seite 8 von 8 g) Wozu dient die Methode Platform.runLater() im Code von Teilaufg. f auf der vorhergehenden Seite? Was wäre los, wenn darauf verzichtet wird? (Kurze Erläuterung!) 4 P.