Teil 1: Keine Hilfsmittel Bearbeitungszeit: 20 Minuten

Werbung
Hochschule der Medien
Stuttgart
Prof. Uwe Schulz
Klausur Informatik 2, EDV-Nr. 40303/42022
Name:
1 . Februar 2007
Seite 1 von 2
Matr. Nr.:
Teil 1:
Keine Hilfsmittel
Bearbeitungszeit:
20 Minuten
Frage Punkte
Punkte
Note
1 (4P)
Teil 1
2 (3P)
Teil 2
3 (5P)
Summe
4 (4P)
5 (4P)
Bitte verwenden Sie nur den vorhandenen Platz für Ihre Lösung!
1. Zeigen Sie, dass der untenstehende Suchbaum die AVL-Bedingung verletzt und überführen Sie ihn in
einen AVL-Baum.
Die AVL Bedingung ist z. B. im Teilbaum „R“ verletzt, weil der linke
Teilbaum die Tiefe 2, der rechte die Tiefe 0 hat.
G
Durch Rechtsrotation von R entsteht ein AVL Baum:
A
R
G
O
H
A
O
H
R
2. Erklären Sie die Datenstruktur Heap. Wozu kann man einen Heap einsetzen?
Ein Heap ist ein vollständiger Binärbaum, bei dem die Wurzel immer das größte (kleinste) Element
ist. Jeder knoten im Heap ist größer-gleich(kleiner-gleich) als seine Kinder.
Ein neues Element wird immer an der ersten freien Stelle in der untersten Ebene eingefügt. Nach
dem Einfügen wird das neue Element entlang seines absoluten Pfades soweit wie nötig nach oben
verschoben, bis es größer ist als seine Kinder (upHeap).
Nur die Wurzel kann aus dem Heap entfernt werden, sie wird zunächst durch den letzten Knoten
ersetzt, dieser wandert durch Vertauschen mit dem jeweils größten Kind so lange nach unten, bis er
kleiner als sein Vater ist (downHeap).
Einfügen und Entfernen haben O(log N).
Ein Heap implementiert eine Prioritätswarteschlange (priority queue), z.B. für die Verwaltung von
Ressourcen oder Prozessen.
Hochschule der Medien
Stuttgart
Prof. Uwe Schulz
Klausur Informatik 2, EDV-Nr. 40303/42022
1 . Februar 2007
Seite 2 von 2
3. Nicht raten: jede richtige Antwort gibt 1/2 Punkt, jede falsche Antwort ¼ Punkt Abzug!
Die Fragen zum Programmieren beziehen sich auf die Sprache Java:
richtig
falsch
Eine von eine abstrakten Klasse abgeleitete Klasse muss entweder alle
abstrakten Methoden implementieren oder selbst abstrakt sein.
Eine statische Eigenschaft kann von allen statische Methoden und allen
Instanzmethoden verwendet werden.
Von einer abstrakten Klasse können keine Instanzen erzeugt werden.
X
฀
X
฀
X
฀
Die Datenstruktur Stack wird auch als LIFO (last in First Out) bezeichnet.
X
฀
In einem binären Suchbaum gilt für jeden Knoten: die Tiefen seiner Teilbäume
unterscheiden sich höchstens um 1.
Die Ordnung der Komplexität eine Algorithmus ist ein Maß dafür, wie stark der
Aufwand mit der Anzahl der Daten steigt.
Eine Referenz vom Typ eines Interfaces kann auf ein Objekt verweisen, wenn die
Klasse, zu der das Objekt gehört, das Interface implementiert.
In einem Heap enthält die Wurzel das kleinste Element.
฀
X
X
฀
X
฀
X
฀
X
฀
X
฀
Die Komplexität der Zugriffsmethoden zu einer Queue (enQueue / deQueue) hat
die Ordnung O(1).
Der Zugriff auf ein Element einer sortierten doppelt verkette Liste hat die
Ordnung O(log N).
4. Implementieren Sie die Klasse Fichte, welche das nebenstehende
Interface Baum implementiert. Zählen sie mit, wie viele Fichten es
gibt und schreiben Sie eine Methode, welche die Anzahl Fichten
liefert.
public interface Baum{
public void wachsen(int delta);
public int getLaenge();
}
class Fichte implements Baum{
private int laenge;
private static int anzahl = 0;
public Fichte(){ anzahl++; }
public void wachsen(int delta){ laenge+=delta; }
public int getLaenge(){ return laenge; }
public static int anzahlFichten(){ return anzahl; }
}
5. Schreiben Sie eine von JPanel abgeleitete Klasse, die auf der Oberfläche mit einem Knopf mit der
Aufschrift „Nicht Aktiv“ implementiert. Beim Klick auf den Knopf soll nichts passieren.
class KnopfPanel extends JPanel{
Knopfpanel(){
add(new JButton(“Nicht aktiv”);
}
}
Hochschule der Medien
Stuttgart
Prof. Uwe Schulz
Klausur Informatik 2, EDV-Nr. 40303/ 42022
Name:
1. Februar 2007
Seite 1 von 4
Matr. Nr.:
Teil 2: Aufgaben
Hilfsmittel:
Bearbeitungszeit:
Aufgabe
alle außer tragbare Computer und Nachbar
40 Minuten
Stichwort
Punkte
1
Java-Methode – Array bearbeiten
10
2
Java Programm Datei analysieren
30
Summe (ein Punkt = 1 Minute)
40
Hinweis: Bitte benutzen Sie den vorgesehenen Raum einschließlich der Rückseiten für Ihre
Lösungen. Sollte der Platz nicht ausreichen, nehmen Sie freie Blätter hinzu aber
versehen Sie jedes Blatt mit Ihrem Namen, Matrikel Nr. und der Nummer der
beantworteten Aufgabe.
Aufgabe
Punkte
1
2
Summe
Benutzen Sie für Ihre Lösung auch die Rückseite des vorherigen Blattes!
.
Hochschule der Medien
Stuttgart
Prof. Uwe Schulz
Klausur Informatik 2, EDV-Nr. 40303/ 42022
1. Februar 2007
Seite 2 von 4
Aufgabe 1 (10 Punkte):
Schreiben Sie die Java-Methode
int[] verdopple(int[] x)
die einen neuen Array vom Typ int erzeugt, der die doppelte Länge von x hat und dessen untere Hälfte
die Elemente von x enthält.
int[] verdopple (int[] x){
int[] neu = new int[2*x.length];
for(int i=0;i<x.length;i++) neu[i] = x[i];
return neu;
}
Benutzen Sie für Ihre Lösung auch die Rückseite des vorherigen Blattes!
.
Hochschule der Medien
Stuttgart
Prof. Uwe Schulz
Klausur Informatik 2, EDV-Nr. 40303/ 42022
Aufgabe 2 (30 Punkte):
Schreiben Sie nebenstehende Java-Anwendung, welche
die Worte in einer Datei in alphabetischer Reihenfolge in
einer Text-Area ausgibt. Die zu öffnende Datei soll über
einen Button „Datei Öffnen“ mit Hilfe eines JFileChooser
Objekts geöffnet werden.
Hinweis: Sie können alle Klassen aus den Übungen
verwenden, ohne sie Ihrer Lösung beizulegen.
Eine Kurzreferenz der wichtigsten Klassen liegt der Klausur
bei.
Benutzen Sie für Ihre Lösung auch die Rückseite des vorherigen Blattes!
.
1. Februar 2007
Seite 3 von 4
Hochschule der Medien
Stuttgart
Prof. Uwe Schulz
Klausur Informatik 2, EDV-Nr. 40303/ 42022
1. Februar 2007
Seite 4 von 4
public class Aufgabe2 extends JFrame{
public static void main(String[] a){
new Aufgabe2();
}
public Aufgabe2(){
setSize(400,500);
getContentPane().add(new WortePanel());
setVisible(true);
}
}
class WortePanel extends JPanel implements ActionListener{
private JButton knopf = new JButton("Datei Oeffnen");
private JTextArea ausgabe = new JTextArea(10,10);
WortePanel(){
JPanel oben = new JPanel();
oben.add(new JLabel("Worte in Datei alphabetisch ausgeben"));
oben.add(knopf);
knopf.addActionListener(this);
this.setLayout(new BorderLayout());
this.add(oben,BorderLayout.NORTH);
JPanel unten = new JPanel();
unten.setLayout(new BorderLayout());
unten.add(new JScrollPane(ausgabe));
this.add(unten,BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent e){
JFileChooser fc = new JFileChooser();
if(fc.showOpenDialog(this)==JFileChooser.APPROVE_OPTION){
File datei=fc.getSelectedFile();
try {
SuchBaum s = new SuchBaum(); // Aus Übungen
LineNumberReader lr = new LineNumberReader(new FileReader(datei));
String zeile;
while((zeile=lr.readLine())!=null){
StringTokenizer st = new StringTokenizer(zeile," (),;!\"'-/0123456789.=:[]{}#");
while(st.hasMoreTokens())s.einfuegen(st.nextToken().toLowerCase());
}
ausgabe.setText("");
s.inOrder(new Ausgeben());
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}catch (IOException e2) {
e2.printStackTrace();
}
}
}
class Ausgeben implements Iteration{
public void bearbeite(Object x){
ausgabe.append(x+"\n");
}
}
}
Benutzen Sie für Ihre Lösung auch die Rückseite des vorherigen Blattes!
.
Herunterladen