Wiederholungsklausur "ADP" WS 2016/2017

Ähnliche Dokumente
Probeklausur: Programmierung WS04/05

Geordnete Binärbäume

Klausur "Informationstechnische Grundlagen" WS 2012/2013

Programmentwicklung I für Hörer anderer Fachrichtungen -Wintersemester 2003/04- Abschlussklausur

Allgemeine Informatik 2 im SS 2007 Programmierprojekt

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

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

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

Allgemeine Informatik II SS :30-13:30 Uhr

3 Objektorientierte Konzepte in Java

368 4 Algorithmen und Datenstrukturen

Probeklausur: Programmierung WS04/05

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

Objektorientierte Programmierung

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

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

Einführung in die Programmierung Vorlesungsprüfung

EndTermTest PROGALGO WS1516 A

Algorithmen und Programmierung II

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

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

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

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

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

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

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Software Engineering Klassendiagramme Einführung

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

Übung Datenstrukturen. Objektorientierung in C++

Programmieren in Java

Vorlesung Datenstrukturen

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Übungen zu Programmierung I - Blatt 8

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

Programmierkurs Java

Objektorientierte Programmierung

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1

Einstieg in die Informatik mit Java

Software Engineering Klassendiagramme weiterführende Konzepte

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Javakurs für Anfänger

3 Objektorientierte Konzepte in Java

Programmieren in Java

Java Kurs für Anfänger Einheit 5 Methoden

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

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Kapitel 6. Vererbung

5.14 Generics. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

8 Baum in perfekter Komposition

Kapitel 6. Vererbung

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Fortgeschrittene Programmiertechnik Klausur WS 2014/15 Angewandte Informatik Bachelor

Fakultät Wirtschaftswissenschaft

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

Übung 9 - Lösungsvorschlag

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

MB2-ALG, SS15 Seite 1 Hauptklausur, geschrieben am

Algorithmen & Datenstrukturen 1. Klausur

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Objektorientierte Programmierung OOP

Fortgeschrittene Programmiertechnik Klausur SS 2015 Angewandte Informatik Bachelor

Einführung in die Java- Programmierung

Einführung in die Programmierung

Android will doch nur spielen. Java Übung

Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg

3D Programmierpraktikum: Einführung in C++ - Teil 2

Tutoraufgabe 1 (2 3 4 Bäume):

Objektorientierte Programmierung Einstufungstest

Kapitel 6. Vererbung

1. Grundlegende Konzepte in Java (6 Punkte)

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierung: Klassen und Objekte

5.5.8 Öffentliche und private Eigenschaften

Vorlesung Objektorientierte Programmierung Probeklausur

Welche Informatik-Kenntnisse bringen Sie mit?

Javakurs für Anfänger

Prof. Dr. Heinrich Müller; Dr. Frank Weichert 7. September 2015

Präsentation Interfaces

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

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

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

BEISPIELKLAUSUR Softwareentwicklung:

1. Teilklausur. Modul "OOPM Vorlesung/Übung" Gruppe A

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

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

Übung 1: Object Inspector

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

Theorie zu Übung 8 Implementierung in Java

Programmierkurs C++ Abstrakte Klassen und Methoden

Repetitorium Informatik (Java)

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

Klausur: Programmierkurs 1, Java, HTML

Klausur zur Veranstaltung Programmierung (fortgeschrittene Konzepte)

"Einführung in die Programmierung" Krefeld, den 24. September 2013

Nachholklausur (9 ECTS) Einführung in die Informatik: Programmierung und Software-Entwicklung. Nachname... Vorname... Matrikelnummer... Studienfach...

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

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

Transkript:

