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! .