Klausur Einführung in die Informatik II für Elektrotechniker 16. Juli 2003

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

368 4 Algorithmen und Datenstrukturen

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Tutoraufgabe 1 (2 3 4 Bäume):

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

Vorlesung Datenstrukturen

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

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

JAVA KURS COLLECTION

6 Speicherorganisation

Fortgeschrittene Programmiertechnik Klausur SS 2015 Angewandte Informatik Bachelor

Javakurs für Anfänger

Geordnete Binärbäume

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Objektorientierte Programmierung

Probeklausur: Programmierung WS04/05

Einführung in die Programmierung Vorlesungsprüfung

Algorithmen & Datenstrukturen 1. Klausur

Bäume. Text. Prof. Dr. Margarita Esponda SS 2012 O4 O5 O6 O ALP2-Vorlesung, M. Esponda

Aufgabe 1: Quer durch Java (4 Punkte) super abstract abstract protected

Wiederholungsklausur Grundlagen der Elektrotechnik I 22. April 2002

Große Übung Praktische Informatik 1

Allgemeine Informatik 2 im SS 2007 Programmierprojekt

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

Binärbäume. Prof. Dr. E. Ehses,

Übungen zu Programmierung I - Blatt 8

Klausur Informatik B April Teil I: Informatik 3

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

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Informatik II, SS 2014

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

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Allgemeine Informatik II SS :30-13:30 Uhr

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Programmierkurs Java

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1

Inhalte Informatik. I1 Grundprinzip des objektorientierten Modellierens I3 Modellieren von Netzwerkanwendungen

Probeklausur: Einführung in die objektorientierte Programmierung mit Java 15WS

Klausur Softwaretechnologie WS 2014/15

Klausur Algorithmen und Datenstrukturen

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

Java Einführung Collections

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Projekt AGB-10 Fremdprojektanalyse

Hinweise zur Bearbeitung der Klausur zum Kurs Einführung in die imperative Programmierung

Theoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke

Welche Informatik-Kenntnisse bringen Sie mit?

Aufgabe 1 (12 Punkte)

Objektorientierte Programmierung. Kapitel 12: Interfaces

Klausur zur Veranstaltung Programmierung (fortgeschrittene Konzepte)

Objektorientierte Programmierung

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Kapitel 6. Vererbung

Inhaltsverzeichnis. Praktikum Algoritmen und Datenstrukturen WS2004/2005 Paul Litzbarski Stefan Nottorf. Druckmanager allgemein 2.

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

Vorlesung Programmieren

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Java Kurs für Anfänger Einheit 5 Methoden

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Kapitel 6. Vererbung

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

Fortgeschrittene Programmiertechnik Klausur WS 2014/15 Angewandte Informatik Bachelor

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

Informatik II Übung 6 Gruppe 7

Der Datentyp String. Stringvariable und -vergleiche

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

