Klausur - Informatik I SS 05. Note: Bearbeitungszeit 120 Minuten Keine Hilfsmittel

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

Klausur Informatik 1 SS 08. Aufgabe Max. Punkte Punkte. Gesamtpunkte:

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

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

Übung Datenstrukturen. Sortieren

JAVA - Suchen - Sortieren

Grundlagen: Algorithmen und Datenstrukturen

QuickSort ist ein Sortieralgorithmus, der auf der Idee des Teile & Beherrsche beruht, und das gegebene Array an Ort und Stelle (in place) sortiert

Wuerfel - augenzahl: int + Wuerfel() + wuerfeln() + gibaugenzahl(): int

Präsenzübung Datenstrukturen und Algorithmen SS 2014

1. Teilklausur. Name:... Vorname:... Matrikel-Nummer:...

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

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015

Allgemeine Hinweise:

M3 M4 M7 VORNAME: Compare VERTIEFUNG:

Fakultät IV Elektrotechnik/Informatik

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

Übungsblatt 7. Thema: Sortieren, Objektorientierung

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

Erste Java-Programme (Scopes und Rekursion)

Prüfung Algorithmen und Datenstrukturen I

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

Lehrstuhl für Angewandte Informatik I SS 2003 Prof. Dr. Andreas Henrich 23. September Konzepte der Programmierung. Klausur

Prof. H. Herbstreith Fachbereich Informatik. Leistungsnachweis. Informatik 1 WS 2001/2002

Klausur Softwaretechnologie SS 2017

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

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

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

Klausur Algorithmen und Datenstrukturen

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

Programmierung für Mathematik HS11

2. Präsenzübung Datenstrukturen und Algorithmen SS 2014

Aufgabe 1 (Programmanalyse):

Sommersemester Jewgeni Rose. Technische Universität Braunschweig

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

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

Fakultät IV Elektrotechnik/Informatik. Klausur Einführung in die Informatik I (Technikorientierung) 28. März Bearbeitungszeit: 120 Minuten

Interne Sortierverfahren

2. Klausur zur Vorlesung Informatik 1 im Wintersemester 2014/2015 am 30. März Bearbeitungszeit: 90 Minuten Gesamtpunktezahl: 90 Punkte

Grundlegende Sortieralgorithmen

Abschnitt 19: Sortierverfahren

Klausur Algorithmen und Datenstrukturen

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

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

Einführung in die Programmierung

Übung Algorithmen und Datenstrukturen

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

Test-Driven Design: Ein einfaches Beispiel

Grundlagen. Übungen. Klassen, Attribute, Assoziationen, Methoden. Grundlagen_Klassen_Attribute_Assoziationen_Methoden.odt. Christine Janischek

Aufgabenblatt 2 Suchen und Sortieren. Aufgabe 1: Vergleiche und Sortieren in Java

In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:

Grundlegende Sortieralgorithmen

Semestralklausur Informatik I - Programmierung

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015. Musterlösung

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

Programmierung für Mathematik (HS13)

Algorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing

Probeklausur zur Vorlesung

Klausur Software-Entwicklung März 01

Grundlegende Sortieralgorithmen

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

Die Schnittstelle Comparable

FAKULTÄT FÜR INFORMATIK

Kapitel 2. Weitere Beispiele Effizienter Algorithmen

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

M3 M4 M7 VORNAME: Gewinnt VERTIEFUNG:

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

Lösung für die Klausur zur Vorlesung Informatik 1 im Wintersemester 2014/2015 am 18. Februar 2015

Informatik Abitur Bayern 2017 / II - Lösung

Klausur Grundlagen der Programmierung

Name:... Matr.-Nr... Bearbeitungszeit: 120 Minuten

Grundlagen: Algorithmen und Datenstrukturen

Lösung der Klausur zur Vorlesung. Grundlagen der Informatik und Numerik. Dr. Monika Meiler. Jedes Blatt ist mit der Matrikelnummer zu versehen.

Klausur "ADP" SS 2015

Informatik II: Algorithmen & Datenstrukturen. Blättern Sie nicht um bevor Sie dazu aufgefordert werden!

Allgemeine Informatik II

Klausur Algorithmen und Datenstrukturen I WS 05/06

Klausur "ADP" SS 2016

Übungsblatt 1. f(n) = f(n) = O(g(n)) g(n) = O(f(n)) Zeigen oder widerlegen Sie: 3 n = Θ(2 n ) Aufgabe 1.2 Gegeben sei die folgende Funktion:

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

Übung: Algorithmen und Datenstrukturen SS 2007

Informatik II Übung 2

