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

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

Probeklausur: Einführung in die objektorientierte Programmierung mit Java 15WS

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

Probeklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java im Wintersemester 2017/18

Einführung in die Programmierung und Programmiersprachen (OOP)

Probeklausur. Einführung in die objektorientierte Programmierung mit Java WS Alexander Bazo 4. Januar 2016

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Prüfung Softwareentwicklung II (IB)

Klausur Programmiertechnik (Probeklausur 1)

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

Klausur "C#" WS 2013/2014

Klausur "C#" WS 2012/2013

Wiederholungsklausur "C#" SS 2013

Klausur zu Grundlagen der Programmierung in C

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

Universität zu Lübeck Institut für Telematik. Prof. Dr. Stefan Fischer

Klausur Grundlagen der Programmierung

Prüfung Softwareentwicklung II (IB)

Fortgeschrittene Methoden des IT-Projektmanagements

Name:... Matr.-Nr... Bearbeitungszeit: 120 Minuten. Lesen Sie die Aufgaben jeweils bis zum Ende durch; oft gibt es hilfreiche Hinweise!

Probeklausur: Programmierung WS04/05

Klausur zur Lehrveranstaltung. Technische Informatik für Ingenieure WS 2009/10

Klausur zur Vorlesung Einführung in die Programmierung

Klausur "ADP" SS 2015

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Prüfung Softwareentwicklung I (IB)

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

Programmieren I + II Regeln der Code-Formatierung

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

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

Probeklausur zur Vorlesung

Klausur Kompaktkurs Einführung in die Programmierung Dr. T. Weinzierl & M. Sedlacek 25. März 2011

Klausur Einführung in die Informatik I für Elektrotechniker 16. Juli 2003

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. Juni 2004

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

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

Klausur zur Lehrveranstaltung. Technische Informatik für Ingenieure WS 2008/09

Objektorientierte Programmierung

Basispruefung Herbst 2016/ Einführung in die Programmierung

Vorlesung Objektorientierte Programmierung Klausur

Probeklausur Informatik 2 Sommersemester 2013

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 15/16

Klausur: Java (Liste P)

Programmieren I + II Regeln der Code-Formatierung

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

pue13 January 28, 2017

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

Wiederholungsklausur "C#" SS 2014

Institut für Informatik. Endterm Klausur zu Informatik I 20. Februar 2010

Sommersemester Jewgeni Rose. Technische Universität Braunschweig

Klausur Informatik 1 WS 07/08. Aufgabe Max. Punkte Punkte. Gesamtpunkte:

Endklausur 25. September 2012

Klausur zu Grundlagen der Programmierung in C

Wiederholung der Endklausur am 24. September 2013

Institut für Programmierung und Reaktive Systeme 20. November Programmieren I. 4. Übungsblatt

Klausur "ADP" WS 2013/2014

Einführung in die Programmierung für NF MI. Übung 04

Übung Programmierung WS 2007/08 - Blatt 6

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Test zu Grundlagen der Programmierung Leitung: Susanne Guth/Michael Hahsler. 31. Jänner 2003

Klausur "ADP" SS 2016

Klausur Software-Entwicklung März 01

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

Programmiertechnik II Klausur SS 2018 Angewandte Informatik Bachelor

Klausur zur Vorlesung. Grundlagen der Informatik und Numerik. Dr. Monika Meiler Mo , Beginn: Uhr, Ende Uhr

Programmieren in Java -Eingangstest-

Klausur Kompaktkurs Einführung in die Programmierung Dr. T. Weinzierl & M. Sedlacek 18. April 2012

Informatik Hochschule Mainz Geoinformatik und Vermessung. Wiederholung. Frohes Fest und Guten Rutsch!

Vorname: Nachname: Matrikelnummer: Studiengang (bitte ankreuzen): Informatik Bachelor Informatik Lehramt Mathematik Bachelor Sonstige:

Welche Informatik-Kenntnisse bringen Sie mit?

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

