Klausur zur Veranstaltung Programmierung (fortgeschrittene Konzepte)

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

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

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

ALP II Dynamische Datenmengen Datenabstraktion

Prüfung Algorithmen und Datenstrukturen I

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.

Allgemeine Hinweise:

Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper

16. Dynamische Datenstrukturen

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

Vorlesung Datenstrukturen

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

Klausur: Java (Liste P)

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

13. Dynamische Datenstrukturen

Anwendungsbeispiel MinHeap

Prof. Dr. Uwe Schmidt. 30. Januar 2017

4.4.1 Implementierung vollständiger Bäume mit Feldern. Reguläre Struktur: Nachfolger des Knoten i sind die Knoten 2*i und 2*i+1.

Technische Universität Braunschweig

Übung Algorithmen und Datenstrukturen

Physikalisch Technische Lehranstalt Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt

Schnittstellen, Stack und Queue

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

Einführung in die Informatik

5.3 Doppelt verkettete Listen

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

Allgemeine Hinweise:

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

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

Fachhochschule Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt

Algorithmen und Programmierung III

Probeklausur zur Vorlesung

Mengen und Multimengen

Technische Universität Braunschweig

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

Aufgaben NF 11; Seite 1

Städtisches Gymnasium Olpe Java Ht Informatik - Q1 Die Klasse List im Abitur Methoden und Beispielcode Hier alle wichtigen Methoden. Ein Beispielcode

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

Übung Datenstrukturen. Bäume

B6.1 Introduction. Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B6.1 Introduction. B6.3 Analyse. B6.4 Ordnungsbasierte Methoden

Allgemeine Hinweise:

Teil 1: Suchen. Ausgeglichene Bäume B-Bäume Digitale Suchbäume. M.O.Franz, Oktober 2007 Algorithmen und Datenstrukturen - Binärbäume 1-1

Datenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik

Einstieg in die Informatik mit Java

Prüfung Algorithmen und Datenstrukturen I

Informatik II Prüfungsvorbereitungskurs