PD Dr. J. Reischer 23.02.2017 Wiederholungsklausur "ADP" WS 2016/2017 Nachname, Vorname Abschluss (BA, MA, FKN etc.) Matrikelnummer, Semester Versuch (1/2/3) Bitte füllen Sie zuerst den Kopf des Angabenblattes aus! Die Klausur dauert 90 Minuten. Es sind maximal 50 Punkte zu erreichen. Es sind keine Hilfsmittel zugelassen. Die Klausur besteht aus 8 Seiten. Bitte beantworten Sie alle Fragen direkt auf das Angabenblatt. Nutzen Sie ggf. die Rückseite und kennzeichnen Sie dies entsprechend. Eigene Schmierblätter sind nicht erlaubt. Bei mehreren oder mehrdeutigen Lösungen wird die schlechtere Lösung gewertet. Streichen Sie daher ungültige Lösungen eindeutig durch. Verwenden Sie nur Java, C# oder Pseudokode für Programmieraufgaben. Viel Erfolg! 1

Aufgabe 1: Konzeptionelle Fragen (8 Punkte) Bitte fassen Sie sich bei der Beantwortung der Fragen kurz. Überflüssige Ausführungen und Begründungen werden negativ gewertet. Aufgabe 1.1: (2 Punkte) Was unterscheidet Wertetypen von Referenztypen? Nennen Sie zwei Aspekte. Aufgabe 1.2: (2 Punkte) Welche Datentypen sind in Java/C#/Pseudokode als Werte-, welche als Referenztypen realisiert? Nennen Sie je zwei (insgesamt also vier). Aufgabe 1.3: (2 Punkte) Könnten Wertetypen auch als Referenztypen und umgekehrt realisiert werden (Begründung!)? Aufgabe 1.4: (2 Punkte) Nennen Sie je zwei Vor- und Nachteile von Werte- vs. Referenztypen (insgesamt also vier Aspekte). 2

Aufgabe 2: Iteration Synthese (8 Punkte) Schreiben Sie eine Funktion int ReplaceInMatrix(int[][] M, int X, int Y), die alle Vorkommnisse des Wertes X in M durch Y ersetzt; alle anderen Werte bleiben unverändert. Als Ergebnis soll die Anzahl vorkommender bzw. ersetzter Werte X zurückgegeben werden (0 bis N); ist die Matrix nicht initialisiert, soll dies durch den Rückgabewert 1 angezeigt werden. Achten Sie darauf, dass die Matrix nicht unbedingt rechteckig sein muss und auch uninitialisierte Zeilen enthalten kann. Beispiel: M = {{1,2,3,4},{2,3,4},{3,4},{4}} mit Suchwert X = 3 und Ersetzungswert Y = 0 ergibt {{1,2,0,4},{2,0,4},{0,4},{4}} mit Rückgabewert 3 (da drei Vorkommnisse der Zahl 3 durch 0 ersetzt wurden). 3

Aufgabe 3: Objektorientierte Programmierung (20 Punkte) Aufgabe 3.1: Definieren Sie eine Klassenhierarchie mit zwei Ebenen aus den unten beschriebenen drei Klassen für die Darstellung verschiedener Mitglieder der Familie Duck (Donald, Dagobert, Tick, Trick und Track). Entscheiden Sie dabei selbst, welche Member welche Modifikationen (Eigenschaften) besitzen. Für nicht sinnvolle Modifikatoren gibt es Punktabzug. 1) abstrakte Oberklasse Duck: (10 Punkte) a. Attribut Count, das alle erzeugten Instanzen der abgeleiteten Unterklassen AdultDuck und YoungDuck mitzählt (s. Aufgabe 3.2; eine Zugriffsfunktion/ Getter sei hier vernachlässigt); b. Attribut PreName und SurName für den Vor- und Nachnamen eines Ducks, die auch in den Unterklassen zur Verfügung stehen sollen; beachten Sie, dass der Nachname für alle Ducks identisch ist; c. Attribut Adult, das den binären Status eines Duck-Mitglieds als erwachsen vs. kindlich beschreibt (muss in den Unterklassen nicht zugreifbar sein); d. Instanzkonstruktor, der als Parameter den Vornamen eines Ducks und den Status als Erwachsener vs. Kind erhält und die entsprechenden Attribute initialisiert (und evtl. weitere Aktionen durchführen muss); überlegen Sie, ob weitere Konstruktoren notwendig sind; e. Methode ToText(), die Vorname plus Leerzeichen plus Nachname zurückliefert und in den Unterklassen überschrieben werden muss. 2) zwei Unterklassen AdultDuck und YoungDuck, die beide von Duck abgeleitet und strukturell identisch sind: (6 Punkte) a. jeweils Instanzkonstruktor pro Klasse, der jeweils den Vornamen als Parameter erhält und jeweils den Instanzkonstruktor der Oberklasse Duck benutzt, um zugleich Vorname und Erwachsenen- vs. Kindstatus zu initialisieren (man beachte die Konstruktorparameter der Oberklasse!); b. jeweils überschriebene Methode ToText(), die den Erwachsenen- vs. Kindstatus vor dem Vor- und Nachnamen ausgibt, wobei Vor- plus Nachname durch die passende Methode der Oberklasse ermittelt werden soll, wo die entsprechende Funktionalität bereits implementiert wurde (Ergebnis z. B. "Adult Donald Duck" oder "Young Tick Duck"). 4

