Programmiertechnik II Klausur SS 2017 Angewandte Informatik Bachelor

Ähnliche Dokumente
Java Einführung Collections

Algorithmen und Datenstrukturen

Programmierkurs Java

1 Polymorphie (Vielgestaltigkeit)

JAVA KURS COLLECTION

Java Einführung Methoden in Klassen

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

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

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Objektorientierte Programmierung

Teil V. Generics und Kollektionen in Java

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.

Kapitel 6. Vererbung

Programmiertechnik Klassenmethoden

Übungen zu Programmierung I - Blatt 8

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

Gebundene Typparameter

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

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

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

Kapitel 6. Vererbung

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

Kapitel 6. Vererbung

13. Tutorium zu Programmieren

Probeklausur: Programmierung WS04/05

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

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

5. Tutorium zu Programmieren

Klausur zur Einführung in die objektorientierte Programmierung mit Java

5.14 Generics. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Java Einführung Klassendefinitionen

3 Objektorientierte Konzepte in Java

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

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Java: Vererbung. Teil 3: super()

Probeklausur: Programmierung WS04/05

Java Generics & Collections

Vererbung. Martin Wirsing. Ziele. Vererbung

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

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

Geordnete Binärbäume

Einführung in die Java- Programmierung

Einführung in die Programmierung Vorlesungsprüfung

Software Engineering Klassendiagramme Einführung

Die Programmiersprache C Eine Einführung

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

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

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

5.4 Klassen und Objekte

Java Einführung Abstrakte Klassen und Interfaces

Betreutes Programmieren Vorlesung Informatik II, Blatt 7 Musterlösung

Inf 12 Aufgaben

Einführung in die Programmierung für Wirtschaftsinformatik

Aufgabe 1. »Programmieren«, WS 2006/2007. Nino Simunic M.A.

368 4 Algorithmen und Datenstrukturen

Algorithmen & Datenstrukturen 1. Klausur

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

PIWIN 1 Übung Blatt 5

Java I Vorlesung Vererbung und Sichtbarkeit

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Typumwandlungen bei Referenztypen

Ich liebe Java && Ich liebe C# Rolf Borst

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

Web und Mobile Apps Programmieren mit Dart

Objektorientierte Programmierung mit C++ Vector und List

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

Klausur zur Einführung in die objektorientierte Programmierung mit Java

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

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

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

1. Grundlegende Konzepte in Java (6 Punkte)

Distributed Computing Group

3 Objektorientierte Konzepte in Java

Klassen mit Instanzmethoden

Aufgabe 1 (12 Punkte)

2. Methoden. n Generelles zum Aufruf von Methoden. n Parameterübergabemechanismen (call by value, call by reference)

JAVA - Methoden

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

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Liebe Leserin, lieber Leser, in der ersten Auflage von Programmieren lernen mit Java von Hans- Peter Habelitz sind einige Fehler zu korrigieren.

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

Objektorientierte Programmierung

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

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

C# im Vergleich zu Java

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Klausur C-Programmierung / / Klingebiel / 60 Minuten / 60 Punkte

Algorithmen und Datenstrukturen 07

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

Einführung in die Programmierung

Begleitendes Praktikum zur Vorlesung Künstliche Intelligenz

Type Erasure in Java 5. Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe

Javakurs zu Informatik I. Henning Heitkötter

Institut für Programmierung und Reaktive Systeme 26. April Programmieren II. 10. Übungsblatt

Einführung in die Java- Programmierung

Überschreiben von Methoden

Javakurs für Anfänger

Transkript:

Programmiertechnik II Klausur SS 2017 Angewandte Informatik Bachelor Name Matrikelnummer Aufgabe Punkte Aufgabe Punkte Zwischensumme 1 6 2 8 3 14 4 22 5 16 66 6 24 7 13 8 17 Summe 120 Note Prof. Dr. O. Bittel, HTWG Konstanz SS 2017 1/13

