Bitte beachten Sie, dass diese Aufgaben keinerlei Beschränkung des zu prüfenden Stoffes noch sonstige Rückschlüsse auf die Klausur begründen.

Ähnliche Dokumente
Probeklausur zur Vorlesung

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

Probeklausur: Programmierung WS04/05

Technische Universität München SoSe 2018 Fakultät für Informatik, I Mai 2018 Dr. Stefanie Demirci

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

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

Tutoraufgabe 1 (Casting): Programmierung WS17/18 Übungsblatt 2 (Abgabe ) Allgemeine Hinweise:

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

Übung zur Vorlesung Programmierung

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Tutoraufgabe 1 (Hoare-Kalkül):

Tutoraufgabe 1 (Verifikation):

Technische Universität München SoSe 2015 Institut für Informatik I Mai 2015 Dr. Tobias Lasser. Aufgabe 1 Rechnen mit Landau-Symbolen

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Klausur in Programmieren

Beispielprüfung CuP WS 2015/2016

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

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

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

System.out.println("TEXT");

Klausur Grundlagen der Programmierung

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

Informatik B von Adrian Neumann

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

Programmieren und Problemlösen

Klausur Programmiertechnik (Probeklausur 1)

Programmierung WS12/13 Lösung - Präsenzübung M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

ALP II Dynamische Datenmengen

Programmierung für Mathematik (HS13)

3. Übungsblatt zu Algorithmen I im SoSe 2017

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

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

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

Präsenzübung Datenstrukturen und Algorithmen SS 2014

Viel Erfolg bei der Bearbeitung der Aufgaben!

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik

Tutoraufgabe 1 (Implementierung eines ADTs):

Einstieg in die Informatik mit Java

Einführung in die Informatik

Programmierkurs Java

Programmiertechnik Übungen zu Klassen & -methoden

Übungsblatt 10. Thema: Abstrakte Datentypen, Datenstrukturen in Java

Programmieren in Java -Eingangstest-

16. Dynamische Datenstrukturen

Martin Unold INFORMATIK. Geoinformatik und Vermessung

