Programmiertechnik II Klausur WS 2017/18 Angewandte Informatik Bachelor

Ähnliche Dokumente
Programmiertechnik II Klausur WS 2017/18 Angewandte Informatik Bachelor

Fortgeschrittene Programmiertechnik Klausur SS 2015 Angewandte Informatik Bachelor

Programmiertechnik II Klausur SS 2018 Angewandte Informatik Bachelor

Programmiertechnik II Klausur SS 2017 Angewandte Informatik Bachelor

Programmiertechnik II Klausur SS 2017 Angewandte Informatik Bachelor

Programmiertechnik II Klausur WS 15/16 Angewandte Informatik Bachelor

Fortgeschrittene Programmiertechnik Klausur WS 2014/15 Angewandte Informatik Bachelor

Programmiertechnik II Klausur WS 2016/17 Angewandte Informatik Bachelor

Programmiertechnik II Klausur WS 2016/17 Angewandte Informatik Bachelor

Fortgeschrittene Programmiertechnik Klausur WS 2014/15 Angewandte Informatik Bachelor

Kapitel 5: Iterierbare Container

Kapitel 3: Datentyp Liste

Probeklausur zur Vorlesung

Semestralklausur Informatik I - Programmierung

Kapitel 2: Datentyp Liste

Lösungshinweise/-vorschläge zum Übungsblatt 13: Software-Entwicklung 1 (WS 2017/18)

Allgemeine Hinweise:

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

Aufgabe 1 (Programmanalyse, Punkte)

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

7. Dynamische Datenstrukturen Bäume. Informatik II für Verkehrsingenieure

In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

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

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

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

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 16. Juli Klausur

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

Bäume. Prof. Dr. Christian Böhm. in Zusammenarbeit mit Gefei Zhang. WS 07/08

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

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

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

Algorithmen und Datenstrukturen 07

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

Übung 10: Dynamische Datenstrukturen und Rekursion

Variablenarten. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Lösungshinweise/-vorschläge zum Übungsblatt 8: Software-Entwicklung 1 (WS 2017/18)

Wiederholungsklausur "ADP" WS 2016/2017

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

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

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

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

Interfaces und Generics

Bäume. Martin Wirsing. Ziele. Implementierung von Knoten. Bäume (abstrakt) Standardimplementierungen für Bäume kennen lernen

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

Klausur Software-Entwicklung März 01

Wiederholung. Bäume sind zyklenfrei. Rekursive Definition: Baum = Wurzelknoten + disjunkte Menge von Kindbäumen.

Klausur zur Lehrveranstaltung. Technische Informatik für Ingenieure WS 2009/10

Informatik II Prüfungsvorbereitungskurs

Allgemeine Hinweise:

Klausur "ADP" SS 2015

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

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

Kapitel 12: Induktive

Vorname: Nachname: Matrikelnummer: Studiengang (bitte ankreuzen): Informatik Bachelor Informatik Lehramt Mathematik Bachelor Sonstige:

Einstieg in die Informatik mit Java

Übung Informatik I - Programmierung - Blatt 8

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

Technische Universität Braunschweig

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

Kapitel 3: Datentyp Keller und Schlange

Punkte. Teil 1. Teil 2. Summe. 1. Zeigen Sie, dass der untenstehende Suchbaum die AVL-Bedingung verletzt und überführen Sie ihn in einen AVL-Baum.

Algorithmen und Datenstrukturen. Übersicht. Interfaces und Generics. InsertionSort für Punkte. InsertionSort für Punkte

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

Tutoraufgabe 1 (Listen):

Übungen zum Bioinformatik-Tutorium. Blatt 6

Programmiertechnik Klassenvariablen & Instantiierung

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

12 Abstrakte Klassen, finale Klassen und Interfaces

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

ADT: Verkettete Listen

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

Übung 4: Die generische Klasse AvlBaum in Java 1

Klausur zur Lehrveranstaltung. Technische Informatik für Ingenieure WS 2008/09

Probeklausur: Programmierung WS04/05

Wiederholungsblatt Einführung in die Programmierung Lösungen

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

