Allgemeine Informatik II SS :30-11:30 Uhr

Ähnliche Dokumente
Allgemeine Informatik II SS :30-13:30 Uhr

Bachelorprüfung: Objektorientierte Softwareentwicklung

Allgemeine Informatik II

Allgemeine Hinweise:

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

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

UNIVERSITÄT SIEGEN Fachbereich 12, Elektrotechnik und Informatik Fachgruppe Betriebssysteme / verteilte Systeme

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Programmiermethodik 3. Klausur Lösung

II.4.4 Exceptions - 1 -

Klausur "ADP" SS 2015

Semestralklausur Informatik I - Programmierung

Beispielprüfung CuP WS 2015/2016

Klausur Programmieren 2 WS 2017/18

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

12 Abstrakte Klassen, finale Klassen und Interfaces

Methoden und Wrapperklassen

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

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

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

Objektorientierte Programmierung

1. Welches Interface ist nicht von Collection abgeleitet? A. B. C. D. List Set Map SortedSet. 2. Welche Aussagen sind richtig?

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

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

Technische Universität Braunschweig

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

Institut für Programmierung und Reaktive Systeme 6. Juli Programmieren II. Übungsklausur

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Programmieren in Java -Eingangstest-

Algorithmen und Datenstrukturen

Prüfung Softwareentwicklung II (IB)

Info B VL 14: Java Collections/Reflections

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

Vorkurs Informatik WiSe 15/16

Allgemeine Hinweise:

Grundlagen der Informatik 0

Heute. Nachbetrachtung Wissensüberprüfung. Sortieren Interface Comparable TreeSet Sortieren von Arrays: Arrays.sort() 3.12.

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

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

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

Wiederholung. Klassenhierarchie:

Programmiertechnik Klassenvariablen & Instantiierung

Einstieg in die Informatik mit Java

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 16. Juli Klausur

Einführung in die Programmierung und Programmiersprachen (OOP)

Software Entwicklung 1

Probeklausur: Programmierung WS04/05

II.4.6 Collections - 1 -

Software Entwicklung 1

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Languages and Tools for Object-Oriented Development Klausur Wintersemester 2007/2008

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

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

Programmierung für Mathematik HS11

Institut für Programmierung und Reaktive Systeme 7. Juli Programmieren II. Übungsklausur

Klausur Grundlagen der Programmierung

a) Für das vorgegebene Programmstück ergibt sich folgendes Referenzgeflecht:

Johannes Unterstein - TINF16 - Java - Sommersemester 2017 JAVA. Weiterführende Spracheigenschaften

Klausur Programmieren 2 SS 2016

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

14 Abstrakte Klassen, finale Klassen, Interfaces

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

Umsetzung einer Klassenkarte in einer Programmiersprache

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

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

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

Java für Bauingenieure

Programmierung Nachklausurtutorium

Prüfung Softwareentwicklung II (IB)

4. Vererbung Die Klasse Object. Die Klasse Object

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

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

14 Abstrakte Klassen, finale Klassen, Interfaces

Einführung in die Programmierung

Klausur "ADP" SS 2016

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur

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

Nachklausur LÖSUNG. Bitte in Druckschrift leserlich ausfüllen!

Einstieg in die Informatik mit Java

Die Klasse java.lang.object. Thorsten Treffer

Abschlussklausur Lösung. Bitte in Druckschrift leserlich ausfüllen!

JAVA für Nichtinformatiker - Probeklausur -

Erste Java-Programme (Java Wiederholung & Vererbung)

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

Aufgabe 1 (12 Punkte)

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

Programmieren in Java

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

Übung Programmierung WS 2007/08 - Blatt 6

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

1. Teilklausur Gruppe A. Bitte in Druckschrift leserlich ausfüllen!

Algorithmen und Datenstrukturen 07

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

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

Informatik II Übung 6

Vorlesung Objektorientierte Programmierung Klausur

Fakultät IV Elektrotechnik/Informatik

Nachklausur Bitte in Druckschrift leserlich ausfüllen!

Transkript:

TU Darmstadt FB Informatik Prof. J. Fürnkranz Semestralklausur - Lösungsvorschlag Allgemeine Informatik II SS 2005 20.07.2005 09:30-11:30 Uhr Hinweise: Als Hilfsmittel ist nur ein schwarzer oder blauer Schreibstift erlaubt! Füllen Sie das Deckblatt vollständig aus! Schreiben Sie auf jedes Aufgabenblatt Ihren Namen und Matrikelnummer! Schreiben Sie ihre Lösung in die vorgesehenen Zwischenräume oder auf die Rückseite des jeweiligen Aufgabenblattes! Nachname Vorname Matrikelnummer Fachbereich Studiengang Aufgabe 1 2 3 4 5 6 Punkte Maximum 10 14 8 18 20 30 100

1 Collections (10 Pkte.) In der Vorlesung haben Sie verschiedene Interfaces kennengelernt, die es erlauben, Sammlungen (Collections) von Objekten zu repräsentieren. 1. (6 Pkte.) Sie haben die Aufgabe, die Verwaltung eines on-line Geschäfts zu programmieren. Welches Interface Set, List, oder Map würden Sie zur Repräsentation der folgenden Daten verwenden. Begründen Sie jeweils Ihre Antworten! a) Alle möglichen Arten von Artikeln, die man im Geschäft kaufen kann. b) Alle Preise für alle Artikel. c) Einen Einkaufskorb, d.h. eine Sammlung aller Artikel, die bei einem Kaufvorgang gekauft werden (ein Artikel kann natürlich auch mehrmals gekauft werden). Sie können annehmen, dass entsprechende Datenstrukturen für einzelne Kunden, Artikel, etc. bereits vordefiniert sind, es geht nur um die Verwendung eines geeigneten Interfaces. Folgende Interfaces bieten sich an: a) Set Da es jede Artikelart nur einmal gibt und nicht mehrmals. b) Map Zuordnung von Artikelart zu Preis. c) List Da eine Artikelart ja mehrmals im Einkaufskorb vorhanden sein kann. 2. (2 Pkte.) Mit der Methode keyset() erhalten Sie für eine Klasse, die das Interface Map implementiert, ein Set aller Schlüssel zurück. Erklären Sie, warum hier als Rückgabe-Typ Set und nicht List gewählt wurde. Der Rückgabe-Typ Set macht deshalb Sinn, da es jeden Schlüssel in der Map nur einmal gibt. 3. (2 Pkte.) Erklären Sie kurz die Idee und Funktionsweise einer Hash-Tabelle. Eine Tabelle, die von dem Schlüssel(Key)-Objekt einen numerischen Hash-Wert berechnet, der die Position des zugeordneten Wertes beschreibt. 2 / 10

2 Klassen (14 Pkte.) Gegeben sei folgende Klassendefinition: 1 c l a s s Rec { 2 void x ( i n t n ) { 3 System. out. p r i n t ( 0 ) ; 4 i f ( n > 0) 5 x ( n 1) ; 6 } 7 s t a t i c void z ( i n t n ) { 8 x ( n ) ; 9 System. out. p r i n t l n ( ) ; 10 } 11 s t a t i c void y ( i n t n ) { 12 z ( n ) ; 13 i f ( n > 0) 14 y ( n 1) ; 15 z ( n+1) ; 16 } 17 } 1. (1 Pkte.) y ist eine Klassen-Methode. Woran erkennt man das? Eine Klassen-Methode erkennt man am Schlüsselwort static. 2. (2 Pkte.) Sie wollen in einem Programmstück einer Klasse im selben Package die Klassen-Methode y aufrufen, und dabei die Zahl 5 als Parameter übergeben. Schreiben Sie einen enstprechenden Aufruf ohne dabei ein Objekt anzulegen. Aufruf: Rec.y(5) 3. (2 Pkte.) Wäre folgender Aufruf ebenfalls möglich? 1 Rec r = new Rec ( ) ; 2 r. y ( 9 ) ; Begründen Sie! Ja, da Klassenmethoden auch aus Objektmethoden aufgerufen werden können. 4. (2 Pkte.) Obige Klassen-Definition enthält einen Fehler, der bereits zur Compile-Zeit erkannt wird. Welchen? Wie können Sie den Fehler korrigieren? Fehler in Zeile 8 - Aufruf einer nicht-static Methode. Zur Fehlerkorrektur ist ein static in der Methodendeklaration in Zeile 2 zu ergänzen. 3 / 10