Klausur Algorithmen und Datenstrukturen I SS 03

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Programmiertechnik II Klausur SS 2018 Angewandte Informatik Bachelor

Prüfung A Informatik D-MATH/D-PHYS :15 14:55

Abschlussklausur. Lösung

Probeklausur Informatik 2 Sommersemester 2013

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

Aufgabe 1 (12 Punkte)

Prüfung Algorithmen und Datenstrukturen I

Musterlösung Stand: 5. Februar 2009

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

Nachklausur Bitte in Druckschrift leserlich ausfüllen!

Kurs 1661 Datenstrukturen I Klausur am Seite 1. Hinweise zur Bearbeitung der Klausur zum Kurs 1661 Datenstrukturen I

Aufgabe (Schreibtischtest, lexikographische Ordnung)

1. Testklausur Sommersemester 2013 Datenstrukturen und Algorithmen 24. Mai 2013

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

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

Vorlesung Objektorientierte Programmierung Klausur

Transkript:

Klausur - Informatik I SS 05 Aufgabe 1 2 3 4 Punkte 40 30 40 10 Gesamtpunkte (max. 120): Note: Bearbeitungszeit 120 Minuten Keine Hilfsmittel Tragen Sie als erstes Ihren vollständigen Namen und Ihre Matrikelnummer ein. Name: Matrikelnummer: Fragen Sie bei Unklarheiten in der Aufgabenstellung sofort nach. Tragen Sie Ihre Lösungen nur in diese Aufgabenblätter ein und verwenden Sie auch die Rückseite (mit Bezug zur Teilaufgabe). Sollte der Platz nicht ausreichen, so erhalten Sie weitere Blätter. Geben Sie alle Aufgabenblätter ab. Falls Sie die Heftung der Klausur entfernen, dann schreiben Sie bitte auf jedes einzelne Blatt Ihren Namen und Matrikelnummer. Verwenden Sie keine Bleistifte und keine rote Farbe. Halten Sie Ihren Studentenausweis zur Kontrolle bereit. - 1 von 12 -

1. UML, Java a) (12 Punkte) Beschreiben Sie folgenden Sachverhalt mit einem UML Klassendiagramm. Halten Sie sich bei Ihrem Entwurf an die Java Namenskonventionen. In einem Webshop sollen Produkte verkauft werden. Ein Produkt hat einen Namen, einen Einzelpreis exklusive Mehrwertsteuer und eine Bestellnummer. Die Verkaufswährung ist Euro. Jedes Produkt unterliegt genau einem Mehrwertsteuersatz (derzeit 16% oder reduzierte Mehrwertsteuer 7.5%). Der Mehrwertsteuersatz kann sich unabhängig vom Produkt ändern (z.b. von 16% auf 18% steigen). Kunden, die im Webshop einkaufen, können die angebotenen Produkte in einem Warenkorb sammeln. Der Warenkorb enthält aber nicht die Produkte selbst, sondern jeweils ein Angebot des Produkts in einer bestimmten Menge und zu einem bestimmten Einzelpreis (exklusive Mehrwertsteuer). Der Einzelpreis des Angebots ist normalerweise identisch mit dem des angebotenen Produkts, aber durch Rabatte kann der Preis im Angebot durchaus vom Produktpreis verschieden sein. Produkte sollen in einer bestimmten Menge zu einem Warenkorb hinzugefügt oder weggenommen werden können (es werden dann daraus Angebote). Rabatte und Kunden, spielen für diese Aufgabe selbst keine Rolle. Der Gesamtpreis eines Warenkorbs inklusive und exklusive Mehrwertsteuer soll berechnet werden können. Der Gesamtpreis wird beim Warenkorb nie als Attribut gespeichert. Warenkorb +getgesamtpreis() : double +getgesamtpreisinclmwst() : double +addprodukt(produkt : Produkt, int menge) : void +removeprodukt(produkt : Produkt, int menge) : void * -angebote[] Produkt -name : String -bestellnummer : String -einzelpreis : double 1 -produkt Angebot -anzahl : int -einzelpreis : double 1 -mwst Mehrwertsteuersatz -prozent : double - 2 von 12 -