Tutoraufgabe 1 (Seiteneekte):

Allgemeine Hinweise:

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

Martin Unold INFORMATIK. Geoinformatik und Vermessung

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

Einführung in die Programmierung

Prüfung Informatik D-MATH/D-PHYS :00 11:00

Einstieg in die Informatik mit Java

Aufgabe 1 (Programmanalyse, Punkte)

Klausur Fachprüfung Wirtschaftsinformatik. Name:

Programmiermethodik 1. Klausur

Name:... Matr.-Nr... Bearbeitungszeit: 120 Minuten. Lesen Sie die Aufgaben jeweils bis zum Ende durch; oft gibt es hilfreiche Hinweise!

Übungen zum Bioinformatik-Tutorium. Blatt 3

Gegeben sind die folgenden Programmausschnitte: I. Programmausschnitt: II. Programmausschnitt: III. Programmausschnitt: IV. Programmausschnitt:

Programmierung für Mathematik (HS13)

Computeranwendung und Programmierung (CuP)

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

Klausur Algorithmen und Datenstrukturen I SS 03

Grundlagen der Informatik 0

Objektorientierte Programmierung

SoSe 2015 Klausur zur LV 36654: Einführung in 28. Juli 2015 die Methoden empirischer Forschung. Name: Studiengang: B.A. M.A.

Rechtsbelehrung. Java und OOP Das Buch Christian Silberbauer 144

Übungen zu Softwareentwicklung 1, WS 2009/10 Übung 6

Programmierung für Mathematik HS11

Prof. Dr. Uwe Schmidt. 21.August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (BInf 211, BTInf 211, BMInf 211, BWInf 211)

Allgemeine Hinweise:

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

Einfache Arrays. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren.

Transkript:

Klausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415 Alexander Bazo 19. Februar 2015 Allgemeine Hinweise 1. Die Bearbeitungszeit beträgt 60 Minuten. Sie könne 50 Punkte erreichen. 2. Verwenden Sie für das Lösen der Aufgaben die Programmiersprache Java. Alle gegebenen Code-Fragmente sind ebenfalls in Java verfasst. Halten Sie sich an die bekannten Regeln zur Codequalität. 3. Schreiben Sie Ihren Namen, Vornamen, Studiengang und Ihre Matrikelnummer leserlich unten auf jedes Angabenblatt bevor Sie mit der Bearbeitung beginnen! Blätter ohne diese Angaben werden nicht gewertet. Wenn Sie die Rückseite eines Blattes verwenden, notieren Sie dies bitte auf der Vorderseite. Kennzeichnen Sie eindeutig, zu welcher Aufgabe eine Lösung gehört. 4. Benutzen Sie keine Bleistifte, keine rotschreibenden Stifte und kein TippEx (oder ähnliche Produkte). 5. Die Klausur ist als Closed Book-Klausur angelegt. Sie dürfen keine mitgebrachten Quellen oder Notizen zur Bearbeitung der Aufgaben verwenden. Technische Hilfsmittel sind ebenfalls nicht erlaubt. 6. Wenden Sie sich bei Unklarheiten in den Aufgabenstellungen immer an die Klausuraufsicht (Hand heben). Hinweise und Hilfestellungen werden dann, falls erforderlich, offiziell für den gesamten Hörsaal durchgegeben. Aussagen unter vier Augen sind ohne Gewähr. 7. Geben Sie keine mehrdeutigen (oder mehrere) Lösungen an. In solchen Fällen wird stets die Lösung mit der geringeren Punktzahl gewertet. Eine richtige und eine falsche Lösung zu einer Aufgabe ergeben also null Punkte.