5. (7 Pkte.) Schreiben Sie die Ausgabe auf, die nach Behebung des Fehlers produziert wird, wenn der Methode y der Wert 5 übergeben wird. Hinweis: Sie können diese Frage auch beantworten, wenn Sie den Fehler im vorigen Punkt nicht gefunden haben. Folgendes Muster entsteht: 1 000000 2 00000 3 0000 4 00 5 0 6 00 7 000 8 0000 9 00000 10 000000 11 0000000 4 / 10

3 Multiple choice (8 Pkte.) Kreuzen Sie an, ob folgende Aussagen wahr oder falsch sind. Jede richtige Antwort zählt einen Punkt. Für jede falsche Antwort wird ein Punkt abgezogen, Sie können aber in Summe nicht weniger als 0 Punkte auf dieser Aufgabe erreichen. Fehlende Antworten werden nicht gewertet. Wahr Falsch Eine abstrakte Klasse kann Objekt-Methoden definieren und weitervererben. Eine abstrakte Klasse darf keine Konstanten definieren. Ein Interface darf Klassen-Methoden aber keine Objekt- Methoden definieren. Das Zugriffsrecht protected vor einer Methode legt fest, dass diese Methode nur von Methoden einer Unterklasse überschrieben werden darf. Das Zugriffsrecht private vor einer Methode legt fest, dass nur Methoden derselben Klasse diese Methode verwenden dürfen. Mehrere Exceptions verschiedenen Typs können mit einer einzigen catch-klausel gefangen werden. Exceptions vom Typ RunTimeException müssen gefangen werden. Eine Variable, die als static deklariert wurde, darf in einer Unterklasse nicht verändert werden. 5 / 10