b) (8 Punkte) Geben Sie für Ihre Klassen jeweils einen kurzen und spezifischen Kommentar an (nur der Text, keine Javadoc Tags). Klasse Kommentar Mehrwertsteuersatz Ein Mehrwertsteuersatz mit den Steuern in Prozent. Produkt Ein Produkt mit Namen, einer Bestellnummer, und einem Einzelpreis sowie genau einem Mehrwertsteuersatz. Angebot Ein Angebot einer Anzahl eines Produktes zu einem Einzelpreis. Warenkorb Ein Warenkorb mit mehreren Produktangeboten. c) (12 Punkte) Implementieren Sie die Methode zur Berechnung des Gesamtpreises inklusive Mehrwertsteuer. Gehen Sie davon aus, dass 1-n Beziehungen mit Feldern implementiert sind und dass es für alle Attribute die üblichen getter- und setter-methoden gibt. Die Methode darf in keinem Fall eine NullPointerException werfen. public double getgesamtpreis() { double gesamtpreis = 0.0; for (int i=0; produkte!= null && i < produkte.length; i++) { if (produkte[i]!= null) { Mehrwertsteuer mwst = produkte[i].getmehrwertsteuer(); if (mswt!= null) { gesamtpreis += produkte[i].geteinzelpreis() * (1.0 + mwst.getprozent()/100.0); return gesamtpreis; - 3 von 12 -

d)(8 Punkte) Implementieren Sie eine JUnit-Testmethode, die überprüft, ob bei einem Warenkorb mit einem Produktangebot zu einem Nettopreis von 200 Euro und Mengenanzahl 3 sowie Mehrwertsteuersatz 16% der richtige Gesamtpreis (200 * 3 * 1.16 = 696 Euro) berechnet wird. Sie können davon ausgehen, dass für jede Klasse neben den getter- und setter-methoden immer ein Konstruktor mit allen Attributen als Parameter existiert. Sie brauchen nicht die ganze JUnit-Klasse implementieren, nur die Testmethode. Der Testfall muss auch bei kleinen Ungenauigkeiten in der Zahlendarstellung korrekte Ergebnisse liefern. public void testgetgesamtpreis() { Warenkorb warenkorb = new Warenkorb(); Produkt produkt = new Produkt(200.0, 3, Studentenfutter ); produkt.setmwst(new Mehrwertsteuer(16.0)); asserttrue(warenkorb.getgesamtpreis() - 696.0 < 0.00001); - 4 von 12 -

2. Sortieren a) (6 Punkte) Führen Sie bei der nachstehenden Zahlenfolge den ersten Durchlauf von Bubblesort durch. Geben Sie nach jeder einzelnen Vertauschoperation jeweils den Zwischenzustand des teilsortierten Feldes an. Benutzen Sie dazu die folgenden Felder. 7 4 9 6 1 7 2 4 3 7 4 9 6 1 7 2 3 4 7 4 9 6 1 2 7 3 4 7 4 9 1 6 2 7 3 4 7 4 1 9 6 2 7 3 4 7 1 4 9 6 2 7 3 4 1 7 4 9 6 2 7 3 4 b ) (4 Punkte) Ein Sortierverfahren heißt stabil, wenn bei jeder zu sortierenden Folge von Elemente die ursprüngliche Reihenfolge gleicher Elemente in der sortieren Folge beibehalten wird. Im folgenden Beispiel kommt die 3 zweimal vor: die unterstrichene 3 vor der normalen 3. Nach Sortierung mit einem stabilen Sortieralgorithmus muss die unterstrichne 3 vor der anderen 3 auftreten: 5 3 6 2 3 1 1 2 3 3 5 6 Wenn folgende Zahlen mit einem stabilen Sortierverfahren sortiert werden, wie sieht die resultierende Reihenfolge der Zahlen aus? Geben Sie die sortierte Zahlenfolge an und ziehen Sie Pfeile von der ursprünglichen Zelle zur Zelle in der sortieren Folge. 7 4 2 5 4 1 5 4 1 2 4 4 4 5 5 7-5 von 12 -

c ) (6 Punkte) Ist Bubblesort ein stabiles Sortierverfahren? Begründen Sie Ihre Antwort. Wenn ja, was muss bei der Implementierung von Bubblesort beachtet werden, damit es stabil ist. Bubblesort ist stabil. Das kleinste Element wandert so weit nach links bis es auf das nächst kleinere trifft. Treffen zwei gleiche Elemente aufeinander, so dürfen Sie nicht vertauscht werden, damit die Implementierung stabil ist. d) (8 Punkte) Ist Quicksort ein stabiles Sortierverfahren? Begründen Sie Ihre Antwort. Wenn ja, was muss bei der Implementierung von Quicksort beachtet werden, damit es stabil ist. Quicksort ist nicht stabil. Bei der Partitionierung wird von links nach rechts gewandert bis ein Element gefunden wird, das größer oder gleich dem Pivot Element ist (analog von rechts nach links). Dann werden beide Elemente ausgetauscht. Man betrachte die Folge zweier Zahlen 1 und 1. Pivot Element ist 1. Der linker beziehungsweise der rechte Zeiger treffen sofort auf ein Elemente größer beziehungsweise kleiner als das Pivot Element. Die beiden 1en werden miteinander vertauscht. Danach werden die beiden Zeiger aufeinander zubewegt, überkreuzen sich und das Verfahren endet. Wie aus der Vorlesung bekannt muss allerdings bei einem Element kleiner oder gleich angehalten werden, da ansonsten nicht jede Folge richtig sortiert würde. - 6 von 12 -