int x = 3; int y = 11; public A () { this.x = z; y *= z;

Präsenzübung Programmierung WS 2016/2017

Client-Server-Beziehungen

Datenstrukturen und Algorithmen (SS 2013)

Martin Unold INFORMATIK. Geoinformatik und Vermessung

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

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

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Software Entwicklung 1

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

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

Basispruefung Herbst 2016/ Einführung in die Programmierung

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

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Programmierung WS14/15 Lösung - Präsenzübung C. Aschermann, F. Frohn, J. Hensel, T. Ströder

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

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

Informatik II. Woche 15, Giuseppe Accaputo

Programmierkurs Java

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

13. Bäume: effektives Suchen und Sortieren

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

WS 2003/2004, Zwischenklausur

Algorithmen & Datenstrukturen Midterm Test 2

Tutoraufgabe 1 (Pilze):

13. Bäume: effektives Suchen und Sortieren

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Einstieg in die Informatik mit Java

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

Tutoraufgabe 1 (Typcasting):

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Vorbereitende Aufgaben

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

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

Informatik 1 für Nebenfachstudierende Beispiele für Klausuraufgaben

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

TECHNISCHE UNIVERSITÄT MÜNCHEN. Abgabe: (vor der Vorlesung)

Klausur: Informatik I am 06. Februar 2009 Gruppe: D Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

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

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

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Ersetzbarkeit und Verhalten

Klausur in Programmieren

Algorithmen und Programmierung III

Wie entwerfe ich ein Programm?

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

Übung Programmierung WS 2007/08 - Blatt 6

Anweisungen zur Ablaufsteuerung

Programmierkurs (Java) 30. Oktober 2017 Institut für Informatik ÜBUNGBLATT 02. Dieses Übungsblatt wird in der Woche des 06. November besprochen.

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Transkript:

Vorbemerkungen: Bitte beachten Sie, dass diese Aufgaben keinerlei Beschränkung des zu prüfenden Stoffes noch sonstige Rückschlüsse auf die Klausur begründen. Die Auswahl der hier gestellten Aufgaben erfolgte unter dem Gesichtspunkt, Ihnen einen Eindruck von möglichen Klausur-Aufgaben vermitteln. Eine Beschränkung der Klausur- Aufgaben auf die hier ausgewählten Themen ist damit nicht verbunden. Bei einigen Aufgaben liegt es nahe, zur Lösung einen Computer zu Hilfe zu nehmen. Da bei der Klausur aber keine Hilfsmittel erlaubt sind, sollten Sie dies bei Ihrer Vorbereitung beachten. Die Lösungen der Aufgaben werden in der Vorlesung am 2004-Feb-04 vorgestellt. Am Tag vorher werden die Lösungen im Web veröffentlicht. Aus Platzgründen wird in der Aufgabe 7 auf die Post-Aufgabe aus den Übungen verwiesen. In der Klausur würden die Angaben mit in der Aufgabenstellung stehen. Algorithmik I WS 2003/04 1

Aufgabe 1 10 Punkte Gegeben sei folgendes Java-Programm: 1 c l a s s F e h l e r h a f t O d e r N i c h t { 2 p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { 3 i n t l f v = ( i n t ) 2. 3 4 5 ; 4 double i = 3 ; 5 boolean b = f a l s e ; 6 7 System. o u t. p r i n t l n ( Programm S t a r t ) ; 8 f o r ( i n t t e s t = 0 ; b ; l f v ) { 9 ; 10 11 while ( b = true ) { 12 System. o u t. p r i n t l n ( i n d e r While S c h l e i f e ) ; 13 } / / w h i l e 14 15 } / / f o r 16 System. o u t. p r i n t l n ( Programm Ende ) ; 17 } / / main 18 } / / c l a s s F e h l e r h a f t O d e r N i c h t Untersuchen Sie das Programm zunächst auf syntaktische Fehler. Entscheiden Sie, ob das Programm übersetzbar und ausführbar ist oder nicht. Bearbeiten Sie abhängig von Ihrer Entscheidung genau eine der beiden folgenden Aufgaben: a) Wenn Sie der Meinung sind, dass das Programm syntaktische Fehler enthält, so geben Sie diese unter Angabe der Zeilennummer an. b) Wenn Sie der Meinung sind, dass das Programm übersetzbar und ausführbar ist, dann geben Sie genau an, was das Programm ausgibt. Lösungsvorschlag Aufgabe 1 8 Punkte für die richtige Entscheidung, dass das Programm keine Fehler enthält. 2 Punkte für die richtige Ausgabe. Lösung: Das Programm ist fehlerfrei übersetzbar und ausführbar. Das Programm gibt genau zwei Zeilen Text aus: Programm-Start Programm-Ende Algorithmik I WS 2003/04 2

Aufgabe 2 10 Punkte Geben Sie für jede der folgenden Formeln einen Ausdruck in Java an, der sie berechnet. Setzen Sie Variablen mit geeigneten Namen und Datentypen voraus. a) s = s 0 + v 0 t + 1 2 gt b) EW = AW(1 + p/100) LZ c) c = a 2 + b 2 + 2abcosy Sie können die Methoden Math.pow(double, double), Math.sqrt(double), und Math.cos(double) der Klasse java.lang.math benutzen. Lösungsvorschlag Aufgabe 2 a) s = s0 + v0 t + 1.0/2.0 Math.pow(g, t) b) ew = aw Math.pow((1.0 + p/100.0), LZ) oder ew = aw Math.pow((1 + p/100), LZ) c) c = Math.sqrt(Math.pow(a, 2.0) + Math.pow(b, 2.0) + 2.0 a b Math.cos(y)) a) 3 Punkte b) 3 Punkte c) 4 Punkte Algorithmik I WS 2003/04 3