4 Rekursiv vs. iterativ (18 Pkte.) Die Klasse PersonItem sei wie folgt definiert: 1 p u b l i c c l a s s PersonItem { 2 S t r i n g name ; 3 i n t a l t e r ; 4 PersonItem next ; 5 } Gehen Sie davon aus, dass sie eine korrekt aufgebaute Liste von PersonItem-Objekten haben. Die Variable next zeigt also auf das nächste PersonItem-Objekt in der Liste. Am Ende der Liste hat die Variable next den Wert null. Ihre Aufgabe ist es, eine Java-Methode zu schreiben, die alle Namen der Personen zeilenweise auf dem Bildschirm ausgibt, die älter sind als ein vorgegebener Wert. 1. (9 Pkte.) Schreiben Sie eine Methode static void printnames recursive (PersonItem start, int age), die rekursiv alle Namen der Personen ausgibt, die älter sind, als der Wert des Parameters age. Sie dürfen bei dieser Lösung keine Schleifenkonstruktionen verwenden. 2. (9 Pkte.) Schreiben Sie eine Methode static void printnames iterativ (PersonItem start, int age), die iterativ alle Namen der Personen ausgibt, die älter sind, als der Wert des Parameters age. Sie dürfen bei dieser Lösung keine Methodenaufrufe verwenden. Ausnahme: Der Befehl zur Ausgabe auf dem Bildschirm. Tip: Sie dürfen annehmen, dass das an ihre Methoden übergebene PersonItem-Objekt nicht null sein wird. 1 s t a t i c void p r i n t N a m e s r e c u r s i v e ( PersonItem s t a r t, i n t age ) { 2 // F a l l s s t a r t n i c h t n u l l, 3 // dann g i b t es was zu tun! 4 i f ( s t a r t!= n u l l ) { 5 // Ausgabe des Namens, wenn ä l t e r a l s age 6 i f ( s t a r t. a l t e r > age ) { 7 System. out. p r i n t l n ( s t a r t. name ) ; 8 } 9 // r e k u r s i v e r A u f r u f mit nächstem Element der L i s t e 10 p r i n t N a m e s r e c u r s i v e ( s t a r t. next, age ) ; 11 } 12 } 13 14 s t a t i c void p r i n t N a m e s i t e r a t i v ( PersonItem s t a r t, i n t age ) { 15 f o r ( PersonItem item = s t a r t ; item!= n u l l ; item = item. next ) { 16 i f ( item. a l t e r > age ) { 17 System. out. p r i n t l n ( item. name ) ; 18 } 19 } 20 } 6 / 10

5 Hörsaalverwaltung (20 Pkte.) Die Hörsaalverwaltung der TUD benötigt eine neue Software. Sie gehören einem Team an, dass diese Software entwickelt. Heute erhalten Sie die Aufgabe eine Java-Klasse zu entwerfen, die einen Hörsaal mit seinen Eigenschaften beschreibt. Folgende Eigenschaften sollte ihre Klasse, der Sie den Namen LectureRoom geben, unterstützen: Gebäudenummer (building) Raumnummer (roomnumber) Anzahl der Sitzplätze (seats) Diese Eigenschaften sind für jedes Objekt unveränderlich, d.h. sie sollen nur bei der Erzeugung eines Hörsaal-Objektes mit Werten belegt werden können. Folgende Funktionen sollten Sie berücksichtigen und implementieren: 1. Entwerfen Sie geeignete Datenkomponenten für diese Klasse. Denken Sie daran, welche Zugriffsrechte eventuell benötigte Variablen haben sollten. 2. Schreiben Sie einen Konstruktur für diese Klasse. 3. Schreiben Sie Methoden, die die Werte der Eigenschaften zurückgeben (z.b. getroomnumber()). 4. Schreiben Sie eine Methode tostring(), die bei Aufruf Text folgender Art in Abhängigkeit der tatsächlichen Hörsaaldaten erzeugt und zurückgibt: Hörsaal: S202/C205 (256 Plaetze) 1 p u b l i c c l a s s LectureRoom { 2 p r i v a t e S t r i n g b u i l d i n g ; 3 p r i v a t e S t r i n g roomnumber ; 4 p r i v a t e i n t s e a t s ; 5 6 p u b l i c LectureRoom ( S t r i n g b u i l d i n g, S t r i n g roomnumber, i n t s e a t s ) { 7 t h i s. b u i l d i n g = b u i l d i n g ; 8 t h i s. roomnumber = roomnumber ; 9 t h i s. s e a t s = s e a t s ; 10 } 11 12 p u b l i c S t r i n g g e t B u i l d i n g ( ) { 13 return b u i l d i n g ; 14 } 15 16 p u b l i c S t r i n g getroomnumber ( ) { 17 return roomnumber ; 18 } 19 20 p u b l i c i n t g e t S e a t s ( ) { 21 return s e a t s ; 22 } 23 7 / 10

24 p u b l i c S t r i n g t o S t r i n g ( ) { 25 return H ö r s a a l : + b u i l d i n g + / + room + ( + s e a t s + P l a e t z e ) ; 26 } 27 } 8 / 10

6 Hörsaalbelegung (30 Pkte.) Die in der vorhergehenden Aufgabe vorgestellte Hörsaalverwaltung soll um eine Belegungsverwaltung erweitert werden. Die Belegungsverwaltung soll prüfen, wenn ein Hörsaal für ein vorgegebenes Datum reserviert wird, dass dieser Saal auch tatsächlich zu diesem Termin verfügbar ist. Falls nicht, soll eine entsprechende Fehlermeldung den Belegungskonflikt mitteilen. Erben Sie von der Klasse LectureRoom, die in der vorhergehenden Aufgabe erstellt wurde. Unabhängig von Ihrer Lösung in der vorhergehenden können Sie davon ausgehen, dass die Klasse LectureRoom folgende Methoden und Konstruktoren besitzt. public LectureRoom(String building, String roomnumber, int seats) Initialisiert ein neu erzeugtes Objekt mit der Gebäude- und Raumnummer und der verfügbaren Anzahl der Sitzplätze. public String tostring () gibt einen String in der Form Hörsaal: S202/C205 (256 Plaetze) zurück. Schreiben Sie nun eine neue Klasse LectureRoomAllocation die von der Klasse LectureRoom erbt und implementieren Sie folgende Methoden: public void doreservation( String date) Diese Methode bekommt ein Datum als String übergeben (z.b. 20.10.2005). In der Methode prüfen Sie, ob dieses Datum schon belegt ist. Falls ja, dann lösen Sie eine Ausnahme vom Typ Exception mit einer aussagekräftigen Fehlermeldung aus. Falls nein, dann tragen Sie dieses Datum als belegt ein. public String tostring () In dieser Methode erzeugen Sie einen String in der Form: Hörsaal: S202/C205 (256 Plaetze) ist belegt am 06.10.2005 27.10.2005. Sollte keine Belegung existieren, dann erzeugen Sie einen String in der Form: Hörsaal: S202/C205 (256 Plaetze) ist nicht belegt. Verwenden Sie sinnvoll auch die überschriebene tostring()- Methode der Superklasse. Sie müssen auch einen Konstruktor definieren, der alle notwendigen Initialisierungswerte übergeben bekommt und diese an den Konstruktor der Superklasse weiterleitet. Hinweis: Es ist hilfreich, die Klasse HashSet aus dem Package java.util zu verwenden. Falls Sie diese Klasse verwenden, vergessen Sie nicht, sie zu importieren. Deren Methode add liefert true zurück, falls das übergebene Element eingefügt werden konnte, ansonsten false, weil das Element schon vorhanden ist. Die Methode iterator liefert ein Iterator-Objekt zurück. Die Methode isempty, liefert true, falls kein Element in der Menge ist. 1 import j a v a. u t i l. HashSet ; 2 3 p u b l i c c l a s s L e c t u r e R o o m A l l o c a t i o n extends LectureRoom { 4 5 Set a l l o c a t i o n s = new HashSet ( ) ; 6 7 p u b l i c L e c t u r e R o o m A l l o c a t i o n ( S t r i n g b u i l d i n g, S t r i n g roomnumber, i n t s e a t s ) { 8 super ( b u i l d i n g, roomnumber, s e a t s ) ; 9 // e v e n t u e l l auch : 10 // a l l o c a t i o n s = new HashSet ( ) ; 11 } 9 / 10

12 13 p u b l i c void d o R e s e r v a t i o n ( S t r i n g date ) throws E x c e p t i o n { 14 i f (! a l l o c a t i o n s. add ( date ) ) { 15 // F a l l s der E i n f ü g e b e f e h l n i c h t e r f o l g r e i c h 16 // a u s g e f ü h r t werden kann, dann E x c e p t i o n. 17 throw new E x c e p t i o n ( Der H ö r s a a l i s t f ü r d i e s e n Tag b e r e i t s b e l e g t : + date ) ) ; 18 } 19 } 20 21 p u b l i c S t r i n g t o S t r i n g ( ) { 22 S t r i n g r e t u r n S t r i n g = super. t o S t r i n g ( ) ; 23 24 i f ( a l l o c a t i o n s. isempty ( ) ) { 25 r e t u r n S t r i n g = r e t u r n S t r i n g + i s t n i c h t b e l e g t. ; 26 } e l s e { 27 r e t u r n S t r i n g = r e t u r n S t r i n g + i s t b e l e g t am ; 28 29 I t e r a t o r i t = a l l o c a t i o n s. i t e r a t o r ( ) ; 30 31 // I t e r i e r e über d i e vorhandenen Datumseinträge 32 while ( i t. hasnext ( ) ) { 33 r e t u r n S t r i n g = r e t u r n S t r i n g + + i t. next ( ) ; 34 } 35 } 36 return r e t u r n S t r i n g ; 37 } 38 } 10 / 10