Teil 1: Theorie 1) Variablen (2 Punkte) Kreuzen Sie alle syntaktisch korrekten Variablendeklarationen an. 2 public static final int NUMBER; 2 private void String s; 2 private double d; 2 float 2f; 2) Schleifen (4 Punkte) Beschreiben Sie kurz den Aufbau und einen möglichen Verwendungszweck einer for-schleife. 3) Codequalität (4 Punkte) Nennen Sie zwei Merkmale schlechten Programmcodes und beschreiben Sie kurz jeweils ein Problem, das mit diesen verbunden ist. Seite 2 von 10

Teil 2: Codeverständnis Hinweise: Die Methode System.out.println(String s) gibt den String-Parameter s auf der Konsole aus. Ein Zeichen (char) an einer beliebigen Position einer String-Instanz kann über die Methode charat(int index) der String-Klasse ausgelesen werden. 4) Codeanalyse (5 Punkte) Geben ist die Methode dostuff(string[] words). Beschreiben Sie kurz den Aufbau der Methode und nennen Sie anschließend den wahrscheinlichen Einsatzzweck. Gehen Sie davon aus, dass der gegebene Code korrekt ist. 1 public double dostuff(string[] words) { 2 int counter = 0; 3 for ( int i = 0; i < words.length; i++) { 4 counter += words[i].length(); 5 } 6 return ( double) counter / words.length; 7 } Seite 3 von 10

5) Fehler finden (5 Punkte) Finden Sie die Konventionsverstöße, Syntaxfehler und Bugs in der folgenden Methode. Markieren Sie die fehlerhaften Stellen im Code und beschreiben Sie den jeweiligen Fehler kurz unter Angabe der Zeilennummer. Schlecht gewählte Bezeichner für Methoden und Variablen sowie fehlerhafte Einrückungen zählen nicht als Fehler. Im Code sind fünf Fehler zu finden. 1 import java.util.arraylist; 2 3 public class CharPrinter { 4 private static final int targetchar = 0; 5 private ArrayList < String > inputstrings; 6 7 public CharPrinter(String string1, String string2) { 8 inputstrings.add(string1); 9 inputstrings.add(string2) 10 } 11 12 public void printchars() { 13 for( int i=0; i <= inputstrings.size(); i++) { 14 String tmp = inputstrings.get(i); 15 if(tmp.length() > 0) { 16 int c = targetchar; 17 String prefix = "Char "+c+" in word "+i+ ":"; 18 System.out.println(prefix, tmp.charat(targetchar)); 19 } 20 } 21 } 22 } Seite 4 von 10

Teil 3: Code implementieren 6) Wegpunkte und Distanzen (15 Punkte) Gegeben ist die Klasse WayPoint. Diese Klasse beschreibt einen Punkt auf einer zweidimensionalen Karte anhand einer x- und y-koordinate. Gehen Sie davon aus, dass dieser Code korrekt ist und beachten Sie die Hinweise am Ende der Aufgabenstellung (Seite 6). 1 public abstract class WayPoint { 2 private double xpos; 3 private double ypos; 4 5 public WayPoint(double xpos, double ypos) { 6 this.xpos = xpos; 7 this.ypos = ypos; 8 } 9 10 public double getx() { 11 return xpos; 12 } 13 14 public double gety() { 15 return ypos; 16 } 17 } 6a) Implementieren Sie eine neue Klasse ExtendedWayPoint die von WayPoint erbt und über eine öffentliche Methode distanceto verfügt. Die Methode bekommt einen Parameter vom Typen WayPoint übergeben und berechnet die Distanz zu diesem. Das Ergebnis wird als double-wert zurück gegeben. Seite 5 von 10