e) (6 Punkte) Man betrachte Folgen von Zahlen, die zum größten Teil aufsteigend sortiert sind. Sie sollen zwischen zwei verschiedenen Implementierungen von Quicksort wählen. Beide unterscheiden sich nur in der Wahl des Pivot-Elements: 1. Die erste Implementierung wählt immer die erste Zahl des zu partitionierenden Bereichs aus, 2. die zweite Implementierung wählt immer die Zahl in der Mitte aus. Für welche Implementierung entscheiden Sie sich und warum? Für die zweite Variante, da sie einen wesentlich geringeren Zeitaufwand bei teilsortierten Zahlen hat. Bei der ersten Variante wird sehr oft die kleinste Zahl als Pivot Element gewählt und das linke Teilproblem hat dann die Größe, das Rechte die Größe n-1. Der resultierende Zeitaufwand ist O(n 2 ). Bei der zweiten Variante wird sehr oft die mittlere Zahl als Pivot Element gewählt, die resultierenden zwei Teilprobleme sind dann etwa gleich groß. Er resultierende Zeitaufwand ist O(n log 2 n). - 7 von 12 -

3. Rekursion Gegen sei folgende rekursiv definierte Funktion. 1, n = 1 f ( n) = f ( n 1) * f ( n 1), n > 1 a) (6 Punkte) Schreiben Sie eine rekursive Java Methode, die obige Funktion nach dem gegebenen rekursiven Schema berechnet, ohne irgendwelche Berechnungen zwischenzuspeichern und ohne weitere Vereinfachungen. public int getf(int n) { if (n == 1) { return 1; else { return f(n-1) * f(n-1); b) (2 Punkte) Um welchen Typ von Rekursion handelt es sich? Verzweigende Rekursion. - 8 von 12 -

c) (4 Punkte) Geben Sie die Rekurrenzgleichung an, die das Zeitverhalten Ihrer Methode im schlimmsten Fall definiert. T(n) = c, falls n = 1 ist T(n) = 2T(n-1) + c für n > 1 d) (2 Punkte) Geben Sie den Zeitaufwand Ihrer Implementierung an? (Ohne Beweis) O(2 n ) - 9 von 12 -

e) (8 Punkte) Geben Sie die ersten fünf rekursiven Aufrufe für n=3 als Aufrufbaum mit Wurzel f(3) an sowie den Zustand des Laufzeitkellers, wenn der letzte Aufruf noch nicht mit return beendet wurde. Der erste (nicht rekursive) Aufruf der Methode zählt mit zu den fünf Aufrufen dazu. Aufrufbaum: f(3) f(2) f(2) f(1) f(1) Laufzeitkeller: n = 2 n = 3 f) (6 Punkte) Implementieren Sie eine nicht rekursive Methode, die f(n) berechnet. Der Zeitaufwand ihrer Implementierung darf O(n) nicht überschreiten. public int getf(int n) { return 1; - 10 von 12 -

g) (12 Punkte) Wir setzen bei obiger rekursiven Definition f(1) = 2 (statt f(1) = 1). Geben Sie eine nicht rekursive Implementierung an, die f(n) berechnet. Der Zeitaufwand Ihrer Implementierung darf wieder O(n) nicht überschreiten. public int getf(int n) { int ergebniss = 2; while (n>1) { ergebniss = ergebniss * ergebniss; n--; return ergebniss; - 11 von 12 -

4. UTF-8 a) (6 Punkte) Geben Sie folgende UTF-8 Codierung eines Unicodezeichens. Geben Sie das zugehörige Unicodezeichen in Hexadezimaldarstellung an. Geben Sie jeden Einzelschritt Ihrer Berechnung an. 11101100 10010010 10001101 1100 0100 1000 1101 (2P) D48E (2P) 11101100 10010010 10001101 b) (4 Punkte) Stellt folgende Folge von Bits ein gültige UTF-8 codiertes Unicodezeichen dar? Begründen Sie Ihre Antwort. 1100 0001 1001 1001 Nein (1P), da das codierte Unicodezeichen 1011001 sieben Bit lang ist und damit mit dem Schema 0xxx xxx codiert werden müsste. (2P) - 12 von 12 -