Vorlesung Inf-B

4. Tries und kd-bäume

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

Algorithmen und Datenstrukturen

Aufgabe 1 (Programmanalyse):

Allgemeine Informatik II 14. Juli 2007 (SS 2007) Prof. Dr. Franz Schweiggert / Norbert Heidenbluth

Technische Universita t Mu nchen Institut fu r Informatik

Software Entwicklung 1

Innere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen.

Java Einführung Klassendefinitionen

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

3. Übungsbesprechung Programmkonstruktion

Kapitel 11: Bäume. Beispiele Definition und Eigenschaften Implementierungen Durchlaufen von Bäumen Binäre Suchbäume

Technische Universität Braunschweig

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

Programmieren, Wintersemester 13/14 Übungsleiter: Sebastian Ebers Aufgabenblatt 3

Fakultät IV Elektrotechnik/Informatik

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

Programmiertechnik Übungen zu Klassen & -methoden

Transkript:

Programmiertechnik II Klausur WS 2017/18 Angewandte Informatik Bachelor Name Matrikelnummer Aufgabe Punkte Aufgabe Punkte Zwischensumme 1 10 2 8 3 12 4 20 5 8 58 6 14 7 20 8 12 9 16 Summe 120 Note Prof. Dr. O. Bittel, HTWG Konstanz WS 2017/18 1/12

Aufgabe 1 (10 Punkte) Die Klasse NameList ist wie folgt definiert. class NameList { public String name; public NameList next; public NameList(String s, NameList l) { this.name = s; this.next = l; a) Beschreiben Sie mit einem Speicherbelegungsbild, was durch folgende Anweisungen geleistet wird: NameList[] namelistarr = new NameList[3]; namelistarr[0] = new NameList("Peter", null); namelistarr[0] = new NameList("Anne", namelistarr[0]); namelistarr[2] = new NameList("Maria", null); namelistarr[2].next = new NameList("Josef", null); b) Was wird auf die Konsole ausgegeben, wenn die Anweisungen aus a) und dann folgende Anweisungen durchgeführt werden. for (NameList list : namelistarr) for (NameList p = list; p!= null; p = p.next) System.out.println(p.name); Prof. Dr. O. Bittel, HTWG Konstanz WS 2017/18 2/12

