Sie sind auf Seite 1von 12

AuP, 2020-02-19, Seite 1 von 12

Technische Universität Ilmenau, Fakultät für Informatik und Automatisierung

Klausur Algorithmen und Programmierung


Wintersemester 2020
Gruppe A
19.02.2020

Name:
Vorname:
Studiengang:
Matrikelnummer:

Ablauf/Hinweise:
1. Platzfindung entsprechend den Anweisungen der Klausuraufsicht
2. Geräte (Handy etc.) ausschalten und in die Tasche
3. Richten Sie Ihren Platz ein. Auf Ihrem Platz dürfen sich befinden:
• Schreibmaterial: einzelne Stifte, Lineal etc. (keine Federtaschen usw.)
• 1 A4-Blatt mit selbsthandgeschriebenen Notizen (nicht gedruckt!) Vorbereitung
• Ihr Studenten- bzw. Lichtbildausweis
• ggfs. Essen, Getränk
→ keine Bücher, Handy, Taschenrechner, Smartwatch etc.
4. Ausgabe der Aufgaben. Die ausgeteilten Blätter bleiben liegen, 1. Seite oben!
5. Füllen Sie die oben stehenden Felder aus.
6. Nach Aufforderung durch die Aufsicht: Lesen & Bearbeiten der Klausur
7. Verwenden Sie nur die ausgegebenen Blätter zur Lösung der Aufgaben. Schreiben Sie Ihre Lösung
in die dafür vorgesehenen Felder/Bereiche.
8. Ordnen Sie die Blätter immer wieder zu einem Block, so dass nur die gerade bearbeitete Seite
sichtbar ist.
9. Verwenden Sie zum Schreiben/Skizzieren keine rote Farbe. Mit Bleistift erstellte Texte oder
Skizzen (außer Struktogramme) gehen im Allgemeinen nicht in die Bewertung ein!
10. Bearbeitungszeit: 90 Minuten

Aufgabe Punkte
1 / 10
2 / 8
3 / 18
4 / 12
5 / 7
6 / 15
7 / 10
8 / 10
Summe / 90
+Bonus:
Gesamtpunktzahl
AuP, 2020-02-19, Seite 2 von 12

1. Kreuzen Sie unten jeweils die richtige Antwort an. Es ist stets nur eine Antwort möglich, d.h.: es
gibt keinen Punkt bei Mehrfachantworten! Sollten Sie sich nicht sicher sein, dann können Sie
auch aufschreiben, warum Sie die eine und/oder andere Option wählen würden. (10 Punkte)
a) long x=3; if(false) x=2; x=1; // Welchen Wert hat x nun?
[ ]1
[ ]2
[ ]3
b) Was trifft auf eine Variable des Datentyps Boolean zu?
[ ] Sie kann null–Werte speichern.
[ ] Sie kann nur die Werte true oder false haben.
[ ] Sie hat stets die Modifikatoren public static.
c) Angenommen Algorithmus A hat die Komplexitätsklasse O(1) und Algorithmus B O(n),
[ ] … dann ist A stets schneller als B.
[ ] … dann besteht A aus nur einem Befehl.
[ ] … dann hängt die Laufzeit von A nicht von der Anzahl der zu verarbeitenden Daten ab.
d) Doppeltverkettete Listen…
[ ] bestehen aus Knoten, welche 2 Zeiger auf den jeweils nächsten Knoten enthalten.
[ ] lassen sich auch von hinten nach vorn durchlaufen.
[ ] gehören zu den statischen Datenstrukturen.
[ ] können zu Bäumen entarten.
e) Wozu wird in Java das Schlüsselwort break verwendet?
[ ] um Schleifen zu verlassen
[ ] um ein Programm zu beenden
[ ] um eine Pause in der Programmabarbeitung zu machen
f) Welche Aussage trifft in Java auf das Schlüsselwort return zu?
[ ] Nach return folgt stets ein Rückgabewert.
[ ] Seine Ausführung beendet stets die aktuelle Methode.
[ ] Es steht stets als letzter Befehl am Ende einer Methode.
g) Welcher Befehl weist der Variablen b den Wert false zu?
[ ] b = 2 > 1;
[ ] b = true | false;
[ ] b = true == false;
h) Java-Methoden …
[ ] können lokale Variablen enthalten.
[ ] haben immer mindestens einen Parameter.
[ ] sollten einen Namen haben, der mit einem großen Buchstaben beginnt.
i) Rekursive Algorithmen …
[ ] sind stets schneller als iterative.
[ ] lassen sich nicht in Java implementieren.
[ ] können zum Programmabbruch durch Stackoverflow führen.
k) Um eine existierende float-Variable f mit dem Wert 0,5 zu füllen, dient folgender Befehl:
[ ] f = 0.5f;
[ ] f = 1/2.0;
[ ] f = 1.0/2.0;
[ ] f = Math.sqrt(2);
AuP, 2020-02-19, Seite 3 von 12

