Klausur zur Vorlesung " Einführung in die Informatik"

Ähnliche Dokumente
Klausur zur Vorlesung Grundlagen der C++-Programmierung

Algorithmen und Datenstrukturen 1 Kapitel 4.1

Mächtigkeit von WHILE-Programmen

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Vorname:... Matrikel-Nr.:... Unterschrift:...

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

Algorithmen und Programmierung

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

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 15. Oktober 2005 Dr. Alfons Huhn, Timotheus Preisinger

2. Schriftliche Leistungskontrolle (EK)

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Programmieren I. Kapitel 7. Sortieren und Suchen

Rekursive Funktionen Basisfunktionen

DAP2-Klausur

Probeklausur: Programmierung WS04/05

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Algorithmen und Datenstrukturen 1 VL Übungstest WS 2010/ November 2010

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Komplexität von Algorithmen

EndTermTest PROGALGO WS1516 A

Informatik II Musterlösung

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11

Algorithmen und Datenstrukturen Wintersemester 2004/ November T(n) = T(n a) + T(a) + n

Algorithmen & Datenstrukturen 1. Klausur

Grundlegende Sortieralgorithmen

Theoretische Informatik 1

Die Programmiersprache C Eine Einführung

Klausur zur Vorlesung,,Algorithmische Mathematik II

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

Name:... Vorname:... Matrikel-Nr.:... Unterschrift:...

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

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

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Klausur zur Vorlesung Verteilte Systeme im SS 2007 Prof. Dr. Odej Kao 24. Juli 2007

Klausur Datenstrukturen und Algorithmen SoSe 2012

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g:

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

Klausur Informatik-Propädeutikum (Niedermeier/Hartung/Nichterlein, Wintersemester 2012/13)

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Datenstrukturen und Algorithmen

Programmierkurs Java

Abstrakte Algorithmen und Sprachkonzepte

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Fakultät Wirtschaftswissenschaft

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

Einführung in die Programmierung Vorlesungsprüfung

Stephan Brumme, SST, 2.FS, Matrikelnr

Einführung in die Java- Programmierung

Informatik II, SS 2014

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

TheGI 1: Grundlagen und algebraische Strukturen Prof. Dr.-Ing. Uwe Nestmann Februar Schriftliche Leistungskontrolle (EK)

Testklausur 2 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

Suchen und Sortieren (Die klassischen Algorithmen)

JAVA - Suchen - Sortieren

Theoretische Grundlagen der Informatik

Sie müssen den Test bis 20:00 Uhr am Abgabetag dieses Übungszettels absolviert haben.

Klausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 13. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

KV Software Engineering Übungsaufgaben SS 2005

Programmieren ++ Begleitende Übungen zu Veranstaltungen + Umsetzen des Algorithmus in ein lauffähiges Programm

Klausur Softwaretechnologie WS 2014/15

Lösungsskizzen zur Abschlussklausur Betriebssysteme

Name (in Druckbuchstaben): Matrikelnummer: Unterschrift:

Vorname: Nachname: Matrikelnummer: -Addresse: Studiengang (bitte genau einen ankreuzen): Master of SSE Erasmus Sonstige:

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Technische Universität Clausthal

Primitive Datentypen

Hochschule Darmstadt. IT-Sicherheit

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Java Einführung Methoden. Kapitel 6

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

1. Grundlagen Sortieren Vertauschen Selektion Einfügen Quicksort Suchen...

Einführung in die Informatik

1 Bedingungen und der Typ bool. Informatik I: Einführung in die Programmierung 5. Bedingungen, bedingte Ausführung und Schleifen. Vergleichsoperatoren

Bearbeitungszeit: 120 Minuten. Kommentare kosten Zeit; kommentieren Sie ihr Programm nur da, wo der Code alleine nicht verständlich wäre.

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block

Universität Duisburg - Essen

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Probeklausur: Programmierung WS04/05

4. Übungsblatt zu Mathematik für Informatiker I, WS 2003/04

Java Einführung Operatoren Kapitel 2 und 3

SWP Prüfungsvorbereitung

Prüfung Software Engineering II (IB)

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

