Sie sind auf Seite 1von 7

Klausur Programmierung 12.03.

2021
Die Klausur "Programmierung" besteht aus 7 Aufgaben. Zu jeder Aufgabe müssen Sie eine oder
mehrere Dateien bearbeiten und zur Abgabe hochladen. Sie können die Aufgaben in beliebiger
Reihenfolge bearbeiten. Sie können zu jeder Aufgabe mehrfach Lösungen einreichen. Es wird
ausschließlich die letzte eingereichte Lösung jeder Aufgabe betrachtet und bewertet!
Die Klausurzeit beträgt 120 Minuten Bearbeitungszeit plus insgesamt 10 Minuten Vor- und
Nachbereitungszeit wegen der Durchführung über elektronische Systeme. Erlaubte Hilfsmittel sind
ausschließlich die Unterlagen der Lehrveranstaltung sowie (Software-)Werkzeuge zur Bearbeitung
der Lösungsdateien.
Alle benötigten Dateivorlagen finden Sie im zip-Archiv. Ein erneuter Download in den einzelnen
Aufgaben ist nicht notwendig.

Aufgabe Mögliche Punkte


1 7
2 12
3 20
4 24
5 34
6 13
7 10
Summe 120

Wir wünschen viel Erfolg!


Damit die Klausur gewertet werden kann, müssen Sie die eidesstattliche
Erklärung zur Eigenständigkeit Ihrer Prüfungsleistung abgeben!
Aufgabe 1 (7 Punkte)
Implementieren Sie in der Klasse CopyArray für die Methode public int[]
copyPartToArray(int[] source,int start,int end) einen Algorithmus welcher alle
Felder beginnend mit der Position start bis inklusive end vom source Array in ein neues Array
kopiert und dieses zurückgibt. Gehen sie davon aus, dass der int-Parameter immer im Bereich von 0
und der Array Länge liegt (0<=x<array.length). Wird ein unsinniger Wert für den Parameter
verwendet, soll ein leeres Array zurückgegeben werden. In dieser Aufgabe dürfen keine Importe
verwendet werden.

Aufgabe 2 (12 Punkte)


Gegeben ist die Klasse Main.java, in der die Lösung implementiert werden soll. Sowie die Klassen
Studiengang.java und Student.java, welche nicht zu verändern sind.

Verwenden Sie zur Lösung dieser Aufgabe keine if-Anweisung.


Setzen sie Folgendes mittels einer Schleife und einer switch-Anweisung in der main-Methode um:
• Zählen Sie die Anzahl Studierender der MINT-Fächer (Mathematik, Informatik, Biologie,
E_Technik).
• Zählen Sie die Anzahl Studierender der Informatik.
• Für jeden Studierenden wird der Text "Der Student NAME belegt den Studiengang
STUDIENGANGSNAME" auf der Konsole ausgegeben.
• Die Regelstudienzeit von Informatikstudenten wird auf 8 Semester gesetzt.
• Die Regelstudienzeit von Medizinstudierenden wird auf 10 Semester gesetzt.
• Für Medizin und alle bisher nicht genannten Studiengänge wird praktikum auf true gesetzt.
Aufgabe 3 (20 Punkte)
Gegeben sind die Klassen Tree.java, Gemuese.java und Node.java. Die Klasse Tree.java soll bearbeitet
und hochgeladen werden. Die Klassen Gemuese.java und Node.java dürfen nicht verändert werden.
Der Programmcode der drei Klassen realisiert einen binären Baum.

Es handelt sich nicht um einen binären Suchbaum.

Nachdem die ersten vier Knoten in den Baum eingefügt wurden sieht der Baum wie folgt aus:

a) Erstellen Sie sich eine Skizze, in der Sie die weiteren Knoten einfügen. Geben Sie alle Knoten
mit Höhe 2 von links nach rechts an. Geben Sie die Antwort in dem Kommentarfeld der
Klasse Tree.java ein. (8 Punkte)
b) Implementieren Sie die Methode countSpecificNodes(Node node, String
bezeichnung) in der Klasse Tree , so dass sie alle Knoten des Baums zählt, welche den
String bezeichnung im entsprechenden Attribut der Klasse Gemuese enthalten.
Rückgabe der Methode ist die entsprechende Knotenanzahl. (6 Punkte)

Fragen (Im Kommentarfeld der Klasse Tree.java einzutragen):