5

Aufgabe 3.2: Schreiben Sie eine Methode Duck[] CreateDucks(), die fünf Instanzen für die Mitglieder der Famile Duck erzeugt und als Array entsprechender Größe zurückgibt: Erwachsene Ducks Donald und Dagobert, kindliche Ducks Tick, Trick und Track. Die Zählung für Count muss nach den Instanzierungen korrekt sein. (4 Punkte) 6

Aufgabe 4: Rekursion Analyse (7 Punkte) Gegeben sind folgende rekursive Funktionen F1 und F2: // Rekursive Funktion F1 int F1(int N) { if (N % 2 == 0) return F2(N + 1); else return F2(N 1); } // Rekursive Funktion F2 int F2(int N) { N = N 1; if (N <= 0) return N; else return F1(N 1); } 4.1: Welche Ergebnisse liefert die Funktion F1 für die Aufrufe N = 1 bis 6 zurück? Tragen Sie die Werte für F1 in unten stehende Tabelle ein (Fehlversuche bitte streichen). (3 Punkte) N 1 2 3 4 5 6 F1(N) 4.2: Welchen Komplexitätsgrad bezüglich des Laufzeitverhaltens O(?) weist die Funktion F1 in Abhängigkeit von N generell auf (Begründung!)? (3 Punkte) 4.3: Welche Formen der Rekursion treten in F1 auf? Nennen Sie zwei verschiedene. (1 Punkt) 7

Aufgabe 5: Rekursion Synthese Gegeben ist folgende Definition eines Baumknotens: (7 Punkte) class TreeNode { private int Cont = 0; private TreeNode Left = null; private TreeNode Right = null; } public TreeNode(int _Cont, TreeNode _Left, TreeNode _Right) { Cont = _Cont; Left = _Left; Right = _Right; } public int CountCont(int X) { } // Ihre Aufgabe! Implementieren Sie obige Methode int CountCont(int X), die rekursiv für einen Knoten die Anzahl der Werte X im aktuellen Knoten und seinem linken bzw. rechten Unterbaum ermittelt (s. Beispiel u. Root bzw. Node); d. h. es soll die Anzahl vorkommender Werte X im Teilbaum ab dem betrachteten Knoten ermittelt werden. Beachten Sie, dass der Baum beliebig groß sein kann und nicht unbedingt balanciert ist. Bei der Implementierung sind weder Schleifen noch Änderungen an Member-Definitionen erlaubt! Beispiel: Root 0 0 1 1 Node 1 1 1 2 2 1 1 2 2 1 Root.CountCont(1) ergibt 4 Node.CountCont(1) ergibt 2 Hinweis: Root und Node sind nur beispielhaft angegeben und stehen nicht zur Verfügung! 8