Abschnitt: Algorithmendesign und Laufzeitanalyse

Wiederholungsklausur zur Vorlesung Informationsökonomik

Nachklausur zu Einführung in die Programmierung 14. Oktober 2008 (SS 2008) Prof. Dr. Franz Schweiggert / Christoph Ott

Klausur in Programmieren

Einführung in die Programmierung

Kostenmaße. F3 03/04 p.188/395

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Programmiertechnik II

Transkript:

Institut für Simulation und Graphik Magdeburg, 6. Februar 2012 Dr. Christian Rössl Klausur zur Vorlesung " Einführung in die Informatik" Name, Vorname Studiengang Matrikelnummer Zusatzbätter Unterschriften Student/in Aufsicht Hinweise zur Klausurbearbeitung Tabelle bitte nicht ausfüllen! Aufgabe max. Punkte erreicht 1 ADT 6 2 Korrektheit (rekursiv) 5 3 Korrektheit (imperativ) 6 4 Komplexität: Schleifen 3 5 Komplexität: Addition 3 6 Registermaschine 8 7 OOP 6 8 Binäre Suche 10 9 Quicksort 8 10 Wahr oder falsch? 5 A Bonus: Quadratwurzel (+2) 60 (+2) Bearbeitungszeit: 120 Minuten Überprüfen Sie die Klausur auf Vollständigkeit (12 nummerierte Blätter). Füllen Sie das Deckblatt aus! Beschriften Sie alle Blätter (Klausur, verteiltes Papier) mit Ihrem Namen. Legen Sie bitte alle für die Klausur benötigten Dinge, Stifte, Verpflegung und insbesondere Lichtbildausweis, auf Ihren Tisch. Schalten Sie Ihr Mobiltelefon aus! Hilfsmittel (Taschenrechner, Bücher, Skripten, Mobiltelefone,... ) sind nicht zugelassen! Täuschungsversuche führen zum Nichtbestehen der Klausur! Verwenden Sie für Ihre Antworten den freien Platz nach den Aufgaben und ggf. die Rückseiten der Blätter. Melden Sie sich, wenn Sie zusätzliche leere Blätter benötigen. Schreiben Sie deutlich! Unleserliche Passagen können nicht korrigiert werden. Benutzung von Bleistiften sowie roter und grüner Stiftfarbe ist untersagt. Beschränken Sie sich auf die geforderten Angaben und halten Sie Ihre Antworten kurz und präzise. Nicht geforderte Angaben ergeben keine zusätzlichen Punkte. Geben Sie bei Rechenaufgaben vor jedem Schritt an, was Sie gerade berechnen. Bewertet wird der Rechenvorgang, das Endergebnis allein genügt nicht. Viel Erfolg!

Aufgabe 1: Abstrakte Datentypen (6 Punkte) Erweitern Sie den vorgegebenen ADT Stack zur Darstellung von Stapeln um die Operatoren height und swap: height liefert die Höhe (Anzahl der Einträge) des Stapels, swap liefert eine Kopie des Stapels, wobei die beiden obersten Einträge vertauscht wurden! Geben Sie dazu Signaturen, Axiome und gegebenenfalls Vorbedingungen für height und swap an! Hinweis: Sie können, wenn nötig, die Typen Bool (Wahrheitswerte) und Nat (natürliche Zahlen inklusive Null) mit den üblichen logischen und arithmetischen Operatoren (z.b. und +) verwenden. t y p e Stack [ Item ] import Bool, Nat o p e r a t o r s empty_stack : Stack top : Stack Item push : Stack Item Stack pop : Stack Stack is_empty : Stack Bool axioms ( S : Stack), ( i : Item) top ( push (S,i)) = i pop ( push (S,i)) = S is_empty ( empty_stack ) = t r u e is_empty ( push (S,i)) = f a l s e p r e c o n d i t i o n s top (S) : is_empty (S) pop (S) : is_empty (S) Blatt 2