c) Beschreiben Sie was passiert, wenn ein Knoten mit der gleichen Zahl wie ein bereits
vorhandener Knoten eingefügt wird. (2 Punkte)
d) Die Klasse Node soll statt Gemuese eine generische Nutzlast besitzen. Warum muss diese
generische Klasse mit Hinblick auf die Methode countSpecificNodes(Node node,
String bezeichnung) ein Interface implementieren und was muss das Interface
bereitstellen? (4 Punkte)
Aufgabe 4 (24 Punkte)
Gegeben sind die Klassen List.java, Test.java, Bank.java und Node.java. Die Klassen List.java,
Test.java, Bank.java sollen bearbeitet und hochgeladen werden. Node.java darf nicht verändert
werden.

Die präsentierte Listenstruktur beinhaltet zwei Fehler, so dass es im Umgang mit der Liste zu
Exceptions, oder fehlerhaftem Verhalten kommt.

a) Schreiben Sie eine toString()-Methode für die Klasse Bank, so dass alle Attribute der Klasse
Bank als String zurückgegeben werden. Das Attribut, welches zum Vergleich mittels der
compare()-Methode genutzt wird, muss als Erstes ausgegeben werden. (2 Punkte)
b) Implementieren Sie die printValues()-Methode in der Klasse List, so dass alle Elemente
der Liste kommagetrennt in einer Zeile ausgegeben werden. Zur Ausgabe der Elemente als
String verwenden Sie die toString()-Methode der Klasse Bank. Geben Sie abschließend eine
Leerzeile aus. (3 Punkte)
c) Implementieren Sie in der Klasse Test die Methode fillList(), welche als Parameter die zu
befüllende Liste übergeben bekommt. Die Methode soll die Liste leeren und anschließend
mit Testwerten befüllen. Verwenden Sie für Strings Buchstaben Ihres Namens und bei Zahlen
die ersten Ziffern Ihrer Matrikelnummer. Füllen Sie die Liste mit fünf Einträgen. (5 Punkte)
Beispiel: Max Mustermann 10876543
Strings: "M", "a", "x", "M", "u" int: 1,0,8,7,6
d) Im Quellcode der Klasse List sind zwei Fehler enthalten. Sehen Sie sich den Code an und
finden Sie die Fehler. Schreiben Sie zu jedem der Fehler einen Testfall in Test.java, um den
Fehler hervorzuheben. Geben Sie jedem Testfall eine Nummer (T1, T2…). Kommentieren Sie
zu jedem Testfall in eigenen Worten, was Sie mit diesem Testfall überprüfen und was nicht
wie erwartet funktioniert. (6 Punkte)
Hinweis: Falls Sie Schwierigkeiten haben einen Fehler zu finden, können Sie versuchen durch
geeignete Testfälle die Fehler aufzudecken.
e) Beheben Sie die gefundenen Fehler, so dass die Liste wie erwartet funktioniert. Schreiben Sie
an den korrigierten Stellen einen Kommentar mit der zugehörigen Testfallnummer (T1, T2…).
(8 Punkte)
Aufgabe 5 (34 Punkte)
In dieser Aufgabe ist ein Text angegeben, der Teile eines Immobilien-Softwaresystems beschreibt.
Lesen Sie den Text und erstellen Sie objektorientierten Java-Code, der die im Text genannten
Eigenschaften des Softwaresystems umsetzt. Sie können in dieser Aufgabe beliebige Importe
verwenden. Erstellen Sie getter und setter Methoden nur wenn Sie diese auch verwenden.

In dem Immobilien-Softwaresystem werden Immobilien verwaltet. In diesem Softwaresystem


werden nur zwei Arten von Immobilien verwaltet: Lagerhäuser und Fabriken.

Beide Immobilienarten haben die Gemeinsamkeit, dass sie einen Grundpreis in ganzen Euro besitzen.
Der Grundpreis wird bereits bei der Erstellung einer Immobilie mit einem Wert belegt. Es kann keine
Objekte vom Typ Immobilie geben, sondern nur von den daraus abgeleiteten Typen Lagerhaus und
Fabrik.

Eine Fabrik und ein Lagerhaus haben neben dem Grundpreis eine weitere gemeinsame Eigenschaft
den Besitztyp. Der Besitztyp kann nur folgende Werte annehmen: PRIVAT, STAATLICH. Genau wie der
Grundpreis wird auch der Besitztyp bei der Objekterzeugung festgelegt.

Mittels einer Schnittstelle Verkaufbar, welche durch jede Immobilie implementiert wird, gibt es eine
Methode, die den Kaufpreis einer Immobilie zurückgibt. Im Interface ist die Konstante Faktor
enthalten, welche mit der Ganzzahl 2 initialisiert wird. Eine private Immobilie kostet den Grundpreis
multipliziert mit dem Faktor des Interfaces, eine Staatliche nur den Grundpreis.