Aufgabe 3 20 Punkte a) Was gibt folgende Schleife aus? 3 i n t j = 1 9 ; 4 i n t m = 0 ; 5 f o r ( i n t i = 9 ; i >= 0 && j > = 0 ; i, j ) { 6 m = ( i < 5? j < 1 0? i + + : j : j + + ) ; 7 System. o u t. p r i n t l n (m + + i + + j ) ; 8 } / / f o r b) Wandeln Sie das Programmfragment aus Teilaufgabe (a) um, so dass es statt der for-schleife und den?:-operatoren eine while-schleife und if-anweisungen enthält. Halten Sie die Codier-Regeln für Java ein. Lösungsvorschlag Aufgabe 3 a) Ausgabe des Programms 1 9 9 2 0 1 9 8 2 0 1 9 7 2 0 1 9 6 2 0 1 9 5 2 0 1 9 4 1 8 1 7 3 1 6 1 5 2 1 4 1 3 1 1 2 1 1 0 1 0 Algorithmik I WS 2003/04 4

b) While-Version 3 i n t j = 1 9 ; 4 i n t i = 9 ; 5 i n t m = 0 ; 6 i n t wertausdruck1 = 0, wertausdruck2 = 0 ; 7 while ( i >= 0 && j > = 0 ) { 8 i f ( i < 1 0 ) { 9 wertausdruck2 = j ; 10 } e l s e { 11 wertausdruck2 = i ; 12 } 13 i f ( wertausdruck2 < j ) { 14 wertausdruck1 = j ; 15 } e l s e { 16 wertausdruck1 = wertausdruck2 ; 17 } 18 i f ( i < 5 ) { 19 i f ( j < 1 0 ) { 20 i ++; 21 m = wertausdruck2 ; 22 } e l s e { 23 j ; 24 m = wertausdruck2 ; 25 } 26 } e l s e { 27 j ++; 28 m = wertausdruck1 ; 29 } 30 System. o u t. p r i n t l n (m + + i + + j ) ; 31 i ; 32 j ; 33 } / / w h i l e a) 8 Punkte b) 12 Punkte Algorithmik I WS 2003/04 5

Aufgabe 4 10 Punkte Formulieren Sie eine rekursive Methode, die zu zwei Integer-Zahlen n, m > 0 den Binomialkoeffizienten ( ) n m berechnet. Verwenden Sie die folgende Definition der Binomialkoeffizienten: ( ) n = m 0 : falls n < m 1 ) ( ) : falls m = 0 oder m = n + n 1 : sonst ( n 1 m 1 m Lösungsvorschlag Aufgabe 4 Hinweis: In der Aufgabe ist nur die Methode gefragt, ein Hauptprogramm oder Testfälle sind sind nicht notwendig. 3 p u b l i c s t a t i c i n t binkoeffrek ( i n t n, i n t m) { 4 i f ( n < m) { 5 return 0 ; 6 } e l s e i f (m = = 0 n = = m) { 7 return 1 ; 8 } e l s e { 9 return ( binkoeffrek ( n 1, m 1 ) 10 + binkoeffrek ( n 1, m ) ) ; 11 } 12 13 } / / b i n K o e f f R e k a) 10 Punkte Algorithmik I WS 2003/04 6

Aufgabe 5 4 Punkte Gegeben seien die Methoden foo(n) und bar(n) mit asymptotischen Aufwandsfunktionen O(logn) bzw. O(n). Es seien: k sei eine positive Konstante, n eine Variable, i und j seien Laufvariablen. Geben Sie den asymptotischen Aufwand (Komplexität) folgender Programmstücke in O-Notation an: a) b) f o r ( i n t i = 1 ; i <=k ; i + + ) foo ( n ) ; f o r ( i n t j = 1 ; j <=n ; j + + ) b a r ( j ) ; Lösungsvorschlag Aufgabe 5 a) O(logn) b) O(n 2 ) a) 2 Punkte b) 2 Punkte Algorithmik I WS 2003/04 7