Aufgabe 2: Korrektheit rekursiv definierter Algorithmen (5 Punkte) Die partielle Funktion pow : Z Z Z ist rekursiv 1 definiert als pow(x,y) = if y = 0 then 1 else mult(pow(x, pred(y)), x) fi, mit mult(x,y) = x y und pred(x) = x 1. (a) Zeigen Sie mit Hilfe einer vollständigen Induktion, dass pow(x,y) = x y gilt für y 0! (b) Erklären Sie an diesem Beispiel kurz den Begriff partielle Funktion! 1 Hinweis: Die nachfolgende Aufgabe 3 betrachtet eine iterative Variante. Blatt 3

Aufgabe 3: Korrektheit imperativ definierter Algorithmen (6 Punkte) Gegeben ist der folgende iterative 2 Algorithmus POW (siehe unten). (a) Zeigen Sie, dass POW partiell korrekt ist bezüglich der Vorbedingung { Y 0 } und der Nachbedingung { Z = X Y }. Verwenden Sie dazu die Schleifeninvariante P X Y = Z X W. (b) Welche zusätzliche Eigenschaft wäre noch zu zeigen, um die totale Korrektheit bezüglich Vor- und Nachbedingung zu zeigen? (Nennen Sie diese Eigenschaft! Kein Beweis!) POW : var W,X,Y,Z : i n t ; i n p u t X,Y; Z :=1; W:=Y; w h i l e W 0 do Z:=Z*X; W:=W -1; od; o u t p u t Z; 2 Hinweis: Die vorhergehende Aufgabe 2 betrachtet eine rekursive Variante. Blatt 4

Aufgabe 4: Komplexität in O-Notation: Schleifen (3 Punkte) Zu welchen Komplexitätsklassen in Abhängigkeit von n gehören die folgenden Anweisungsfolgen? (Keine Begründung nötig!) (a) f o r ( i n t i =0;i<n ;++ i); (b) f o r ( i n t i =100;i<n ;++ i); (c) f o r ( i n t i =1;i <=n;i=i+i); (d) f o r ( i n t i =1;i <=n;++ i) f o r ( i n t j=n;j>i;--j); (e) f o r ( i n t i=n /2;i<n ;++ i); (f) f o r ( i n t i =0;i<n ;++ i) f o r ( i n t j =1;j <=n*n ;++ j); Blatt 5

Aufgabe 5: Komplexität in O-Notation: Schriftliches Addieren (3 Punkte) Gegeben ist eine natürliche Zahl n. Nehmen Sie an, Sie bestimmen die Summe n + n durch schriftliches Addieren mit Übertrag (im Dezimalsystem). Beispiel: Für n = 12345 ergibt sich 12345 + 12345 1 = 24690 Geben Sie den Aufwand der schriftlichen Addition in Abhängigkeit von n an, wobei zum Addieren zweier Dezimalstellen konstanter Aufwand O(1) angenommen wird. Begründen Sie Ihre Antwort! Blatt 6

