• Keine Ergebnisse gefunden

Programmieren II

N/A
N/A
Protected

Academic year: 2022

Aktie "Programmieren II"

Copied!
7
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 5. Juli 2013

Programmieren II

Übungsklausur Hinweise:

• Bringen Sie zur Klausur Ihren Ausweis und Ihren Studierendenausweis mit.

• Ihren Raum erfahren Sie ca. eine Woche vor der Klausur auf der Web-Seite dieser Veranstaltung.

• Während der Klausur dürfen Sie keine Unterlagen benutzen.

• Eine Übungsklausur kann aus Umfangsgründen nicht den gesamten Stoff der Vorle- sung abdecken.

Aufgabe 1: (Aufzählungstypen, Pakete, Annotationen, Parallelprogrammierung) Bitte kreuzen Sie an. Alle Fragen dieser Aufgabe beziehen sich auf Java.

wahr falsch Von Enum-Klassen können mit Konstruktoren Objekte erzeugt werden.

Werte von Enum-Klassen können als Marken

inSwitch-Anweisungen verwendet werden.

Durch eine statische Import-Anweisung können Konstanten

aus Schnittstellen importiert werden.

Alle Klassen des Pakets java.langkönnen mit

unqualifizierten Namen verwendet werden.

Im Unterschied zu Modifikatoren können Annotationen

vom Programmierer selbst definiert werden.

Die Attribute einer Annotation müssen vom Typ Stringsein.

Eine binäre Semaphore kann nur die Werte −1 und +1 annehmen.

Unter einer Transaktion versteht man eine Aktion,

die niemals vollständig zu Ende ausgeführt werden darf.

(2)

Aufgabe 2: (Generizität) Gegeben seien die Methode 01 public static void sort (char[] a) {

02 assert a!= null && a.length > 0;

03 for (int j=1; j<=a.length-1; j++) { 04 char k=a[j];

05 int i=j-1;

06 while (i>=0 && a[i]>k) { 07 a[i+1]=a[i];

08 i--;

09 }

10 a[i+1]=k;

11 } 12 }

und die Anweisungen

13 char[] a = {’g’,’j’,’z’,’f’,’e’};

14 sort(a);

a) Schreiben Sie die Methode als generische Methode, die als Parameter ein Feld von Elementen eines TypsT erhält. Stellen Sie sicher, dassT die benötigten Operationen besitzt, so dass beim Übersetzen keine Fehlermeldungen oder Warnungen entstehen.

Geben Sie nur die Zeilen an, die sich geändert haben.

b) Können die Zeilen 13 und 14 unverändert übernommen werden? Wie müssen diese Zeilen ggf. abgeändert werden?

(3)

Aufgabe 3: (Programmverständnis) Das folgende Programmfragment wurde in der Vor- lesung (mit anderen Zahlenwerten) besprochen. Es benutzt eine zirkuläre Liste.

class Node { int val;

Node next;

Node(int val) { this.val = val;

} }

class Josephus {

public static void main(String[] args) { int n = 10,

m = 4;

Node t = new Node(2), x = t;

for (int i = 4; i <= n; i++) x = (x.next = new Node(i));

x.next = t;

System.out.print(x.val); // (*) while (x != x.next) {

for (int i = 1; i < m; i++) x = x.next;

System.out.print(" " + x.val);

x.next = x.next.next;

}

System.out.println();

System.out.println(x.val + " ist der/die Anführer(in).");

} }

a) Welche Elemente besitzt die Liste zur Zeit der Ausführung von (*)?

b) Was gibt das Programm aus?

– 3 –

(4)

Aufgabe 4: (Zuverlässigkeit von Programmen) Gegeben sei die folgende Java-Methode:

static int f(int m, int n) {

assert m <= n; // Vorbedingung P int s = m+n,

i = m;

assert ... // Schleifeninvariante Q while ( i <= n ) {

s = s - 2*i;

i = i + 1;

assert ... // Schleifeninvariante Q }

assert ... // Nachbedingung R return s;

}

a) Welchen Wert berechnet diese Methode? Formulieren Sie eine entsprechende Nach- bedingungR.

b) Geben Sie eine geeignete Schleifeninvariante Qan, mit deren Hilfe die partielle Kor- rektheit der Methode bezüglich P und R nachgewiesen werden kann. Sie brauchen den Nachweis nicht zu führen.

c) Formulieren Sie Q und R als Java-Ausdrücke, sodass diese in den obigen assert- Anweisungen verwendet werden können.

Aufgabe 5: (Zuverlässigkeit von Programmen) Welche der beiden folgenden Regeln zum Nachweis der partiellen Korrektheit sind korrekt?

{p} S {r}, rep, r∧ ¬e→q {p} while e do S od {q}

{p} S {r}, rep, r∧ ¬e →q {p} while e∨ ¬e do S od {q}

(5)

Aufgabe 6: (Datenstrukturen) Gegeben seien die folgenden Klassen Node und Tree zur Implementierung binärer Suchbäume:

public class Node { public int wert;

public Tree links, rechts;

public Node(int wert) { this.wert = wert;

this.links = new Tree();

this.rechts = new Tree();

} }

public class Tree {

private Node wurzel = null;

public boolean isEmpty() { return wurzel == null;

}

public void insert(int x) { if (isEmpty())

wurzel = new Node(x);

else

if (x <= wurzel.wert) wurzel.links.insert(x);

else

wurzel.rechts.insert(x);

}

public String toString() { if (isEmpty())

return ":";

else

return "|"+wurzel.wert+

wurzel.links+wurzel.rechts+"";

} }

Unter der Spanne eines Suchbaums ver- steht man die Differenz zwischen dem Maxi- mum und dem Minimum der Werte der Kno- ten des Suchbaums. Beispielsweise besitzt der rechte Suchbaum drei nichtleere Knoten und die Spanne 5 = 9−4.

4

9

7

a) Was gibt das folgende Programmfragment aus?

Tree t = new Tree();

t.insert(5); t.insert(6); t.insert(5);

t.insert(3); t.insert(2); t.insert(4);

System.out.println(t);

– 5 –

(6)

b) Zeichnen Sie den Graphen des Baums aus a) wie im obigen Beispiel.

c) Schreiben Sie eine Methode int anzahl(), die die Anzahl der nichtleeren Knoten des aktuellen Baums liefert. Durch die Berechnung darf der Baum nicht verändert werden.

d) Schreiben Sie eine Methode int spanne(), die die Spanne des aktuellen Baums berechnet. Falls der Baum leer ist, soll der Wert 0 zurückgegeben werden. Durch die Berechnung darf der Baum nicht verändert werden.

Aufgabe 7: Beschreiben Sie kurz die Aufgaben der folgenden Klassen/Schnittstellen der Swing-Bibliothek bzw. des Java Collection Frameworks.

JLabel: Darstellung von Texten und Bildern JComboBox:

JList:

JTextField:

JScrollbar:

Collection: Zusammenfassung von endlich vielen Elementen zu einer Einheit Set:

SortedSet:

List:

(7)

Aufgabe 8: (Programmkorrektur, Grafikprogrammierung) Bei der Ausführung des folgen- den Programms soll ein JFrame geöffnet werden, das einen JButton im oberen Fensterteil enthält. Bei Betätigung des JButtons soll die Hintergrundfarbe blau werden. Das Pro- gramm enthält Fehler.

import java.awt.event.*;

import javax.swing.*;

public class Test extends JFrame { JButton button;

public Test() {

c = getContentPane();

button = new JButton("TestButton");

c.add(button, BorderLayout.SOUTH);

Listener l = new Listener();

button.addActionListener(l);

}

class Listener implements ActionListener { public void actionPerformed(ActionEvent e) {

Color farbe = new Color(000,255,000);

c.setBackground(farbe);

} }

public static void main(String[] args) { Test t = new Test();

t.setTitle("TestFrame");

t.setSize(400,200);

t.setLocation(200,200);

t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

} }

Korrigieren Sie das Programm.

– 7 –

Referenzen

ÄHNLICHE DOKUMENTE

Als Fortzug über die Kreisgrenze gilt, wenn jemand innerhalb des Bundesgebiets umzieht und dieser Umzug in dem Kreis, in dem er sich anmeldet, als Zuzug gilt oder wenn sich jemand aus

letzte Aktualisierung: 05.08.2010 nächste Aktualisierung: 09./10.2011. Quelle: Statistisches

Als Fortzug über die Kreisgrenze gilt, wenn jemand innerhalb des Bundesgebiets umzieht und dieser Umzug in dem Kreis, in dem er sich anmeldet, als Zuzug gilt oder wenn sich jemand aus

Als Fortzug über die Kreisgrenze gilt, wenn jemand innerhalb des Bundesgebiets umzieht und dieser Umzug in dem Kreis, in dem er sich anmeldet, als Zuzug gilt oder wenn sich jemand

Als Fortzug über die Kreisgrenze gilt, wenn jemand innerhalb des Bundesgebiets umzieht und dieser Umzug in dem Kreis, in dem er sich anmeldet, als Zuzug gilt oder wenn sich jemand

Als Fortzug über die Kreisgrenze gilt, wenn jemand innerhalb des Bundesgebiets umzieht und dieser Umzug in dem Kreis, in dem er sich anmeldet, als Zuzug gilt oder wenn sich jemand

Als Fortzug über die Kreisgrenze gilt, wenn jemand innerhalb des Bundesgebiets umzieht und dieser Umzug in dem Kreis, in dem er sich anmeldet, als Zuzug gilt oder wenn sich jemand

Die getroffene Vereinbarung zur Honorierung ambulanter ärztlicher Leistungen im PKV- Basistarif, der eine Vergütung für den Großteil der ärztlichen Leistungen zu einem