Aufgabe 6 6 Punkte Gegeben Sei eine Streutabelle mit n = 18 Plätzen. Kollisionen werden durch lineares Fortschalten mit konstanter Schrittweite w aufgelöst. Geben Sie die Menge aller Schrittweiten w <= n an, bei denen beim linearen Fortschreiten prinzipiell jeder Platz erreicht werden würde. Lösungsvorschlag Aufgabe 6 Schrittweite und Tabellengrösse müssen teilerfremd sein. Hier: {1, 5, 7, 11, 13, 17} a) je 1 Punkt für jede richtige Schrittweite Algorithmik I WS 2003/04 8

Aufgabe 7 15 Punkte Ergänzen sie die Post-Aufgabe um eine Klasse BriefkastenImpl, die das Interface Briefkasten implementiert. Die Kunden können beliebig viele ihrer Briefe in den Briefkasten einwerfen. Zur Leerung des Briefkastens wird ein Postsack benutzt, in den dann die eingeworfenen Briefe gefüllt werden. Verwenden Sie folgendes Interface: p u b l i c i n t e r f a c e B r i e f k a s t e n { p u b l i c S t r i n g t o S t r i n g ( ) ; p u b l i c void w i r f B r i e f I n B r i e f k a s t e n ( B r i e f a k t B r i e f ) ; p u b l i c void l e e r e B r i e f k a s t e n I n P o s t s a c k ( P o s t s a c k a k t P o s t s a c k ) ; } / / c l a s s B r i e f k a s t e n Algorithmik I WS 2003/04 9

Lösungsvorschlag Aufgabe 7 import j a v a. u t i l. ; c l a s s B r i e f k a s t e n I m p l implements B r i e f k a s t e n { p r i v a t e HashSet b r i e f k a s t e n I n h a l t = new HashSet ( ) ; p u b l i c S t r i n g t o S t r i n g ( ) { S t r i n g z e i c h e n k e t t e = new S t r i n g ( I n h a l t des B r i e f k a s t e n s : \ n ) ; / / b ) / / Hier s o l l e i n e Z e i c h e n k e t t e e r z e u g t werden, d i e / / d i e r e l e v a n t e I n f o r m a t i o n / / d e s B r i e f k a s t e n s e n t h a e l t, a l s o d i e B r i e f e, d i e d a r i n / / e n t h a l t e n s i n d. / / Verwenden S i e b e i den Erzeugung d i e t o S t r i n g Methode / / der B r i e f e! I t e r a t o r i t e r B r i e f k a s t e n = b r i e f k a s t e n I n h a l t. i t e r a t o r ( ) ; B r i e f a k t B r i e f ; / / S c h l e i f e ueber b r i e f e while ( i t e r B r i e f k a s t e n. hasnext ( ) ) { a k t B r i e f = ( B r i e f ) i t e r B r i e f k a s t e n. n e x t ( ) ; z e i c h e n k e t t e = z e i c h e n k e t t e + a k t B r i e f + \n ; } / / w h i l e return z e i c h e n k e t t e ; } / / t o S t r i n g p u b l i c void w i r f B r i e f I n B r i e f k a s t e n ( B r i e f a k t B r i e f ) { b r i e f k a s t e n I n h a l t. add ( a k t B r i e f ) ; } / / w i r f B r i e f I n B r i e f k a s t e n p u b l i c void l e e r e B r i e f k a s t e n I n P o s t s a c k ( P o s t s a c k a k t P o s t s a c k ) { a k t P o s t s a c k. addall ( b r i e f k a s t e n I n h a l t ) ; b r i e f k a s t e n I n h a l t. c l e a r ( ) ; / / Aufraeumen n i c h t v e r g e s s e n } / / l e e r e B r i e f k a s t e n I n P o s t s a c k } / / c l a s s B r i e f k a s t e n I m p l a) 7 Punkte tostring b) 3 Punkte wirfbriefinbriefkasten c) 5 Punkte leerebriefkasteninpostsack Algorithmik I WS 2003/04 10

