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

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

ALP II Dynamische Datenmengen Datenabstraktion

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

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Fakultät IV Elektrotechnik/Informatik

Die objektorientierte Mühle Marc-Oliver Pahl

Musterlösung Stand: 5. Februar 2009

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

Datum, Uhrzeit: , Uhr Semester: I1 Note:... Prof. Dr. G. Meixner

Aufgabe 1 (12 Punkte)

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

Programmierung für Mathematik HS11

Übung Algorithmen und Datenstrukturen

Einführung in die Programmierung

Wintersemester 2004/ Januar Aus der Vorlesung sind Datenstrukturen zur Repräsentation von Wäldern disjunkter Mengen bekannt.

Probeklausur: Programmierung WS04/05

Hochschule Augsburg, Fakultät für Informatik Name:... Prüfung "Programmieren 1", IN1bac, WS 10/11 Seite 1 von 6

1 of :17:14

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

Test zu Grundlagen der Programmierung Leitung: Susanne Guth/Michael Hahsler. 31. Jänner 2003

ADT: Verkettete Listen

5.3 Doppelt verkettete Listen

Aufgabe 1 (Programmanalyse, Punkte)

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

Einführung in die Informatik

Technische Universität Braunschweig

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

Probeklausur zur Vorlesung

1. Die rekursive Datenstruktur Liste

Basispruefung Herbst 2016/ Einführung in die Programmierung

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

Algorithmen und Datenstrukturen

12 Abstrakte Klassen, finale Klassen und Interfaces

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

Nachklausur Bitte in Druckschrift leserlich ausfüllen!

Probeklausur Informatik 2 Sommersemester 2013

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