public interface Stack<E> { public void push(e e); public E pop();

Allgemeine Hinweise:

Übung Algorithmen und Datenstrukturen

Technische Universität Braunschweig

Übung Algorithmen und Datenstrukturen

Geordnete Binärbäume

1. Aufgabe (6 Punkte): Java-Programmierung (Arrays)

Gliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen

Programmieren in Java

Klausur Algorithmen und Datenstrukturen SS August Arbeitszeit 90 min

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Algorithmen und Datenstrukturen

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

Otto-von-Guericke-Universität Magdeburg Fakultät für Informatik Institut für Simulation und Graphik Prof. Dr. Holger Theisel

7. Verkettete Strukturen: Listen

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Bäume. Prof. Dr. Christian Böhm. in Zusammenarbeit mit Gefei Zhang. WS 07/08

Bäume. Martin Wirsing. Ziele. Implementierung von Knoten. Bäume (abstrakt) Standardimplementierungen für Bäume kennen lernen

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

12. Dynamische Datenstrukturen

Name: Seite 1. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

Software Entwicklung 1

13. Bäume: effektives Suchen und Sortieren

Übungsblatt 9. Thema: Methoden-Dispatching, Datenstrukturen, Abstrakte Datentypen

Stacks, Queues & Bags. Datenstrukturen. Pushdown/Popup Stack. Ferd van Odenhoven. 19. September 2012

Bäume 1. Thomas Röfer

ALP II Dynamische Datenmengen

Klausur zur Vorlesung Informatik 1 im Wintersemester 2014/2015 am 18. Februar Bearbeitungszeit: 90 Minuten Gesamtpunktezahl: 90 Punkte

Semestralklausur Informatik I - Programmierung

Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute

13. Bäume: effektives Suchen und Sortieren

Klausur zur Vorlesung Algorithmen und Datenstrukturen

Prof. Dr. Uwe Schmidt. 1. Februar Aufgaben zur Klausur C und Objektorientierte Programmierung im WS 2010/11 (WI h103, II h105, MI h353)

Grundlagen der Informatik / Algorithmen und Datenstrukturen. Aufgabe 143

Klausur zur Vorlesung Algorithmen und Datenstrukturen

7. Dynamische Datenstrukturen Bäume. Informatik II für Verkehrsingenieure

Prüfung Softwareentwicklung II (IB)

1. Die rekursive Datenstruktur Liste

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 17/18. Kapitel 14. Bäume. Bäume 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1

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

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

Klausur "ADP" SS 2015

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Mengen und Multimengen

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

Objektorientierung III

Transkript:

Klausur zur Veranstaltung Programmierung (fortgeschrittene Konzepte) Bearbeitungszeit: 100 Minuten (14:15-15:55) Gesamtpunktzahl: 80 Punkte + 30 Zusatzpunkte Die Punktzahlen sind in etwa so bemessen, dass es pro Minute Bearbeitungszeit einen Punkt gibt. Zwar sind die Zusatzaufgaben die schwersten, aber wenn Sie Ihnen leichter erscheinen als reguläre Aufgaben, dann bearbeiten Sie lieber diese. Zum Bestehen sind 40 Punkte notwendig. Sollte der Platz auf dem Aufgabenblatt nicht ausreichen, dann verwenden Sie zusätzlich die Rückseite(n). Name, Vorname: Matrikelnummer: Veröffentlichung meines Ergebnisses: Veröffentlichung auf der Webseite der Veranstaltung unter den letzten beiden Ziffern meiner Matrikelnummer. Veröffentlichung auf der Webseite der Veranstaltung unter dem folgenden vierziffrigen Zahlencode: Keine Veröffentlichung meines Ergebnisses auf der Webseite der Veranstaltung.

Aufgabe 1 (15 Punkte) Das folgende Codesegment speichert geometrische Objekte unter einem Schlüssel vom Typ String in einer Hashtable. Anschließend werden einige geometrische Objekte mittels ihres Schlüssels aus der Hashtable ausgelesen und ihr Flächeninhalt ausgegeben. Hashtable mytable= new Hashtable(); mytable.put("rechteck1",new Rechteck(2.0,3.5)); mytable.put("kreis1",new Kreis(2.5)); mytable.put("kreis2",new Kreis(4.0)); GeomObjekt g1 = (GeomObjekt)myTable.get("Rechteck1"); System.out.println(g1.flaecheninhalt()); GeomObjekt g2 = (GeomObjekt)myTable.get("Kreis2"); System.out.println(g2.flaecheninhalt()); Wie Sie leicht erkennen können, stammt dieser Code aus einer Zeit, in der es noch keine Generics gab. Sie wollen allerdings auf die Vorteile von Generics nicht verzichten. Schreiben Sie deshalb den Code so um, dass er Generics verwendet. Eplizite Typecasts und instanceof-abfragen sollen in der Lösung nicht vorkommen. Hashtable<String,GeomObjekt> mytable= new Hashtable<String,GeomObjekt>(); mytable.put("rechteck1",new Rechteck(2.0,3.5)); mytable.put("kreis1",new Kreis(2.5)); mytable.put("kreis2",new Kreis(4.0)); GeomObjekt g1 = mytable.get("rechteck1"); System.out.println(g1.flaecheninhalt()); GeomObjekt g2 = mytable.get("kreis2"); System.out.println(g2.flaecheninhalt());

Aufgabe 2 (18 Punkte) Anton(A), Berta(B) und Charly(C) sind in einem Chatroom miteinander verbunden, in dem jeder alle Nachrichten von jedem lesen kann. Anton schreibt die Nachricht Wie gehts Euch?. Etwa zur gleichen Zeit, schreibt Charly, bevor er die Nachricht von Anton empfangen hat, die Nachricht Hallo allerseits!. Berta hat bereits die Nachricht von Anton gelesen, hat aber noch nicht die von Charly gelesen und schreibt Mir gehts gut!. Kurz darauf, ebenfalls noch, bevor sie die Nachricht von Charly empfangen hat, schreibt sie hinterher Richtig gut sogar!. Im folgenden sind für obenstehendes Szenario mehrere Beispiele angegeben, wie Anton, Berta und Charly ihre Nachrichten in ihrem Chatfenster sehen. Geben Sie jeweils an, ob die Reihenfolge dabei - eine totale Ordnung darstellt (total) - keine totale Ordnung darstellt, aber mit der Kausalordnung verträglich ist (kausal) - keine totale Ordnung darstellt, nicht mit der Kausalordnung verträglich ist, aber die FIFO- Reihenfolge einhält (FIFO) - weder eine totale Ordnung darstellt, noch mit der Kausalordnung verträglich ist, noch die FIFO-Reihenfolge einhält (ungeordnet) Beispiel 1 Beispiel 2 Beispiel 3 Beispiel 4 Beispiel 5 Beispiel 6 Chatfenster von A Chatfenster von B Chatfenster von C Jede richtige Antwort gibt 3 Punkte. Für falsche Antworten gibt es keinen Punktabzug. Wenn Sie die Antwort nicht wissen, dann raten Sie! Kreuzen Sie jedoch nur ein Feld pro Zeile an. Beispiel 1 Beispiel 2 Beispiel 3 Beispiel 4 Beispiel 5 Beispiel 6 total kausal FIFO ungeordnet

Aufgabe 3 (insgesamt 15 Zusatzpunkte) Aus der Vorlesung ist die Klasse ArrayQueue bekannt. Bei untenstehender Implementierung ist es problematisch, wenn zwei Threads gleichzeitig die Methode enqueue() ausführen. Wir nehmen dabei aus Gründen der Einfachheit an, dass jede Zeile Java-Code unteilbar ist. public class ArrayQueue<E> implements Queue<E> { E[] values; int front = 0; int rear = 0;... public void enqueue(e elem) throws QueueOverflow {... public boolean isempty() { return (rear==front); front rear 63 28 44 41 3a) (7 Zusatzpunkte) Angenommen, zwei Threads, Thread1 und Thread2 erhalten ihre Zeitfenster so zugeteilt, dass sich die untenstehende Ausführungsreihenfolge ergibt. Was für eine Folge hat dies für die Datenstruktur, wenn die Queue noch mindestens zwei freie Plätze enthält? Formulieren Sie Ihre Antwort allgemein und nicht anhand des obigen Beispiels. Thread 1 Thread 2 Nur der Wert aus Thread 2 ist eingefügt, statt des Wertes aus Thread 1 ist ein undefinierter Wert eingefügt.

3b) (8 Zusatzpunkte) Im Fall, dass es vor den Aufrufen nur noch einen freien Platz in der Queue gab, können zwei gleichzeitige Aufrufe von enqueue() aus zwei Threads dazu führen, dass anschließend die Schlange leer ist. Füllen Sie die untenstehende Tabelle mit einer Ausführungsreihenfolge aus, die dazu führt, dass anschließend die Schlange leer ist, also der Aufruf von isempty() true zurückgeben würde, sich aber beide einzufügenden Werte im Feld values befinden. Thread 1 Thread 2

Aufgabe 4 (10 Punkte) Schreiben Sie in Prolog eine Regel mehralseinelement(l) die wahr ist, genau dann, wenn L eine Liste mit mehr als einem Element ist. Dabei soll nicht die Länge des Liste ermittelt und mit 1 verglichen werden, so dass die Auswertung auch bei sehr langen Listen noch effizient ist. mehralseinelement([_,_ _]). Aufgabe 5 (15 Punkte) Schreiben Sie in Haskell eine Funktion inorder :: (Ord a) => BinSearchTree a -> [a] die eine Liste zurückgibt, die alle Elemente eines binären Suchbaums in Inorder-Reihenfolge enthält. Zur Erinnerung: data (Ord a) => BinSearchTree a = Empty Node (BinSearchTree a) a (BinSearchTree a) inorder Empty = [] inorder (Node l r) = inorder l ++ [] ++ inorder r

Aufgabe 6 (10 Punkte) Betrachten Sie den untenstehenden binären Suchbaum. Um eine effizientere Implementierung des Iterators in Java zu ermöglichen, soll er in einen gefädelten Baum umgewandelt werden. Zeichnen Sie die benötigten Fäden in diesen Baum ein. Zur Erinnerung: Fäden führen von Knoten, die kein rechtes Kind haben, zum Nachfolger in der Inorder-Reihenfolge. 35 22 41 17 28 44 24 42 48 45

Aufgabe 7 (insgesamt 12 Punkte) Aufgabe 7.1 (6 Punkte) Fügen Sie in den untenstehenden binären Suchbaum den Wert 15 ein. Zeichnen Sie den dadurch entstandenen Baum! Fügen Sie anschließend den Wert 26 ein. Zeichen Sie erneut den dadurch entstandenen Baum. Aufgabe 7.2 (6 Punkte) Geben Sie für den Ursprungsbaum sowie für den Baum, der nach dem Einfügen der 15 entstanden ist, und für den Baum, der nach Einfügen der 15 und der 26 entstanden ist, an, ob er die AVL- Eigenschaft erfüllt oder nicht. Jede richtige Antwort gibt dabei 2 Punkte. Für falsche Antworten gibt es keinen Punktabzug. Wenn Sie die Antwort nicht wissen, dann raten Sie! 24 Erfüllt AVL- Eigenschaft JA NEIN 18 31 Ursprungsbaum 22 27 36 Nach Einfügen der 15 21 25 34 Nach Einfügen der 15 und der 26 Binärer Suchbaum nach Einfügen der 15: Binärer Suchbaum nach Einfügen der 15 und der 26: 24 24 18 31 18 31 15 22 27 36 15 22 27 36 21 25 34 21 25 34 26

Aufgabe 8 (15 Zusatzpunkte) In der Vorlesung wurden Deques (Double-Ended-QUEues) kurz vorgestellt, das sind Schlangen, bei denen man an beiden Enden Elemente anstellen und entfernen kann. Schreiben Sie für die Klasse LinkedDeque, die Deques als doppelt verkettete Liste implementiert, die Methode appendfront(). Alle Methoden stellen sicher dass, wenn der Deque leer ist sowohl front als auch rear auf null zeigen und dass, wenn der Deque nicht leer ist, weder front noch rear auf null zeigen. public class LinkedDeque<E> implements Deque<E> { Cell<E> front = null; Cell<E> rear = null;... public interface Deque<E> { void appendfront(e elem) throws DequeOverflow; void appendrear(e elem) throws DequeOverflow; E removefront() throws DequeUnderflow; E removerear() throws DequeUnderflow; E getfront() throws DequeUnderflow; E getrear() throws DequeUnderflow; boolean isempty(); public class Cell<E> { E value; Cell<E> net; Cell<E> prev; public Cell(E value, Cell<E> net, Cell<E> prev) {... front rear 14 42 22 17 25 public void appendfront(e elem) { if (front==null) { front = rear = new Cell<E> (elem, null, null); else { front = new Cell<E> (elem, front, null); front.net.prev=front;