Aufgabe 8 3 Punkte Geben Sie die schwächste Vorbedingung an. Hinweis: Anweisungen und Nachbedingung sind durch ein Komma getrennt. a) wp(a := 3 + b c;, a = 2 b) = b) wp(if (a > b) c := d; else e := f;, c = 7 e = f a = 4 b = 6) = Dabei seien: := die Wertzuweisung = der Test auf Gleichheit Lösungsvorschlag Aufgabe 8 a) 1 Punkte b) 2 Punkte Lösung: wp(a := 3 + b c;, a = 2 b) = (2 b = 3 + b c) wp(if (a > b) c := d; else e := f;, c = 7 e = f a = 4 b = 6) = (a = 4 b = 6 a b c = 7) Algorithmik I WS 2003/04 11

Aufgabe 9 6 Punkte 1 p u b l i c s t a t i c i n t m( i n t n ) { 2 / / P : n>=0 3 i n t r e s = 0 ; 4 i n t k = 1 ; 5 while ( k <= n ) { 6 r e s = r e s + k k k ; 7 k = k + 1 ; 8 } 9 / / Q:? 10 return r e s ; 11 } a) Für die obige Java-Methode gelte die Vorbedingung P : n >= 0. Was berechnet die Java- Methode? b) Formulieren Sie eine Nachbedingung Q, die ausdrückt, welchen Wert die Variable res beim Verlassen der Methode hat. Lösungsvorschlag Aufgabe 9 a) 3 Punkte b) 3 Punkte Lösung: a) Die Schleife berechnet die Summe der Kubikzahlen von 1 bis n b) Q : res = n k 3 k=1 Algorithmik I WS 2003/04 12