Eine Fabrik enthält eine Liste von weiteren Fabriken. Es gibt eine Methode in Fabrik, die eine neue
Liste der weiteren Fabriken mit Besitztyp Privat zurückgibt. In dieser Methode wird zudem geprüft,
ob die Liste der weiteren Fabriken leer ist. Ist dies der Fall, soll eine checked Exception vom Typ
KeineWeiterenFabrikenException geworfen werden. Diese Exception wird an die aufrufende
Methode weitergegeben.

Ein Lagerhaus besitzt eine Fläche, welche bei der Objekterzeug festgelegt wird. Es gibt eine Methode
getFlaeche, welche die Fläche zurückgibt. Sollte jedoch die Fläche einen negativen Wert besitzen,
wird eine unchecked Exception vom Typ FlaecheNegativException geworfen.

Ein Lagerhaus hat eine Liste von weiteren Lagerhäusern. Es gibt eine Methode in der Klasse
Lagerhaus, welche eine neue sortierte Liste von Lagerhäusern zurückgibt. Diese Liste ist sortiert nach
der Fläche der Lagerhäuser, beginnend mit der kleinsten Fläche. Die Sortierung verwendet die
Methode getFlaeche, um die Fläche auszulesen. Da hierbei eine FlaecheNegativException auftreten
kann, soll diese behandelt werden, indem auf der Konsole eine Ausgabe erfolgt, dass ein Lagerhaus
eine Fläche mit negativem Wert besitzt. In diesem Fall wird eine leere Liste zurückgegeben.
Aufgabe 6 (13 Punkte)
Schreiben Sie die Lösung der Aufgabe in die bereitgestellte Lambda.txt

1. Welche Eigenschaft muss ein Interface haben damit es als FunctionalInterface eingesetzt
werde kann? (2 Punkte)

2. Betrachten Sie das Interface MultiplySAM und die Klasse TestMultiplySAM. Geben
Sie den Lambda Ausdruck an, der in der testMultiply() Methode statt dem null stehen
muss, damit der input mit dem faktor multipliziert wird. (3 Punkte)

@FunctionalInterface
public interface MultiplySAM {
int multiplyInputWithFaktor(int input, int faktor);
}

public class TestMultiplySAM {


public void testMultiply(){
MultiplySAM multiplySam = null;
MultiplySam.multiplyInputWithFaktor(1,2);
}
}

3. Betrachten Sie die frage3Methode. Beschreiben Sie, was die einzelnen verwendeten
Streammethoden in der frage3Methode bewirken. (3 Punkte)

public List<Integer> frage3Methode(List<Integer> intList) {


return intList.stream()
.filter(i -> i % 2 != 0)
.collect(Collectors.toList());
}

4. Betrachten Sie die Klasse MyValue sowie frage4Methode. Beschreiben Sie, was die
einzelnen unten vorgegebenen Streammethoden in der frage4Methode bewirken. (5 Punkte)

public class MyValue {


private Integer value;

public MyValue(Integer value) {


this.value = value;
}

public Integer getValue() {


return value;
}
}

public static Integer frage4Methode(List<Integer> intList) {


return intList.stream()
.map(MyValue::new)
.map(v -> v.getValue())
.reduce(0, (a, b) -> a + b);
}
Aufgabe 7 (10 Punkte)
Schreiben Sie die Lösung der Aufgabe in die bereitgestellte Fragen.txt

1. Führen Sie einen Tiefendurchlauf mit Besuchsmarkierung auf dem Startknoten 6 aus.
Schreiben Sie die Zahlen der besuchten Knoten in Besuchsreihenfolge auf. Sollten mehrere
Folgeknoten möglich sein, beginnen Sie mit der kleinsten Zahl. (4 Punkte)

2. Was ist der Unterschied zwischen = und ==? Wann werden die jeweiligen Zeichen benutzt?
(2 Punkte)
3. Schreiben sie die Initialisierung eines zweidimensionalen String-Arrays mit Größe0 2 und
Größe1 5. (2 Punkte)
4. Worin besteht der Unterschied zwischen Unchecked- und Checked-Exceptions? (2 Punkte)

Stellen sie sicher, dass Sie die eidesstattliche Erklärung zur


Eigenständigkeit Ihrer Prüfungsleistung abgegeben haben!

Das könnte Ihnen auch gefallen