2. Im nachfolgenden Kasten soll die Definition einer öffentlichen Klasse XYZ stehen, welche eine
öffentliche Gleitkommaobjektvariable namens a sowie eine Klassenvariable namens b enthalten
soll. b sei vom Typ XYZ und soll auf das zuletzt erzeugte XYZ-Objekt verweisen. Zudem soll XYZ
einen Konstruktor mit einem Parameter haben, der als Wert der Objektvariablen a verwendet
wird. Finden Sie mindestens 8 Fehler und geben Sie in der Tabelle jeweils die Zeilennummer und
eine kurze Beschreibung und Korrektur an. (8+x Punkte)
1: public class XVZ(){
2: static Integer a;
3: XYZ b = new XYZ();
4: xyz(double p){
5: b = p;
6: this = b;
7: }

Zeile(n) Beschreibung UND Korrektur


AuP, 2020-02-19, Seite 4 von 12

3. Ein Algorithmus habe als Eingabe ein eindimensionales Feld von Gleitkommazahlen mit beliebi-
gen Werten. Der Algorithmus soll den Index finden, bei dem die Differenz zum nächsten Wert
am größten ist. Dieser Index ist am Ende des Algorithmus auszugeben. Wenn es mehrere
derartige Indices gibt, dann ist der kleinste dieser Indices auszugeben. Sollte das Feld nicht
existieren, dann ist -1 auszugeben. Sollte kein passendes Wertepaar im Feld enthalten sein,
dann ist -2 auszugeben. (18 Punkte)
Beispiel für den „Normalfall“: Das Feld enthalte die Zahlen 4, 7, 1, 5, 3. Daraus ergeben sich die
Differenzen 3, -6, 4, -2. Also ist 5-1=4 die größte Differenz und der Index von 1 ist auszugeben.
a) Setzen Sie den obigen Algorithmus in einem Struktogramm um. Beachten Sie dabei:
• Beenden Sie den Algorithmus bei Bedarf per z.B. return oder stop.
• Verwenden Sie im Struktogramm die typischen Struktogramm-Bausteine Sequenz,
bedingte Verzweigung und Schleife.
• Schreiben Sie die Texte möglichst in Java bzw. in einer an Java angelehnten Syntax
(Semikolon am Ende ist aber z.B. nicht nötig).
• Berücksichtigen Sie im Struktogramm an passender Stelle auch die Ein- und Ausgabe
von Werten sowie die Initialisierung von Variablen. (9 Punkte)
AuP, 2020-02-19, Seite 5 von 12

b) Schreiben Sie entsprechend dem beschriebenen Algorithmus in Java eine öffentliche


Methode namens firstIdxOfMaxPosSlope, welche den ermittelten Index (bzw. im
Fehlerfall die entsprechende negative Zahl) als Ganzzahl zurückgibt. Das Feld sei der
Parameter dieser Methode. Im Feld seien double-Werte gespeichert. (7 Punkte)