public class SternchenRechteckGefuellt {

MB2-ALG, SS15 Seite 1 Hauptklausur, geschrieben am

Objektorientierte Programmierung

Einführung in die Programmierung 1

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

1 Polymorphie (Vielgestaltigkeit)

8 Baum in perfekter Komposition

Übungsklausur Programmieren / Algorithmen und Datenstrukturen 2

3 Objektorientierte Konzepte in Java

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

Repetitorium Informatik (Java)

EndTermTest PROGALGO WS1516 A

C# im Vergleich zu Java

5. Tutorium zu Programmieren

Kapitel 6. Vererbung

3 Objektorientierte Konzepte in Java

Institut für Informatik

Nachklausur Programmieren / Algorithmen und Datenstrukturen 1

1. Grundlegende Konzepte in Java (6 Punkte)

Kapiteltests zum Leitprogramm Binäre Suchbäume

Advanced Programming in C

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

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Tutorium Algorithmen & Datenstrukturen

Android will doch nur spielen. Java Übung

5.4 Klassen und Objekte

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Java Cheatsheet. Mehrzeiliger Kommentar (beginnt mit /* und endet mit */)

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

Folge 18 - Vererbung

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

AuD-Tafelübung T-B5b

String s1, s2; Eine Zuweisung geschieht am einfachsten direkt durch Angabe des Strings eingeschlossen in doppelte Hochkommata:

Transkript:

Fakultät Elektrotechnik/Informatik Klausur Einführung in die Informatik II für Elektrotechniker Name:...................... Matr.-Nr....................... Bearbeitungszeit: 120 Minuten Bewertung (bitte offenlassen : ) Aufgabe Punkte Erreichte Punkte 1 6 2 7 3 5 4 12 5 14 Summe 44 Spielregeln (Jetzt lesen!): Benutzen Sie für die Lösung der Aufgaben nur das mit diesem Deckblatt ausgeteilte Papier. Lösungen, die auf anderem Papier geschrieben werden, können nicht bewertet werden. Schreiben Sie ihre Lösung auch auf die Rückseiten der Blätter; benötigen Sie für eine Lösung mehr als ein Blatt, finden Sie am Ende der Klausur Leerblätter. Zusätzliches Papier können Sie von den Tutoren bekommen. Tragen Sie jetzt (vor Beginn der eigentlichen Bearbeitungszeit!!!) auf allen Blättern ihren Namen und ihre Matrikelnummer ein. Schreiben Sie deutlich! Unleserliche oder zweideutige Lösungen können nicht gewertet werden. Schreiben Sie nicht mit Bleistift und nicht mit rotem oder grünem Stift (das sind die Farben für die Korrektur). Lesen Sie die Aufgaben jeweils bis zum Ende durch; oft gibt es hilfreiche Hinweise! Kommentare kosten Zeit; kommentieren Sie ihr Programm nur da, wo der Code alleine nicht verständlich wäre. Wir weisen noch einmal darauf hin, daß die Benutzung von Taschenrechnern und anderen elektronischen Hilfsmitteln nicht gestattet ist. Viel Erfolg!

A1 AUFGABE 1 (6 Punkte) Theorie. 1. (3 Punkte) Welchen Aufwand hat das (intelligente) Suchen in den folgenden Datenstrukturen, jeweils im sortierten und im unsortierten Fall: (a) Arrays sortiert: unsortiert: (b) Listen sortiert: unsortiert: (c) 2-3-Bäume sortiert: unsortiert: 2. (2 Punkte) Zeichnen Sie einen balancierten Binärbaum, bei dem durch postorder-traversierung die Zeichenkette P O S T O R D E R B A U M (ohne Leerzeichen) ausgegeben wird. 3. (1 Punkt) Was verstehen Sie unter einer Queue?

A2 AUFGABE 2 (7 Punkte) JAVA. 1. (1 Punkt) Welche Bedeutungen hat das Schlüsselwort final in Java? 2. (2 Punkte) Was kann in Java mit Interfaces, nicht aber mit abstrakten Klassen gelöst werden? Wie ist es umgekehrt? 3. (1 Punkt) Unter welchen Umständen kann man sicher sein, daß Casting einer Objekt-Referenz nicht zu einem Laufzeitfehler (Programmabsturz) führt?

A2 4. (3 Punkte) Welche Fehler enthält folgendes Java-Code-Fragment? Geben Sie jeweils die Zeilennummer an und beschreiben Sie den Fehler. Folgefehler werden ignoriert. 1 class CreditCard { 2 private int pin ; 3 } 4 5 class CashDispenser { 6 private int amount ; 7 8 void load(int amount) { 9 this.amount = amount ; 10 } 11 12 boolean check(int pin) { 13 Terminal.println("ok") ; 14 } 15 16 void withdraw(creditcard card, int amount) { 17 if (check(card.pin)) { this.amount -= amount ; } 18 } 19 } 20 21 class Bank { 22 CashDispenser dispenser ; 23 24 Bank() { 25 this.dispenser = dispenser ; 26 dispenser.load(1000000) ; 27 } 28 }

A2 Diese Seite wurde absichtlich freigelassen.

A3 AUFGABE 3 (5 Punkte) Numerik. als Grenzwert der Folge: Berechnen Sie die Maßzahl φ des goldenen Schnitts. Diese ist definiert a n = fib(n + 1) fib(n) wobei die Fibonacci-Funktion fib wie folgt rekursiv definiert ist: fib(0) = 1 fib(1) = 1 fib(n) = fib(n 1) + fib(n 2) (n 2) 1. (2 Punkte) Schreiben Sie eine Hilfsmethode double fib(int n) zur Berechnung der Fibonacci-Funktion. 2. (3 Punkte) Programmieren Sie die Methode double phi(), welche die Approximation durchführt. Beenden Sie den Approximationsprozeß, wenn eine Genauigkeit von 9 Nachkomma-Stellen erreicht ist. Formulieren Sie diese Bedingung mit Hilfe einer (ebenfalls zu programmierenden) Hilfsmethode boolean close(double x, double y, double eps).

A3 Diese Seite wurde absichtlich freigelassen.

A4 AUFGABE 4 (12 Punkte) Vererbung. In dieser Aufgabe sollen spezielle Bäume modelliert werden. Diese Bäume besitzen drei Sorten von Knoten: Trunk (Stamm), Branch (Ast) und Leaf (Blatt). Trunk-Knoten besitzen genau einen Nachfolger rest. Branch-Knoten besitzen genau zwei Nachfolger left und right. Leaf-Knoten besitzen keinen Nachfolger. Alle drei Knotentypen sind zu einer gemeinsamen Oberklasse Tree zusammengefaßt. Die Nachfolger eines Knotens sollen Objekte dieser Klasse Tree sein. Nun wollen wir bestimmte Baumformen definieren: Baumkrone: Ein einzelnes Leaf ist eine Baumkrone. Ein Branch ist eine Baumkrone, falls seine Nachfolger Baumkronen sind. Ein Trunk ist keine Baumkrone. wohlgeformter Baum: Ein Leaf ist kein wohlgeformter Baum. Alle Nachfolger eines wohlgeformten Baumes müssen Baumkronen sein. 1. (3 Punkte) Schreiben Sie eine abstrakte Oberklasse Tree, welche beliebige Baumknoten repräsentiert. Sie soll folgende abstrakte Methoden zur Verfügung stellen: Tree[] children(), welche ein Array mit den Nachfolgern des aktuellen Baumknotens liefert. Die Größe des Arrays (0, 1 oder 2) hängt von Knotentyp ab. boolean iscrown(), welche prüft ob es sich um eine Baumkrone handelt. Definieren Sie in der Klasse Tree außerdem eine Methode boolean ispropertree() welche prüft ob es sich um einen wohlgeformten Baum handelt. Verwenden Sie dazu die oben eingeführten abstrakten Methoden. 2. (6 Punkte) Schreiben Sie die Klassen Trunk, Branch und Leaf, welche die Klasse Tree spezialisieren. Jede dieser drei Klassen soll einen geeigneten Konstruktor sowie die abstrakten Methoden aus der Klasse Tree definieren. Hinweis: Sie müssen keine Attribute für Werte definieren, die an den Knoten gespeichert werden sollen. 3. (2 Punkte) Definieren Sie (außerhalb der bereits programmierten Klassen) eine Methode boolean bonsai(tree t), welche prüft ob der übergebene Baum t genau aus einem Trunk gefolgt von einem Leaf besteht. Hinweis: Sie können dabei annehmen, daß t nicht null ist. Trunk 4. (1 Punkt) Geben Sie ein Stück Java-Code an, welches einen solchen Bonsai-Baum erzeugt. Leaf

A4 Diese Seite wurde absichtlich freigelassen.

A5 AUFGABE 5 (14 Punkte) Umkehrbare Listen. 1. (3 Punkte) Gegeben sei eine Klasse für einfach verkettete Listenzellen: class SingleCell { Object content; SingleCell next; SingleCell(Object content, SingleCell next) { this.content = content; this.next = next; } } Programmieren Sie eine Methode SingleCell reverse(singlecell list), welche die Reihenfolge der Listenelemente in der Liste list umkehrt. Die übergebene Liste soll dabei allerdings nicht zerstört werden. Hinweis: Das folgende Bild zeigt eine mögliche Lösungsidee mit zwei Hilfsvariablen vor und rück: vor list A B C list vor A B C 1. rück 2. rück A 3. list vor A B C list rück rück B A 4. vor A B C C B A

A5 2. (2 Punkte) Um das Umkehren einer Liste zu vereinfachen, bietet sich die Verwendung von doppelt verketteten Listenzellen an. Schreiben Sie eine Klasse DoubleCell, die geeignete Attribute content, next und previous und einen Konstruktor DoubleCell(Object content, DoubleCell next, DoubleCell previous) besitzt. A B C 3. (9 Punkte) Eine doppelt verkettete Liste kann einfach umgekehrt werden, indem die Rollen der Vorwärts- und Rückwärts-Referenz vertauscht werden. Die erste Zelle übernimmt dann die Rolle der letzten und umgekehrt. Schreiben Sie hierzu eine Klasse RevList, die über folgende, von außen nicht zugreifbare Attribute verfügt: DoubleCell first, last sind Referenzen auf erste und letzte Zelle. boolean reversed ist true, falls die Liste im Moment umgekehrt zu lesen ist, also die Rollen von first und last vertauscht sind. Schreiben Sie in der Klasse RevList weiterhin folgende Methoden (Hinweis: Alle Zugriffs-Methoden sollen die aktuelle Leserichtung beachten!): RevList() erzeugt eine leere Liste. DoubleCell currentfirst() liefert die tatsächliche erste Zelle. (Ist die Liste gerade umgekehrt, liefert currentfirst().content das letzte, ansonsten das erste Element) void reverse() kehrt die Liste um. Beachten Sie, daß bei zweimaligem Umkehren wieder die ursprüngliche Liste entsteht. Object select(int i) liefert den Inhalt der augenblicklich i-ten Zelle. Im Fall eines undefinierten Zugriffs soll null zurückgeliefert werden. void append(object x) fügt das Objekt x am augenblicklichen Ende der Liste (also je nach Leserichtung hinten bzw. vorne) ein.

A5 Diese Seite wurde absichtlich freigelassen.

A5 Diese Seite wurde absichtlich freigelassen.