Aufgabe 10 20 Punkte Gegeben sei der folgende abstrakte Datentyp (ADT) Ring. Signaturen: neu : Ring leer : Ring booleant hinzufuegen : Ring int Ring entfernen : Ring Ring auslesen : Ring int drehen : Ring Ring Für alle r Ring, i integer gelten folgende Axiome: A1 : leer(neu()) = true A2 : leer(hinzufuegen(r, i)) = false A3 : entfernen(hinzufuegen(r, i)) = A4 : auslesen(hinzuf uegen(r, i)) = A5 : drehen(r) = { { { r : leer(r) hinzuf uegen(entf ernen(r), i) : sonst i : leer(r) auslesen(r) : sonst r : leer(r) hinzuf uegen(entf ernen(r), auslesen(r)) : sonst Hinweis: Massnahmen zur Synchronisation der Zugriffe auf den Ring brauchen nicht berücksichtigt werden. a) Geben Sie die Werte folgender Ausdrücke an. Schreiben Sie unter oder über die Gleichheitszeichen die jeweils verwendeten Axiome. (a) entf ernen(hinzunehmen(neu(), i)) = (b) auslesen(drehen(hinzunehmen(neu(), i)) = Algorithmik I WS 2003/04 13

b) Ergänzen Sie die folgende Implementierung für einen Ring. Sie können dabei davon ausgehen, dass nie mehr als MAX Elemente gleichzeitig im Ring vorhanden sein werden, die Anzahl der Operationen auf dem Ring ist aber nicht beschränkt. Die auszufüllenden Lücken sind durch einen Kommentar gekennzeichnet, z.b, // b) 1 c l a s s Ring { 2 f i n a l s t a t i c i n t MAX = 9 9 ; 3 p r i v a t e s t a t i c i n t [ ] e l e m e n t e ; 4 p r i v a t e s t a t i c i n t a n f a n g = 0 ; 5 p r i v a t e s t a t i c i n t ende = 1; 6 7 p u b l i c s t a t i c void neu ( ) { 8 / / a ) 9 } / / neu 10 11 p u b l i c s t a t i c boolean l e e r ( ) { 12 / / b ) 13 } / / l e e r 14 15 p u b l i c s t a t i c i n t a u s l e s e n ( ) { 16 / / c ) 17 } / / a u s l e s e n 18 19 p u b l i c s t a t i c void h i n z u f u e g e n ( i n t i ) { 20 / / d ) 21 } / / h i n z u f u e g e n 22 23 p u b l i c s t a t i c void e n t f e r n e n ( ) { 24 / / e ) 25 } / / e n t f e r n e n 26 27 p u b l i c s t a t i c void d r e h e n ( ) { 28 / / f ) 29 } / / drehen 30 31 } / / c l a s s Ring Algorithmik I WS 2003/04 14

Lösungsvorschlag Aufgabe 10 a) a) 1 Punkt, b) 4 Punkte b) 15 Punkte Lösung: a) (a) entf ernen(hinzuf uegen(neu(), i)) A3 = neu() (b) auslesen(drehen(hinzuf uegef uegenneu(), i)) A5 = auslesen(hinzuf uegen(entf ernen(hinzuf uegen(neu(), i), auslesen(hinzuf uegen(neu(), i))) A3 = auslesen(hinzuf uegen(neu(), auslesen(hinzuf uegen(neu(), i)))) A4 = auslesen(hinzuf uegen(neu(), i)) A4 = i Algorithmik I WS 2003/04 15

b) Implementierung: 1 / 2 Created on 07 Feb 2004 3 4 / 5 / @author wilke@cs. f a u. de 6 / 7 8 c l a s s Ring { 9 / / Anzahl der Elemente im Ring 10 / / zu T e s t z w e c k e n i s t e i n e k l e i n e Zahl g u e n s t i g 11 p r i v a t e f i n a l s t a t i c i n t MAX = 3 ; 12 13 / / S c h a l t e r der a n g i b t, ob Ring b e r e i t s i n i t i a l i s i e r t wurde 14 p r i v a t e s t a t i c boolean i n i t = f a l s e ; 15 16 / / V e k t o r der Ring Elemente 17 p r i v a t e s t a t i c i n t [ ] e l e m e n t e ; 18 19 s t a t i c i n t ende, a n f a n g ; 20 21 p r i v a t e s t a t i c boolean g e t I n i t ( ) { 22 return i n i t ; 23 } 24 25 / / g u t f u e r T e s t z w e c k e 26 p r i v a t e s t a t i c void a l l e s A u s g e b e n ( ) { 27 i f ( g e t I n i t ( ) ) { 28 f o r ( i n t i n d e x = a n f a n g ; i n d e x <= ende ; i n d e x + + ) { 29 System. o u t. p r i n t l n ( 30 Elem i n d e x = 31 + ( i n d e x % MAX) 32 + wert = 33 + e l e m e n t e [ i n d e x % MAX] ) ; 34 } 35 } 36 } / / a l l e s A u s g e b e n 37 38 / / Ring i n i t i a l i s i e r e n 39 p u b l i c s t a t i c void neu ( ) { 40 e l e m e n t e = new i n t [MAX] ; 41 a n f a n g = 0 ; 42 ende = 1 ; / / damit T e s t s nach den I n i t i a l i s i e r u n g 43 / / k o r r e k t s i n d 44 i n i t = true ; Algorithmik I WS 2003/04 16

45 } / / neu 46 47 / / Test, ob Elemente im Ring s i n d 48 p u b l i c s t a t i c boolean l e e r ( ) { 49 i f ( g e t I n i t ( ) ) { 50 return ende < a n f a n g ; 51 } e l s e 52 return f a l s e ; / / e x c e p t i o n waere b e s s e r! 53 } / / l e e r 54 55 / / T e s t ob a l l e P l a t z e im V e k t o r e l e m e n t e b e l e g t s i n d 56 p u b l i c s t a t i c boolean v o l l ( ) { 57 i f ( g e t I n i t ( ) ) { 58 return ( ende = = ( a n f a n g + MAX 1 ) ) ; 59 } e l s e { 60 return f a l s e ; / / e x c e p t i o n waere b e s s e r! 61 } 62 } / / v o l l 63 64 / / l i e s t das Element am Anfang des Rings aus 65 p u b l i c s t a t i c i n t a u s l e s e n ( ) { 66 i f ( g e t I n i t ( ) & &! l e e r ( ) ) { 67 return e l e m e n t e [ a n f a n g % (MAX) ] ; 68 } e l s e 69 return 0 ; / / e x c e p t i o n waere b e s s e r! 70 } / / a u s l e s e n 71 72 / / 73 p u b l i c s t a t i c void h i n z u f u e g e n ( i n t neueselem ) { 74 i f ( g e t I n i t ( ) ) { 75 i f (! v o l l ( ) ) { 76 ende ++; 77 e l e m e n t e [ ende % (MAX) ] = neueselem ; 78 } e l s e { 79 System. e r r. p r i n t l n ( 80 Kein P l a t z mehr f u e r Element + i 81 + vorhanden! ) ; 82 / / e x c e p t i o n waere b e s s e r! 83 } 84 } 85 } / / h i n z u f u e g e n 86 87 p u b l i c s t a t i c void e n t f e r n e n ( ) { 88 i f ( g e t I n i t ( ) ) { 89 i f (! l e e r ( ) ) { 90 a n f a n g ++; Algorithmik I WS 2003/04 17

91 } e l s e { 92 System. e r r. p r i n t l n ( 93 E n t f e r n e n n i c h t moeglich, 94 + da d e r Ring l e e r i s t. ) ; 95 / / e x c e p t i o n waere b e s s e r! 96 } 97 } 98 } / / e n t f e r n e n 99 100 p u b l i c s t a t i c void d r e h e n ( ) { 101 i f ( g e t I n i t ( ) ) { 102 i n t z w i s c h e n s p e i c h e r = a u s l e s e n ( ) ; 103 e n t f e r n e n ( ) ; 104 h i n z u f u e g e n ( z w i s c h e n s p e i c h e r ) ; 105 } 106 } / / drehen 107 108 } / / c l a s s Ring Algorithmik I WS 2003/04 18

Aufgabe 11 18 Punkte Der Betreiber eines Internet-Chat-Rooms will die Zeiten ermitteln, in denen keiner seiner Kunden im Chat-Room eingewählt ist, z.b. um in diesen Zeiten den Rechner zu warten. Als Daten stehen die Protokolldateien zur Verfügung, die verzeichnen, wann ein Benutzer sich ein- und ausgewählt hat. Zu Testzwecken wurde der Chat-Room nur einen Tag geöffnet, das Protokoll aller Zu- und Abgänge sieht wie folgt aus: Benutzername Begin Ende Dagobert 16:44 17:33 Daisy 12:34 23:44 Donald 13:52 14:15 Tick 8:15 9:33 Track 15:58 17:11 Trick 9:58 10:37 a) Skizzieren Sie einen Algorithmus, der die benötigte Information berechnet. b) Zeigen Sie an den oben angegebenen Daten, wie der Algorithmus arbeitet, und was für ein Ergebnis er liefert. c) Geben Sie den asymptotischen Aufwand für Ihren Algorithmus bei n Einträgen an. Algorithmik I WS 2003/04 19