Aufgabe 2 (8 Punkte) Die Knoten eines Binärbaums sind durch folgende Klasse definiert: class Node { int data; Node left; Node right; // Referenz auf linkes Kind // Referenz auf rechtes Kind Node(int x, Node l, Node r) { data = x; left = l; right = r a) Der Binärbaum (2) entsteht aus dem Binärbaum (1), indem die Zahl 4 durch 44 ersetzt und ein neuer Knoten mit der Zahl 55 eingefügt wird. Schreiben Sie mit Hilfe der Variablen root genau 2 Java-Anweisungen, die das leisten. b) Der Binärbaum (3) entsteht aus dem Binärbaum (2), indem der rechte Teilbaum der Wurzel root an den Knoten 2 als rechtes Kind eingehängt und dann der Wurzelknoten gelöscht wird. Schreiben Sie genau 2 Java-Anweisungen, die das leisten. Prof. Dr. O. Bittel, HTWG Konstanz WS 2017/18 3/12

Aufgabe 3 QuickSort (12 Punkte) Das 11-elementige Feld a = {5, 6, 10, 4, 8, 7, 3, 2, 9, 1, 5 wird mit Quicksort ohne 3-Median-Strategie sortiert. Außerdem ist Quicksort so modifiziert, dass Teilfelder mit genau 2 Elementen mit einem einfachen Vertauschungsschritt sortiert werden. Beschreiben Sie, wie sich das Feld a beim Sortieren ändert. Benutzen Sie eine tabellenartige Darstellung wie in der Vorlesung. Geben Sie außerdem die Aufrufstruktur von Quicksort an. 5 6 10 4 8 7 3 2 9 1 5 Prof. Dr. O. Bittel, HTWG Konstanz WS 2017/18 4/12

Aufgabe 4 Sortierte, verkettete Liste mit Hilfskopfknoten (20 Punkte) Um die Worthäufigkeiten in einem Text zu ermitteln, soll eine Klasse WordCount realisiert werden. WortCount speichert Wörter (Strings) mit ihren Häufigkeiten (int-zahl) in einer linear verketteten Liste mit Hilfskopfknoten. Die Wörter sind nach absteigender Häufigkeit sortiert. a) Definieren Sie einen Konstruktor. b) Schreiben Sie eine Methode add(w), die die Worthäufigkeit von w hochzählt. Kommt das Wort w nicht vor, wird es mit der Häufigkeit 1 eingefügt. Ansonsten wird der Häufigkeitszähler um 1 erhöht. Die Reihenfolge der Wörter in der verketteten Liste kann sich dabei ändern! Hinweis: eine private Methode add(w,h), die eine neues Wort w mit der Häufigkeit h einfügt, ist hilfreich. c) get(i) liefert das (i+1)-häufigste Wort zurück (i = 0: das häufigste Wort, i = 1: zweit-häufigste Wort, etc.). Falls kein solches Wort existiert, dann wird null zurückgeliefert. public class WordCount { static private class Node { private Node next; private String w; // Wort private int n; // Häufigkeit private Node(Node p, String w, int n) { this.n=n; this.w=w; next=p; private Node head; Prof. Dr. O. Bittel, HTWG Konstanz WS 2017/18 5/12

Prof. Dr. O. Bittel, HTWG Konstanz WS 2017/18 6/12

Aufgabe 5 Collection (8 Punkte) Ein Verlag gibt mehrere Zeitschriften heraus, die jeweils von mehreren Personen abonniert werden können. Schreiben Sie für die Klasse Verlag eine Methode abonnenten(), die die Menge aller Abonnenten zurückliefert, die irgendeine Zeitschrift dieses Verlags abonnieren. Die im UML-Diagramm aufgeführten Methoden dürfen verwendet werden. Benutzen Sie außerdem geeignete Collection-Typen. public Set<Person> abonnenten() { Prof. Dr. O. Bittel, HTWG Konstanz WS 2017/18 7/12

Aufgabe 6 Bäume (14 Punkte) Ein Baum besteht aus einem Bezeichner (String) und einer (evtl. leeren) Liste mit Teilbäumen. Auf der nächsten Seite ist eine unvollständig definierte Klasse Baum gegeben. Die Methode main erzeugt den oben abgebildeten Baum. a) Ergänzen Sie die gegebene Klasse um geeignete Instanzvariablen und vervollständigen Sie den Konstruktor. b) Definieren Sie eine Methode add(baum b), die den Baum b zur Liste mit Teilbäumen dazufügt. c) Schreiben Sie eine Methode height(), die die maximale Höhe des Baums zurückgibt. Der oben gezeigte Baum hat die Höhe 2. d) Schreiben Sie eine Methode search(string s) die zurückgibt, wie oft der Bezeichner s im Baum vorkommt. Im oben gezeigten Baum kommt der Bezeichner aa dreimal vor. Prof. Dr. O. Bittel, HTWG Konstanz WS 2017/18 8/12