c) Haben Sie obige Methode als Klassen- oder Objektmethode definiert? Begründen Sie,
warum Sie sich so entschieden haben! (2 Punkte)

Zusatz: Definieren Sie Felder namens t1, t2 usw., mit denen firstIdxOfMaxPosSlope in
main möglichst gründlich getestet werden könnte. (+5 Punkte)
AuP, 2020-02-19, Seite 6 von 12

4. Schreiben Sie eine öffentliche Klasse R. Diese Klasse soll Rechtecke beschreiben und dazu Folgendes enthalten:
• eine long-Objektvariable namens br (zur Speicherung der Breite), welche geschützt ist,
• eine geschützte long-Objektvariable namens la (zur Speicherung der Länge),
• eine private short-Variable, welche numR heißen soll und stets für alle Objekte der Klasse gleich ist, wobei
numR am Anfang stets den Wert 0 haben soll und die aktuelle Anzahl der erzeugten Objekte speichert,
• einen öffentlichen Konstruktor mit einer Parameterliste, welche zur Initialisierung von br und la dienen soll
(die Reihenfolge der Parameter genauso wie eben aufgezählt; Achtung: sollte ein Parameter kleiner 0 sein,
dann ist als Wert 0 zu verwenden),
• eine öffentliche parameterlose Methode namens calcBorderLength, welche den Umfang des R-
Objektes berechnet und zurückgibt,
• eine public Getter-Methode, welche den aktuellen Wert von br zurückgibt,
• eine protected Setter-Methode, mit der der aktuelle Wert von br gesetzt werden kann (auch hier sind
negative Werte durch 0 zu ersetzen),
• bei jedem Konstruktoraufruf soll numR um 1 erhöht werden. (12 Punkte)
AuP, 2020-02-19, Seite 7 von 12

Zusatz 1: Schreiben Sie eine öffentliche Klasse Skizze, welche:


• einen Interface DbgInfo implementiert,
• in einer „package-private“ Array-Objektvariable namens rs bis zu 100 Objekte der Klasse R
speichert (die 100 Feldelemente seien initial alle null),
• die einzige in DbgInfo definierte (öffentliche parameterlose) Objektmethode namens
showInfo sei so umgesetzt, dass die Summe der Umfänge aller in rs referenzierten R-
Objekte berechnet und auf der Konsole ausgegeben wird. Am Ende der Methode wird das
DbgInfo -Objekt selbst zurückgegeben. (+6 Punkte)

Zusatz 2: Wie lautet der Java-Code zur Definition der DbgInfo -Schnittstelle? (+2 Punkte)
AuP, 2020-02-19, Seite 8 von 12

5. Es sei die folgende rekursive Methode namens m gegeben:

public static int m(int i) {


if (i>=0)
return 3*m(i-2)-1;
return i+1;
}

Geben Sie schrittweise jeden Aufruf von m sowie den entsprechenden Rückgabewert (mit
Berechnungsablauf) an, wenn die Rekursion mit m(5) gestartet wird. (7 Punkte)

Aufrufe Rückgabewerte, mit Berechnungsablauf

m( 5 )

m( )

m( )

6. Suchen/Sortieren (15 Punkte)


a) Bewerten Sie folgende Ansätze: (6 Punkte)
• binäre Suche in einer doppeltverketteten Liste:

• sequentielle Suche in einem sortierten Feld:

• binäre Suche in einem unsortierten Feld:

b) Beim Suchen von Strings in Feldern müssen Zeichenketten verglichen werden. Dabei wird
sinnvollerweise das Comparable-Interface genutzt, welches Strings implementieren.
Angenommen die Zeichenkette "ZK" wäre in der Variable x referenziert. Wie würden Sie
Vergleiche zwischen x und einem String-Feldelement f[i] implementieren? (3 Punkte)
• „Wenn x kleiner f[i] ist“: if ( )
• „Wenn x gleich f[i] ist“: if ( )
• „Wenn x größer f[i] ist“: if ( )
AuP, 2020-02-19, Seite 9 von 12