Aufgabe 1 (6 Punkte) Beschreiben Sie mit einem Speicherbelegungsbild, was durch die main-methode geleistet wird. Es genügt das Speicherbelegungsbild anzugeben, nachdem alle Anweisungen der main-methode ausgeführt worden sind. class Node { Node next; int data; Node(int x, Node p) { next = p; data = x; public static void main(string[] a) { Node p = new Node(3, null); p = new Node(5, p); Node q = p; q.next = new Node(2, q.next); p = p.next; Prof. Dr. O. Bittel, HTWG Konstanz SS 2017 2/13

Aufgabe 2 (8 Punkte) Für Knoten einer linear verketteten Liste sei folgende Klasse definiert: class Node { Node next; int data; Node(Node n, int x) { next = n; data = x Die folgende Abbildung zeigt drei verschiedene Zustände einer linear verketteten Liste. begin zeigt auf den ersten Knoten und end zeigt auf den letzten Knoten. a) Schreiben Sie eine Folge von Anweisungen, die die Liste von Zustand (1) in Zustand (2) überführt. Verwenden Sie keine Schleife und benutzen Sie nur die Variable end. b) Schreiben Sie eine Folge von Anweisungen, die die Liste von Zustand (2) in Zustand (3) überführt. Verwenden Sie keine Schleife und benutzen Sie nur die Variablen begin und end. Prof. Dr. O. Bittel, HTWG Konstanz SS 2017 3/13

Aufgabe 3 QuickSort mit 3-Median-Strategie (14 Punkte) Das 12-elementige Feld a = {15, 12, 2, 20, 10, 8, 7, 1, 4, 11, 6, 13 wird mit Quicksort mit 3-Median- Strategie sortiert. Beschreiben Sie, wie sich dabei das Feld a ändert. Benutzen Sie eine tabellenartige Darstellung wie in der Vorlesung. Geben Sie außerdem die Aufrufstruktur von Quicksort an. Die 3-Median-Strategie soll dabei wie folgt umgesetzt werden: Sortieren Sie die 3 Zahlen a[li], a[m] und a[re] mit m = (li+re)/2 (a[li] ist das Element am linken Rand, a[m] ist das Element in der Mitte und a[re] ist das Element am rechten Rand). Vertauschen Sie dann a[m] mit a[re]. Die 3-Median-Strategie darf in einem Schritt durchgeführt werden (d.h. eine Zeile in der Tabelle). Außerdem soll folgende Vereinfachung berücksichtigt werden: Besteht das zu sortierende Teilfeld nur aus 2 oder 3 Elementen, dann darf das Teilfeld durch einfache Vertauschungsschritte sortiert werden. Die Vertauschungen dürfen in einem Schritt durchgeführt werden (d.h. eine Zeile in der Tabelle). 15 12 2 20 10 8 7 1 4 11 6 13 Prof. Dr. O. Bittel, HTWG Konstanz SS 2017 4/13

Aufgabe 4 Linear verkettete Liste (22 Punkte) Eine Liste von Variablennamen mit ihren int-werten soll in einer linear verketteten Liste ohne Hilfskopfknoten verwaltet werden. Wird auf einen Variablenamen zugegriffen, so rückt der entsprechende Eintrag an den Listenanfang. Damit kann ein späterer Zugriff auf den gleichen Variabennamen effizienter erfolgen (most recently used name list). Definieren Sie folgende Methoden: a) add(n,v) fügt einen neuen Eintrag mit Name n und Wert v an den Anfang der Liste. Kommt der Name n in der Liste bereits vor, dann bleibt die Liste unverändert. b) get(n) liefert den Wert der Variablen mit Name n zurück. Falls der Name n nicht vorkommt wird null zurückgeliefert. Falls n vorkommt, dann rückt der entsprechende Eintrag an den Anfang der List. public class MRUNameList { static private class Node { private String name; // Variabenname // Wert der Variablen private int value; private Node next; private Node(String n, int v, Node p) { name=n; value=v; next=p; private Node head = null; public void add(string n, int v) { public Integer get(string n) { Prof. Dr. O. Bittel, HTWG Konstanz SS 2017 5/13

c) Wie muss die Klasse ergänzt werden, damit die gegebene statische Methode print(l) alle Variablennamen der Liste l ausgibt. Geben Sie nur den nötigsten Code an! public class MRUNameList { // s. o. public static void print(mrunamelist l) { for (String n : l) System.out.println(n); Prof. Dr. O. Bittel, HTWG Konstanz SS 2017 6/13

Aufgabe 5 Bäume (16 Punkte) Es sollen arithmetische Ausdrücke mit "+", "*" und int-zahlen als baumartige Strukturen dargestellt werden. Beispielsweise lässt sich der arithmetische Ausdruck (2+3)*4 durch folgenden Baum darstellen: Für die Knoten dieser Bäume steht eine Java-Klasse Expr (expression) zur Verfügung. Es gibt zwei Arten von Knoten: Prof. Dr. O. Bittel, HTWG Konstanz SS 2017 7/13

Operator-Knoten: val ist vom Typ String und hat den Wert "+" oder "*". Die beiden Referenzen left und right (linker und rechter Operand) müssen ungleich null sein. Operanden-Knoten: val ist vom Typ Integer und gibt den Operanden an. Die beiden Referenzen left und right müssen null sein. Beachten Sie, dass der Typ von val Object ist. Damit ist sowohl der String-Typ als auch der Integer-Typ kompatibel. Die Methode main baut den oben gezeigten Ausdruck p = (2+3)*4 auf. class Expr { public Object val; public Expr left; public Expr right; public Expr(Expr e1, Expr e2, Object v){ left = e1; right = e2; val = v; public static void main() { Expr a = new Expr(null,null,2); // Operand 2 Expr b = new Expr(null,null,3); // Operand 3 Expr c = new Expr(null,null,4); // Operand 4 Expr s = new Expr(a,b,"+"); Expr p = new Expr(s,c,"*"); // Summe // Produkt System.out.println(countOp(p)); // 2 System.out.println(eval(p)); // 20 a) Schreiben Sie eine rekursive Methode countop(expr), die die Anzahl der Operatoren in expr zählt. Beispielsweise ergibt countop(p) den Wert 2. expr!=null darf vorausgesetzt werden. b) Schreiben Sie eine rekursive Methode eval(expr), die den Ausdruck expr auswertet. Beispielsweise ergibt eval(p) den Wert 20. expr!=null darf vorausgesetzt werden. Prof. Dr. O. Bittel, HTWG Konstanz SS 2017 8/13

static int countop(expr e) { static double eval(expr e) { Prof. Dr. O. Bittel, HTWG Konstanz SS 2017 9/13

Aufgabe 6 Java-Collections (24 Punkte) In der Klasse Info wird die Information festgehalten, dass ein Mitarbeiter in einem Projekt eine bestimmte Programmiersprache eingesetzt hat. Mitarbeiter werden durch ihre Personalnummer und Programmiersprachen durch einen String (z.b. "Java") dargestellt. class Info { public int mnr; // Personalnummer des Mitarbeiters; public String ps; // Programmiersprache; public Info(int n, String s) { mnr = n; ps = s; Folgendes Beispiel zeigt, wie eine kleine Info-Liste aufgebaut sein kann. Mitarbeiter mit Personalnummer 1 hat "Java" und "C/C++" eingesetzt und Mitarbeiter mit Personalnummer 2 hat "Python" und "Java" eingesetzt. List<Info> list = new LinkedList<>(); list.add(new Info(1, "Java")); list.add(new Info(2, "Python")); list.add(new Info(2, "Java")); list.add(new Info(1, "C/C++")); Definieren Sie auf der nächsten Seite die folgenden Methoden: a) Schreiben Sie eine statische Methode getprogspr(list), die für eine Info-Liste list eine Menge (Set) von Programmiersprachen zurückliefert, die in list vorkommen. b) Schreiben Sie eine Methode getmapmatops(list), die für eine Info-Liste list eine Map zurückliefert, die zu jedem Mitarbeiter die Menge aller Programmiersprachen abspeichert, die dieser Mitarbeiter schon eingesetzt hat. c) Schreiben Sie eine Methode getmappstoma(mapmatops). Die Methode bekommt mit dem dem Parameter mapmatops eine Map übergeben, die zu jedem Mitarbeiter die Menge aller eingesetzten Programmiersprachen abspeichert. Die Methode liefert eine Map zurück, die zu jeder Programmiersprache, die Menge der Mitarbeiter abspeichert, die diese Programmiersprache bereits eingesetzt haben. Die Methode berechnet damit die invertierte Map. Prof. Dr. O. Bittel, HTWG Konstanz SS 2017 10/13

static Set<String> getprogspr(list<info> list){ static Map<Integer,Set<String>> getmapmatops(list<info> list){ static Map<String,Set<Integer>> getmappstoma(map<integer,set<string>> mapmatops){ Prof. Dr. O. Bittel, HTWG Konstanz SS 2017 11/13

Aufgabe 7 Subtyping (13 Punkte) Gegeben sind die 5 Klassen Spiel, Brettspiel, Kartenspiel, Skat und Doppelkopf mit folgenden Untertypbeziehungen: a) Eine Methode zum Ausgeben von Spielen ist in zwei Versionen definiert. Von welchem Typ muss der Parameter spieleliste sein, damit ein Aufruf der Methode korrekt typisiert ist. Kennzeichnen Sie in folgender Tabelle die korrekten Aufrufe mit "+". static void print_v1(list<spiel> spieleliste) {... static void print_v2(list<? extends Spiel> spieleliste) {... Typ von spieleliste print_v1(spieleliste) print_v2(spieleliste) Set<Spiel> LinkedList<Skat> ArrayList<Spiel> List<Object> Collection<Spiel> List<Kartenspiel> b) Die statische Methode copy kopiert alle Kartenspiele aus der Liste src in die Liste dest. static void copy(list<? super Kartenspiel> dest, List<? extends Spiel> src) Von welchem Typ müssen die Parameter dest und src sein, damit ein Aufruf der Methode korrekt typisiert ist. Kennzeichnen Sie in folgender Tabelle die korrekten Aufrufe mit "+". Typ von dest Typ von src LinkedList<Object> List<Brettspiel> ArrayList<Skat> Collection<KartenSpiel> List<Spiel> ArrayList<Spiel> LinkedList<Kartenspiel> List<Brettspiel> LinkedList<Object> Prof. Dr. O. Bittel, HTWG Konstanz SS 2017 12/13

Aufgabe 8 Java 8 (17 Punkte) Gegeben ist die Klasse Point für Punkte in der Ebene und eine Liste plist von 3 Punkten: class Point { public double x; public double y; public Point(double x, double y) {this.x = x; this.y = y; public String tostring() {return "Point{" + "x=" + x + ", y=" + y + ''; List<Point> plist = Arrays.asList(new Point(2,3), new Point(1,2), new Point(0,1)); a) Definieren Sie eine Funktion dist vom Typ Function als Lambda-Ausdruck, die den Abstand eines Punkts zum Ursprung zurückliefert. Hinweis: für den Punkt (x,y) ist der Abstand zum Ursprung x " + y " b) Definieren Sie ein Prädikat leone vom Typ Predicate, das mit Hilfe der Funktion dist prüft, ob ein Punkt im Einheitskreis liegt. Hinweis: für Punkte im Einheitskreis ist die Distanz 1. c) Schreiben Sie einen Aufruf, der die Liste der Punkte plist nach ihren Distanzen zum Ursprung sortiert. Ergänzen Sie folgenden sort-aufruf um einen geeigneten Lambda-Ausdruck. Die Funktion dist darf verwendet werden. plist.sort( ); d) Erzeugen Sie aus der Punkteliste plist einen Strom und führen Sie folgende Strom- Operationen durch: alle Punkte, die im Einheitskreis liegen, mittels der filter-methode entfernen alle Punkte mit Hilfe der map-methode durch ihre Distanzen ersetzen sortieren und ausgeben der Distanzen. Die Funktion dist aus a) und das Prädikat leone aus b) dürfen verwendet werden. e) Ergänzen Sie folgende Stromverarbeitung um Operationen, so dass eine Folge von Punkten (0,0), (1,1),... (99,99) ausgegeben wird. Stream.iterate(0, x -> x+1).foreach(system.out::println); Prof. Dr. O. Bittel, HTWG Konstanz SS 2017 13/13