class Baum { public Baum(String bez) { // Neuer Baum mit Bezeichner bez public void add(baum b){ public int height() { public int search(string bez) { public static void main(string[] args) { Baum b = new Baum("aa"); Baum b1 = new Baum("bb"); b.add(b1); b.add(new Baum("cc")); b.add(new Baum("dd")); b1.add(new Baum("aa")); b1.add(new Baum("aa")); Prof. Dr. O. Bittel, HTWG Konstanz WS 2017/18 9/12

Aufgabe 7 Java-Collections (20 Punkte) Für ein Buchhaltungsprogramm ist eine Klasse Ausgabe (beschaffter Artikel, Anschaffungsjahr und Kosten) definiert. a) Schreiben Sie eine Methode getjahresausgaben(list), die für eine Liste list von Ausgaben die Jahresausgaben erstellt und zurückliefert. Die Jahresausgaben werden durch eine Map realisiert, die für jedes Jahr die Summe aller Ausgaben speichert. b) Schreiben Sie eine Methode printjahresausgaben(ja), die mittels einer Schleife für ja die Ausgaben für jedes Jahr in einer Zeile ausgibt. c) Schreiben Sie eine Methode printjahresausgabennachkostensortiert(ja), die die Jahresausgaben ja nach den Kosten absteigend sortiert ausgibt. Kopieren Sie dazu ja in eine Liste, die dann mit einem sort-aufruf geeignet sortiert und ausgegeben wird. class Ausgabe { public String artikel; public int jahr; public double kosten; // Jahr, in dem der Artikel gekauft wurde // Artikel-Kosten public static Map<Integer, Double> getjahresausgaben(list<ausgabe> list) { public static void printjahresausgaben(map<integer, Double> ja) { public static void printjahresausgabennachkostensortiert(map<integer, Double> ja) { Prof. Dr. O. Bittel, HTWG Konstanz WS 2017/18 10/12

Aufgabe 8 Subtyping (12 Punkte) a) Die Methode copy(dest, src) aus der Klasse Collections kopiert alle Elemente aus der Liste src in die Liste dest. static <T> void copy(list<? super T> dest, List<? extends T> src) Von welchem Typ dürfen die Parameter sein? Kennzeichnen Sie dazu in folgender Tabelle die korrekten Parametertypen mit +. dest src Korrekt? List<Integer> LinkedList<Number> List<Integer> LinkedList<Integer> LinkedList<Object> ArrayList<Double> ArrayList<Double> ArrayList<Integer> LinkedList<Number> List<Integer> Set<Object> List<Integer> ArrayList<Integer> List<Integer> b) Die Klassen Kreis, Quadrat und Figur seien wie folgt definiert: class Figur {... class Kreis extends Figur implements Comparable<Kreis> {... class Quadrat extends Figur implements Comparable<Quadrat> {... Geben Sie für diese drei Typen alle Untertypbeziehungen an. Berücksichtigen Sie dabei die Klasse Object. c) Welche Parametertypen sind beim Aufruf der Methode sort aus der Klasse Collections erlaubt? Kennzeichnen Sie dazu in folgender Tabelle die korrekten Parametertypen mit +. static <T extends Comparable<? super T>> void sort(list<t> l); Parametertyp Korrekt ( + oder - )? ArrayDeque<Kreis> LinkedList<Kreis> ArrayList<Figur> ArrayList<Quadrat> List<Object> List<? extends Kreis> Prof. Dr. O. Bittel, HTWG Konstanz WS 2017/18 11/12

Aufgabe 9 Java 8 (16 Punkte) Gegeben ist die Klasse LV für Lehrveranstaltungen und eine Liste lvlist von Lehrveranstaltungen: class LV { public String name; public int sem; // Semester, in dem die LV stattfindet public int anzstud; // Anzahl Studierende in der LV LV(String n, int s, int n) {name = n; sem = s; anzstud = n; LinkedList<LV> lvlist = new LinkedList<>(); lvlist.add(new LV( Prog2,2,30)); lvlist.add(new LV( Prog1,1,50)); // a) Definieren Sie ein Prädikat istgross, das prüft, ob eine Lehrveranstaltung mehr als 40 Studierende hat. b) Definieren Sie ein 2-stelliges Prädikat findetstatt, das prüft, ob die Lehrveranstaltung lv im Semester sem stattfindet. c) Schreiben Sie einen removeif-aufruf, der aus der Liste lvlist alle Lehrveranstaltungen entfernt, die nicht im 2. Semester stattfinden. Verwenden Sie dabei das Prädikat findetstatt aus b). d) Erzeugen Sie aus der Liste lvlist einen Strom und berechnen Sie die Anzahl der großen Lehrveranstaltungen. Verwenden Sie dabei das Prädikat istgross aus a). e) Erzeugen Sie aus der Liste lvlist einen Strom und berechnen Sie die Anzahl der Studierende, die im zweiten Semester studieren. Verwenden Sie dabei das Prädikat findetstatt aus b). Prof. Dr. O. Bittel, HTWG Konstanz WS 2017/18 12/12