c) Angenommen ein Feld ia sei wie folgt initialisiert: int[] ia = {5, 3, 9, 2, 1};
Wie würde dann ia nach je einem Durchlauf des Insertion-Sort-Algorithmus aussehen? Tragen
Sie die jeweiligen Werte in die Tabelle ein und beschreiben Sie, was im Durchlauf passierte und
warum. (Hinweis: Es wird dabei angenommen, dass der Algorithmus wie in der Vorlesung
beschrieben arbeitet. Sollte Ihre Lösung auf einer anderen Variante beruhen, dann beschreiben
Sie diese.) (6 Punkte)

Werte Kommentar (was passierte im Durchlauf)


5 3 9 2 1 gegebener Ausgangszustand vor dem 1. Durchlauf

7. Binäre Suchbäume (10 Punkte)


a) Gegeben sei nebenstehender Suchbaum. Geben Sie in der Tabelle die
Werte der gefragten Eigenschaften dieses Baumes an (und bei Bedarf 4
auch einen Kommentar, warum Sie diesen Wert eingetragen haben).
(4 Punkte) 3 6
Eigenschaft Wert
Höhe 5 7
1
Anzahl der Wurzelknoten
9
maximales Niveau

Anzahl der Knoten im Pfad


für den Wert 3
AuP, 2020-02-19, Seite 10 von 12

b) Skizzieren Sie den binären Suchbaum (mit Knotenwerten) minimaler Höhe, welcher die Werte
7, 3, 9, 5, 8, 2, 6 enthält. (3 Punkte)

c) Warum werden beim Aufbau von binären Suchbäumen Ausgleichsoperationen durchgeführt?


Zeigen Sie ein Beispiel dafür, was passieren kann, wenn man keine Ausgleichsoperationen
durchführt und begründen Sie, warum dies problematisch ist. (3 Punkte)

8. OOP und Bäume (10 Punkte)


Eine Binärbaum BB zur Speicherung von char-Werten sei wie folgt definiert:
1: public class BB {
2: class Kn { // innere Knoten-Klasse
3: char va; // der "Wert" des Knotens
4: Kn sm; // Knoten mit kleineren Werten
5: Kn la; // Knoten mit größeren Werten
6: }
7: Kn r = null; // Wurzel
8: public String toStringInorder(){
9: ##1##
10: }
11: private String toStringInorder(##2##){
12: ##3##
13: }
14: }

a) Was müsste an den Stellen ##1##, ##2## und ##3## stehen, so dass der Baum per rekursiver
Inorder-Traversierung als String zurückgegeben werden kann? (5 Punkte)
AuP, 2020-02-19, Seite 11 von 12

b) Schreiben Sie für BB eine öffentliche Klassenmethode namens pio, welche einen solchen
Binärbaum als Parameter übergeben bekommt und ihn dann mit Hilfe obiger
toStringInorder-Methode(n) auf der Konsole ausgibt. (3 Punkte)

c) Angenommen ein BB-Objekt bb würde erzeugt und mit n Elementen gefüllt werden. Welche
Komplexität in O-Notation hätte dann der Aufruf pio(bb)? Begründen Sie! (2 Punkte)

d) Bis zu 5 Zusatzpunkte erhalten Sie für die Implementierung einer öffentlichen Objektmethode
has(char c)in obiger BB-Klasse, welche prüft, ob ein Zeichen c in BB gespeichert ist. Der
Rückgabewert sei true, wenn c gefunden wurde, andernfalls false. Bei Bedarf (z.B. für eine
rekursive Lösung) können auch mehrere Methoden definiert werden. (+5 Punkte)
AuP, 2020-02-19, Seite 12 von 12

Reserveblatt, Nutzung nur im Notfall!

Das könnte Ihnen auch gefallen