Aufgabe 6: Registermaschine (8 Punkte) (a) Welche Funktion berechnet das folgende Programm einer Registermaschine M bei einer gegebenen Startkonfiguration b = 1,c 0 = 0,c 1 = x,c 2 = 0,... mit x 0? Geben Sie zur Begründung die gleiche Berechnung als Java- oder Pseudocode an! (b) Geben Sie ein Programm für eine Registermaschine an, das die folgende Funktion berechnet: { 0 für x > y f(x,y) = 1 sonst. Dabei gilt für die Startkonfiguration b = 1 und Eingabe c 1 = x, c 2 = y mit x,y 0. Die Ausgabe erfolgt in der Endkonfiguration als c 3 = f(x,y). Registermaschine M 1 CLOAD 1 2 STORE 2 3 LOAD 1 4 IF c 0 = 0 GOTO 12 5 LOAD 2 6 CMULT 3 7 STORE 2 8 LOAD 1 9 CSUB 1 10 STORE 1 11 GOTO 4 12 END Die Befehle haben folgende Bedeutung: Befehl Arg. Semantik LOAD i > 0 b = b + 1 c 0 = c i c j = c j für j 0 CLOAD i 0 b = b + 1 c 0 = i c j = c j für j 0 STORE i > 0 b = b + 1 c i = c 0 c j = c j für j i ADD i > 0 b = b + 1 c 0 = c 0 + c i CADD i > 0 b = b + 1 c 0 = c { 0 + i SUB i > 0 b = b + 1 c 0 = c 0 c i für c 0 c i 0 sonst { CSUB i > 0 b = b + 1 c 0 = c 0 i für c 0 i 0 sonst MULT i > 0 b = b + 1 c 0 = c 0 c i CMULT i 0 b = b + 1 c 0 = c 0 i DIV i > 0 b = b + 1 c 0 = c 0/c i CDIV i > 0 b = b + 1 c 0 = c 0/i GOTO i > 0 b = i IF c 0 = 0 GOTO END { i > 0 b i für c 0 = 0 = b + 1 sonst b = b Blatt 7

Aufgabe 7: OOP: Vererbung und Polymorphie (6 Punkte) Gegeben sind die folgenden Klassen als Java-Code. p u b l i c a b s t r a c t c l a s s Animal { p u b l i c a b s t r a c t v o i d move ( String dest ); p u b l i c v o i d move ( i n t x) { System. out. println ( " t e l e p o r t t o " +x); } } p u b l i c c l a s s Fish e x t e n d s Animal { p u b l i c v o i d move ( String dest ) { System. out. println ( " swim " + dest ); } } p u b l i c c l a s s Bird e x t e n d s Animal { p u b l i c v o i d move ( String dest ) { System. out. println ( " f l y " + dest ); } p u b l i c v o i d move ( i n t x, i n t y) { System. out. println ( " f l y " +x+y); } } p u b l i c c l a s s RoadRunner e x t e n d s Bird { p u b l i c v o i d move ( String dest ) { System. out. println ( " r u n " + dest ); } p u b l i c v o i d move ( i n t x) { System. out. println ( " r u n f a s t e r t o " +x); } } (a) Wie lautet die Ausgabe des folgenden Java-Codes? Ergänzen Sie die Tabelle. 1 Fish shark =new Fish (); 2 Bird bird =new RoadRunner (); 3 Animal animal =new Bird (); 4 5 animal. move ( " home " ); 6 animal = bird ; 7 shark. move (0) ; 8 bird. move (0) ; 9 animal. move ( " away " ); Zeile 5 7 8 9 Ausgabe nach System.out (b) Erklären Sie an diesem Beispiel kurz den Unterschied zwischen Überladen und Überschreiben von Methoden! Verwenden Sie dazu insbesondere die Begriffe Klasse und Signatur! (c) Welche der folgenden Code-Zeilen kann/können nicht übersetzt werden? Warum nicht? 1 Animal shark =new Fish (); 2 Animal gnu =new Animal (); 3 RoadRunner coyote =new RoadRunner (); 4 Fish nemo = coyote ; Blatt 8

Aufgabe 8: Binäre Suche (10 Punkte) Gegeben ist ein aufsteigend sortiertes Feld von ganzen Zahlen int [] a und eine ganze Zahl int x. Sie dürfen für die gesamte Aufgabe annehmen, dass a.length>0 und a[0] x a[a.length-1]. Der folgende Java-Code implementiert eine binäre Suche von x in a als eine Funktion find(a,x). 1 p u b l i c s t a t i c i n t find ( i n t [] a, i n t x) { 2 r e t u r n find (a,0,a. length -1,x); 3 } 4 s t a t i c i n t find ( i n t [] a, i n t left, i n t right, i n t x) { 5 i n t mid =( left + right ) /2; 6 7 i f (left > right x==a[ mid ]) r e t u r n mid ; 8 9 i f (x<a[ mid ]) r e t u r n find (a,left,mid -1,x); 10 e l s e r e t u r n find (a,mid +1, right,x); 11 } (a) Was berechnet find(a,x)? (Welche Bedeutung hat der Rückgabewert?) (b) Sei n := a.length die Größe der Eingabe. Leiten Sie einen Ausdruck für die im schlechtesten Fall nötige Anzahl von Vergleichen in Abhängigkeit von n her! Hinweise: Betrachten Sie nur den Test auf Gleichheit x==a[mid] (Zeile 7). Sie dürfen annehmen, dass n eine Zweierpotenz ist! (c) Geben Sie den Java-Code für eine nicht-rekursive Funktion int ifind(int[] a,int x) an, die die binäre Suche wie oben aber iterativ, also mit Hilfe einer Schleife, implementiert. Es soll also gelten gelten find(a,x)==ifind(a,x) für alle a, x. Blatt 9

Aufgabe 9: Quicksort (8 Punkte) Der Quicksort Algorithmus sortiert Daten rekursiv gemäß dem Teile-und-Herrsche Prinzip. Die nachfolgende Funktion partition implementiert einen wesentlichen Teil des Algorithmus. s t a t i c i n t partition ( i n t [] a, i n t left, i n t right ) { assert (left <= right ); i n t p=a[ right ], t; // pivot i n t i=l -1, j=r; do { do ++i; w h i l e (a[i]<p); do --j; w h i l e (j >0 && a[j]>p); t=a[i]; a[i]=a[j]; a[j]=t; } w h i l e (i<j); a[j]=a[i]; a[i]=a[ right ]; a[ right ]=t; } r e t u r n i; // new index of pivot (a) Erläutern Sie kurz die Semantik von m=partition(a,left,right) am Beispiel a={2,4,1,5,3}. (Beschreiben Sie nur das Ergebnis nicht die vorgegebene Implementierung!) (b) Implementieren Sie Quicksort in Java als Funktion public static void quicksort(int[] a). Verwenden Sie dazu partition() und gegebenenfalls eine Hilfsfunktion. (c) Geben Sie je eine Permutation der Folge (1,2,3,4,5) an, für die Quicksort (1.) möglichst wenige (bester Fall) bzw. (2.) möglichst viele (schlechtester Fall) Vertauschungen benötigt! (d) Erklären Sie kurz den Begriff stabiles Sortierverfahren! Ist Quicksort stabil? Blatt 10

Aufgabe 10: Wahr oder falsch? (5 Punkte) Kreuzen Sie jeweils (ohne Begründung!) an, ob eine Aussage wahr oder falsch ist. Für jede richtige Antwort gibt es einen halben Punkt, für jede falsche Antwort wird ein halber Punkt abgezogen. (Es gibt wenigstens 0 Punkte auf die gesamte Aufgabe.) Beantworten Sie also lieber nur Fragen, bei denen Sie sich sicher sind! Aussage wahr falsch Mergesort eignet sich als externes Sortierverfahren. 3,5,8,14,22 ist Teil der Fibonacci Folge. Menge M ist überabzählbar. M enthält unendlich viele Elemente. Die Menge der Funktionen ist abzählbar. Das Halteproblem ist entscheidbar. Nach Ausführung von c=b; a=b++; in Java gilt b==c+1 && a==b (für int a,b,c). In Java beschreibt (a>b? a : b) das Maximum aus a und b (für int a,b). log 2 n O(logn) n + 1 2 n2 + 1 3 n3 O(n 3 ) Für eine sortierte Folge ist die Ausführungszeit einer binären Suche immer geringer als die einer sequentiellen Suche. Blatt 11

Bonusaufgabe A: Ganzzahlige Quadratwurzel (2 Zusatzpunkte) Der Algorithmus XYZ aus der Vorlesung berechnet den ganzzahligen Anteil der Quadratwurzel einer positiven ganzen Zahl. XYZ : var W,X,Y,Z : i n t ; i n p u t X; Z :=0; W :=1; Y :=1 w h i l e W X do Z:=Z+1; W:=W+Y+2 Y:=Y+2 od; o u t p u t Z; (a) Geben Sie den asymptotischen Aufwand zur Berechnung der Ausgabe Z in Abhängigkeit von der Eingabe X in O-Notation an! Begründen Sie Ihre Antwort! (b) Geben Sie einen Algorithmus LXYZ an, der dasselbe Ergebnis mit logarithmischen Aufwand berechnet! (Also ( X 0) (XYZ(X) = LXYZ(X)) mit Aufwand O(logX).) Begründen Sie Ihren Ansatz! Blatt 12

Blatt 13