6b) Ergänzen Sie anschließend eine weitere Klasse MapHelper. Diese verfügt über eine öffentliche, statische Methode getroutedistance. Die Methode erwartet als Parameter ein Array vom Typen ExtendedWaypoint. In der Methode berechnen Sie die Länge der Route, die durch die Wegpunkte im Array beschrieben wird und geben das Ergebnis als double-wert zurück. Nutzen Sie für die Berechnung die Methode aus dem ersten Aufgabenteil. Für das übergebene Array gilt: Die Wegpunkte sind im Array in der korrekten Reihenfolge gespeichert. Ein Array [A,B,C] beschreibt den Weg von A über B nach C. Die zurückgelegte Strecke setzt sich aus den Teilstücken A -> B und B -> C zusammen. Ihre Lösung muss für Arrays mit einer beliebigen Anzahl an Wegpunkten funktionieren. Für die Berechnung der Distanz d zwischen zwei Punkten gilt d = p dx 2 + dy 2. Dabei ist dx der Abstand (Differenz) der beiden x-koordinaten und dy der Abstand der y-koordinaten. In Java können Sie die Wurzel einer Zahl a mit der Methode Math.sqrt(double a) ziehen. Seite 6 von 10

Seite 7 von 10

7) Schiffe versenken (15 Punkte) Gegeben sind die Klasse Battleships sowie die beiden Enums Orientation und FieldState. Gehen Sie davon aus, dass dieser Code korrekt ist. Die Klasse Battleships stellt das Grundgerüst für das bekannte Spiel Schiffe versenken (im Englischen: Battleships) dar. Das Spielfeld besteht aus einer zweidimensionalen Karte mit mehreren Feldern. Die Anzahl der Felder auf der x- bzw. y-achse wird durch die Konstante GRID_SIZE angeben. Das Spiel nutzt ein zweidimensionales Array zur Repräsentation dieser Karte. Jedes Feld kann dabei immer nur einen von zwei möglichen Zuständen haben: frei (FREE) oder mit einem Schiffsteil belegt (BLOCKED). Dazu wird das Enum FieldState verwendet. 1 public class Battleships { 2 private static int GRID_SIZE = 5; 3 private FieldState[][] map; 4 5 //Initalisiert die Karte. Alle Felder werden mit dem Enum- Wert Free belegt. 6 public Battleships() { 7 map = new FieldState[GRID_SIZE][GRID_SIZE]; 8 for(fieldstate[] row: map) { 9 Arrays.fill(row, FieldState.FREE); 10 } 11 } 12 13 public boolean addship(int xpos, int ypos, int size, Orientation orientation) { 14 // Hier gehoert Ihr Code hin 15 } 16 } 17 18 public enum FieldState { 19 FREE, 20 BLOCKED 21 } 22 23 public enum Orientation { 24 HORIZONTAL, 25 VERTICAL 26 } Auf der Karte können Schiffe platziert werden. Jedes Schiff besteht dabei aus einer zusammenhängenden Linie von einem oder mehren Feldern der Karte. Jedes Schiff beginnt auf einem bestimmten Feld und setzt sich entweder nach rechts (horizontal) oder nach unten (vertikal) fort. Abbildung 1 zeigt zwei solche Schiffe. Die gepunkteten Felder kennzeichnen ein Schiff mit der Länge 3, das auf dem Feld (2,2) beginnt und horizontal ausgerichtet ist. Die schraffierten Felder kennzeichnen ein Schiff mit Seite 8 von 10

der Länge 2, das auf dem Feld (0,3) beginnt und vertikal ausgerichtet ist. Abbildung 1: Schematische Darstellung der Karte mit zwei Schiffen. Ergänzen Sie den Rumpf der vorgegebenen Methode addship. Diese Methode bekommt Startposition, Länge und Orientierung eines neuen Schiffs übergeben. Überprüfen Sie zuerst, ob das Schiff auf der Karte platziert werden kann. Dafür muss sowohl die Startposition als auch jedes Segment des Schiffes auf die gegebene Karte passen. Anschließend aktualisieren Sie das Array map und ändern den Zustand jeden Feldes, das vom Schiff genutzt wird auf Blocked. Wenn das Schiff korrekt platziert werden konnte, gibt die Methode true, andernfalls false zurück. Hinweis: Beim Platzieren des Schiffes müssen Sie nicht überprüfen, ob die genutzten Felder bereits von einem anderen Schiff verwendet werden. Seite 9 von 10

Seite 10 von 10