3 Dynamische Datenstrukturen

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Aufgabe11. Methode test1. import java.util.hashmap; import java.util.arraylist; public class Aufgabe11 {

pue13 January 28, 2017

Algorithmen und Datenstrukturen

Klausur zur Vorlesung Einführung in die Programmierung

3. Übungsbesprechung Programmkonstruktion

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14

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

7. Verkettete Strukturen: Listen

Beispielprüfung CuP WS 2015/2016

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

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

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Einführung in die Informatik 2

Datenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik

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

Einstieg in die Informatik mit Java

Konstruktor. public Rational(int i) { Zaehler = i; Nenner = 1; }

Spezielle Datenstrukturen

Schnittstellen, Stack und Queue

Abgabe: keine Pflichtabgabe (vor 12 Uhr) Aufgabe 10.1 (P) Vererbung Gegeben seien folgende Java-Klassen:

Abschlussklausur. Lösung

Algorithmen und Programmierung III

Abgabe: (vor der Vorlesung) Aufgabe 3.1 (P) Master-Theorem

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

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

Algorithmen und Datenstrukturen

Java. public D find(k k) { Listnode K, D n = findnode(k); if(n == null) return null; return n.data; Java

Streichen Sie bitte eine der Aufgaben 3-5!

Objektorientierte Programmierung

ADT: Verkettete Listen

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

Verkettete Datenstrukturen: Listen

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

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

Übung zur Vorlesung Programmierung

Lösungsvorschläge zur Nachklausur zum Kurs 1618 Sommersemester 2001 am

hue12 January 24, 2017

Schein-/Bachelorklausur Teil 2 am Zulassung: Mindestens 14 Punkte in Teilklausur 1 und 50% der Übungspunkte aus dem 2. Übungsblock.

Wiederholungsblatt Einführung in die Programmierung Lösungen

Die Klasse java.lang.object. Thorsten Treffer

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

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

Datum, Uhrzeit: , Uhr Semester: IN1 Note:... Prof. Dr. G. Meixner

Übungen zum Bioinformatik-Tutorium. Blatt 6

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

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

Klausur Algorithmen und Datenstrukturen I SS 03

Einfache Arrays. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Fortgeschrittene Programmiertechnik Klausur WS 2014/15 Angewandte Informatik Bachelor

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 3

Programmiertechnik II Klausur SS 2018 Angewandte Informatik Bachelor

Überblick. Rekursive Methoden. Backtracking. Memorization. Einfache rekursive Datenstrukturen. Aufzählen, Untermengen, Permutationen, Bitmengen

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

Transkript:

Albert-Ludwigs-Universität Freiburg Institut für Informatik Einführung in die Informatik Sommersemester 2018 Prof. Dr. Wolfram Burgard Andreas Kuhner Daniel Büscher Übungsblatt 13 Abgabe / Besprechung in Absprache mit dem Tutor Hinweis: Aufgaben immer per E-Mail (eine E-Mail pro Blatt und Gruppe) an den zuständigen Tutor schicken (Bei Programmieraufgaben Java Quellcode und evtl. benötigte Datendateien). Aufgabe 13.1 Wie lautet die Ausgabe der folgenden Java-Programme? class A131 { public static void main(string arg[]) { int i1 = 2, i2 = 1; System.out.println( i1++ ); int i3 = i2 * (++i1); System.out.println( i3 ); System.out.println( i2++ ); i3 /= i1++; System.out.println( i1 ); i1 *= i2; System.out.println( i1 ); System.out.println( i1 * i2 + i2 * i3); class A132 { public static void main(string arg[]) { int i1 = 2, i2 = 1; double d1 = 1.5; System.out.println(i1 + (int)d1); System.out.println(i2 + d1); i2 += i1 + d1; System.out.println(i2); double d2 = 3.0 / d1; int i3 = 3.0 / d1; int i4 = 2.0 / d1; System.out.println(d2): System.out.println(i3): System.out.println(i4): class A133 { public static void main(string arg[]) { int[] array = new int[100]; for(int i = 0; i < array.length; i++) { if(i % 10 == 0) array[i] = 5; else array[i] = 0; double sum1 = 0;

for(int i = 1; i < array.length; i += 10) { sum1 += array[i]; System.out.println(sum1); double sum2 = 0; for(int i = 0; i < array.length; i++) { sum2 += array[i]; System.out.println(sum2); Aufgabe 13.2 1. Bestimmen Sie die Laufzeiten der folgenden Programmstücke in Abhängigkeit von n. Begründen Sie jeweils Ihre Antwort. (a) int c = 0; for (int i = 0; i < n; ++i) { for(int j = 0; j < i / 2; ++j) { c++; (b) int c = 0; for (int i = 0; i < n; ++i) { for(int j = 0; j < n; ++j) { for(int k = 0; k < j; ++k) { c++; (c) int c = 0; for (int i = 1; i < n; i *= 2) { c++; (d) int fibonacci(int n) { if(n == 1 n == 2) { return 1; else { return fibonacci(n - 1) + fibonacci(n - 2); 2. Die Funktionen f und g sind für positive Integer-Eingabewerte definiert und haben folgende Laufzeiten in Abhängigkeit des Eingabewertes: Best-Case Worst-Case f(n) O(1) O(n 3 ) g(n) O(n 2 ) O(n 3 ) 2

Führen Sie eine Best- und Worst-Case Abschätzung für die folgende Methode in Abhängigkeit von der Länge len des Arrays durch. Begründen Sie Ihre Antwort. void method(int[] array) { int len = array.length; for (int i = 0; i < len; i++) { int k = f(array); if(array[i] == k) { g(array); Aufgabe 13.3 Die Zahl π kann durch die so genannte Gregory-Leibniz-Reihe π = ( 1) n 4 2n + 1 n=0 angenähert werden. Eine obere Schranke für den Fehler der Approximation nach n Summanden ist gegeben durch: R(n) 4 2n + 1 1. Implementieren Sie eine Methode, die die Zahl π approximiert und die Approximation zurückliefert. Die gewünschte Genauigkeit (obere Schranke) soll als Parameter an die Funktion übergeben werden. 2. Schreiben Sie für Ihre Implementierung eine Testmethode mittels JUnit, die testet, ob die Zahl π bis auf die gewünschte Genauigkeit approximiert wird. Überprüfen Sie dafür die Genauigkeit der Approximation für R(n) 0.0001 und R(n) 0.0000001. Hinweis: Verwenden Sie Math.PI als Referenz für π. Aufgabe 13.4 Gegeben sei folgendes Java-Programm: public static int f(int a, int b) { if(b == 0) { return 1; //Zeile 1 if ((b % 2) == 0) { return f (a * a, b / 2); //Zeile 4 return a*f (a, b - 1); //Zeile 6 1. Was wird bei dem Aufruf f(2, 4) zurückgegeben? 2. Zeichnen Sie die Activation Records für den Aufruf f(2, 4) zu dem Zeitpunkt, an dem die maximale Rekursionstiefe erreicht ist. 3

Aufgabe 13.5 Betrachten Sie die folgende Klassendefinition: class Margherita { Margherita(){ price = 5.0; topping = "Tomate, Kaese"; public Margherita makelarger(){ price += 3.0; return this; public String tostring() { return "Preis: " + price + "; Belag: " + topping; protected double price; protected String topping; class Salami extends Margherita { public Salami() { super(); topping = topping + ", Salami"; price -= 1.0; public String tostring() { // Zeile 22 return "Sonder-" + super.tostring(); class Mozzarella extends Margherita { public Mozzarella() { super(); topping = "Tomate, Mozzarella"; price = price + 2.5; public class Pizza { public static void main(string[] args) { Margherita p1 = new Margherita(); Margherita p2 = new Mozzarella(); Margherita p3 = p2.makelarger(); System.out.println(new Salami()); System.out.println(p1.makeLarger()); System.out.println(p2); System.out.println(p3); 1. Welche Ausgabe liefert die main-methode der Klasse Pizza? 2. Was bewirkt das Schlüsselwort protected bei der Deklaration der Instanzvariablen price und topping? 3. Was würde hingegen das Schlüsselwort private anstelle von protected bewirken? 4. Was würde hingegen das Schlüsselwort public anstelle von protected bewirken? 5. Handelt es sich bei der tostring-methode in Zeile 22 um Overloading oder Overriding? 4

Aufgabe 13.6 Eine Warteschlange (engl. Queue ) ist eine Datenstruktur, die Objekte nach dem FIFO- Prinzip (First In First Out) verwaltet, d.h. dass Objekte genau in der Reihenfolge ausgegeben werden, in der sie in die Warteschlange eingefügt werden. In dieser Aufgabe soll eine Warteschlange mit einer einfach verketteten Liste implementiert werden. public class Queue { public Queue() {... public void push(object o) {... public Object pop() {...... protected QueueNode head; protected QueueNode tail; public class QueueNode {... private Object content;... 1. Geben Sie die vollständige Klassendefinition eines Speicherelements QueueNode mit geeigneten Zugriffsmethoden sowie typischem Konstruktor an und implementieren Sie diese. 2. Implementieren Sie den Konstruktor sowie die Methoden push() und pop() der Klasse Queue. Die Methode push() fügt am Ende der Warteschlange (tail) ein Element hinzu. Die Methode pop() liefert das nächste abzuarbeitende Element vom Anfang der Warteschlange (head) zurück und löscht dieses aus der Warteschlange. Beachten Sie auch die Randfälle, wie z.b. eine leere Warteschlange. 3. Geben Sie den Aufwand für Ihre Methoden in Abhängigkeit der Anzahl an gespeicherten Objekten an. Aufgabe 13.7 Betrachten Sie den folgenden Ausschnitt einer Klassendefinition für eine einfach verkettete Liste. class SingleLinkedList { public SingleLinkedList() { head = null; public Node searchnode(object o) { Node n = head; while (n!= null &&!n.content().equals(o)) n = n.nextnode(); return n; public boolean hascycle() {... public Node head; class Node { public Node (Object o, Node n) { content = o; nextnode = n; public Object content() {... 5

public void setcontent(object o) {... public Node nextnode() {... public void setnextnode(node n) {... Object content; Node nextnode; Betrachten Sie folgendes Beispiel für eine Liste, die einen Zyklus enthält: F E head G D A B C 1. Wie verhält sich die Methode searchnode(object o) der Klasse SingleLinkedList, falls sich ein Zyklus in der Liste befindet? 2. Implementieren Sie die Methode hascycle() der Klasse SingleLinkedList. Diese Methode soll genau dann true liefern, falls ein Zyklus in der Liste ist. Gehen Sie dabei folgendermaßen vor: Erzeugen Sie zwei Referenzen auf den Kopf der Liste. Erstellen Sie eine Schleife, die pro Durchlauf die eine Referenzvariable um ein Element bzw. die andere Referenzvariable um zwei Elemente weiterbewegt. Führen Sie anschließend folgende Abfragen durch. Falls eine der beiden Referenzen das Ende der Liste erreicht, so ist kein Zyklus enthalten. Falls beide Referenzen auf das gleiche Element der Liste zeigen, ist ein Zyklus vorhanden. Aufgabe 13.8 Entscheiden Sie, ob die folgenden Aussagen richtig oder falsch sind. Richtig Falsch Die Menge der Algorithmen ist abzählbar. Jede Funktion lässt sich durch einen Algorithmus realisieren. Jeder Algorithmus beschreibt eine Funktion. Ein partiell korrektes Programm kann nie ein falsches Ergebnis zurückgeben. Es gibt Programme, für die gezeigt werden kann, dass sie total korrekt sind. 6