Lösungsvorschlag Aufgabe 11 a) 10 Punkte b) 5 Punkte c) 3 Punkte Lösung: a) Man ordnet jedem Beginn-Zeitpunkt den Zähler +1 zu, jedem End-Zeitpunkt den Zähler -1. Dann sortiert man die Zeiten in aufsteigender Reihenfolge. Danach beginnt man die Zähler zu addieren. Immer wenn der Zähler 0 ist, ist niemand eingewählt. b) Zeit Zu/Abgang Anzahl 8:15 +1 1 9:33-1 0 9:58 +1 1 10:37-1 0 12:34 +1 1 13:52 +1 2 14:15-1 1 15:58 +1 2 16:44 +1 3 17:11-1 2 17:33-1 1 23:44-1 0 In den Zeiten - 8:15, 9:33-9:58, 10:37-12:34, und 23:44 - war niemand im Chat-Room. c) Für die Musterlösung: Durchlaufen der Liste, aufteilen der Daten, setzen der Zähler (+1/-1): O(n) Sortieren O(nlogn) Durchlaufen der Liste, aufaddieren der Zähler : O(n) Gesamtaufwand: O(nlogn) Bemerkung: Es gibt auch eine Lösung in O(n), dem Leser als Übung überlassen. Algorithmik I WS 2003/04 20