Teil 1 - Hochschule der Medien

Werbung
Hochschule der Medien
Stuttgart
Prof. Uwe Schulz
Klausur Informatik 2, EDV-Nr. 40303/42022
Name:
Teil 1:
Keine Hilfsmittel
Bearbeitungszeit:
20 Minuten
31. Januar 2006
von 2
Seite 1
Matr. Nr.:
Punkte
Note
1 (4P)
Teil 1
2 (4P)
Teil 2
3 (5P)
Summe
4 (4P)
Bitte verwenden Sie nur den vorhandenen Platz für Ihre Lösung!
1. Schreiben Sie die Klasse Echo4Mal, die
EchoGeber erweitert und EchoListener
implementiert.
Ein Echo4Mal Objekt soll beim Auftreten eines
Echo-Ereignisses die Zeichenkette schall viermal
auf der Standardausgabe ausgeben.
Frage Punkte
5 (3P)
interface EchoListener{
public void echoGehoert(String schall);
}
abstract class EchoGeber{
private int anzahl;
public EchoGeber(int anzahl){
this.anzahl = anzahl;
}
protected void echoGeben(String schall){
for(int i=0;i<anzahl;i++)
System.out.println(schall);
}
}
class Echo4Mal extends EchoGeber implements EchoListener{
Echo4Mal(){
super(4);
}
public void echoGehoert(String schall){
echoGeben(schall);
}
}
2. Was versteht man unter dem Begriff Zuweisungskompatibilität.
1. Variablen vom Typ einer Basisklasse können auf Objekte von Klassen zeigen,
welche von der Basisklasse abgeleitet sind.
2. Variablen vom Typ eines Interface können auch auf Objekte von Klassen
zeigen, welche das Interface implementieren.
Hochschule der Medien
Stuttgart
Prof. Uwe Schulz
Klausur Informatik 2, EDV-Nr. 40303/42022
31. Januar 2006
von 2
Seite 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:
Wenn die Basisklasse keinen Standardkonstruktor hat, muss in einer abgeleiteten
Klasse ein Konstruktor programmiert werden.
Eine statische Methode kann gerufen werden, ohne dass ein Objekt der Klasse
existiert.
Von einer abstrakten Klasse können keine Klassen abgeleitet werden.
Die Suche in einer sortierten Liste lässt sich durch einen Algorithmus der
Ordnung O(log N) durchführen.
In einem AVL Baum gilt für jeden Knoten: die Tiefen seiner Teilbäume
unterscheiden sich höchstens um 1.
Je höher die Ordnung eine Algorithmus ist, desto größer ist die
Wahrscheinlichkeit, dass er in endlicher Zeit fertig wird.
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 binären Suchbaum enthält die Wurzel das kleinste Element.
Die Komplexität der Zugriffsmethoden zu einem Stack [ void push(Object O) und
Object pop() ] hat die Ordnung O(1).
Eine doppelt verkettete Liste enthält doppelt so viele Einträge wie eine gleich
lange einfach verkette Liste.
4. Die nebenstehende
Methode implementiert
die DCT für einen
quadratischen
Ausschnitt eines Bildes
mit n*n Pixeln. Welche
Ordnung hat dieser
Algorithmus bezogen
auf n (Anzahl Pixel pro
Zeile bzw. Spalte)?
richtig
falsch
public static void dctTransformation(double[][] a,double[][] b){
int n=a.length;
for(int u=0; u<n; u++)
for(int v=0; v<n; v++)
b[u][v] = dctWert(a,u,v);
}
private static double dctWert(double[][] a, int u, int v){
int n=a.length;
double f=0.0;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
f+=a[i][j]*Math.cos(0.5*Math.PI*(double)(u*(2*i+1))/(double)n)
*Math.cos(0.5*Math.PI*(double)(v*(2*j+1))/(double)n);
return f;
}
O(N4)
5. Schreiben Sie eine von JButton abgeleitete Klasse, die einen Knopf mit der Aufschrift „Nicht Klicken“
implementiert, der beim Klick den Text „Du sollst doch nicht Klicken“ auf der Standardausgabe
ausgibt.
public class F5 extends JButton implements ActionListener{
public F5(){
super("Nicht Klicken");
addActionListener(this);
}
public void actionPerformed(ActionEvent e){
JOptionPane.showMessageDialog(null, "Du sollst doch nicht Klicken!");
}
}
Fachhochschule Stuttgart
Hochschule der Medien
Prof. Uwe Schulz
Klausur Informatik 2, EDV-Nr. 40303/ 42022
Name:
31. Januar 2006
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 Programm: Charts
15
2
grafische Anwendung
25
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!
.
Fachhochschule Stuttgart
Hochschule der Medien
Prof. Uwe Schulz
Klausur Informatik 2, EDV-Nr. 40303/ 42022
Datei charts.dat
Aufgabe 1 (15 Punkte):
Die Datei charts.dat enthält die Interpreten
und Titel der aktuellen Charts sowie die
Anzahl Stimmen, die jeder Titel bei einer
Web-Abstimmung erhalten hat. Eine Zeile
enthält jeweils einen Titel, die Bestandteile
sind durch senkrechte Striche getrennt.
31. Januar 2006
Seite 2 von 4
Madonna |
Lee Ryan|
Rasmus |
Mattafix|
Schreiben Sie eine Java-Anwendung, welche die Titel in
der Reihenfolge abnehmender Stimmen ausgibt. Für die
nebenstehende Datei charts.dat soll das Programm die
nebenstehende Ausgabe erzeugen.
Sorry
Turn your car around
Sail away
Big city life
|
|
|
|
1543
2834
2230
1844
Die aktuellen Top-Titel:
1. Lee Ryan: Turn your car around
2. Rasmus: Sail away
3. Mattafix: Big city life
4. Madonna: Sorry
Die Methode Integer.parseInt(String) wandelt
eine Zeichenkette in eine Zahl.
Hinweis: - Sie können alle Klassen aus den Übungen verwenden, ohne sie Ihrer Lösung beizulegen.
- Es ist hilfreich, eine Klasse Song zu schreiben, die Comparable implementiert.
- Eine Kurzreferenz der wichtigsten Klassen liegt der klausur bei.
public class Aufgabe1 {
public static void main(String[] a){
Vector<Song> songs = new Vector();
try{
LineNumberReader r = new LineNumberReader(new FileReader("charts.dat"));
String zeile;
while((zeile=r.readLine())!=null){
songs.add(new Song(zeile));
}
Collections.sort(songs);
System.out.println("Die aktuellen Top-Titel:\n");
int n=1;
for(Song s:songs) System.out.println((n++)+": "+s);
}catch(Exception e){
e.printStackTrace();
}
}
}
class Song implements Comparable{
private int stimmen;
private String interpret, titel;
public Song(String zeile){
StringTokenizer st = new StringTokenizer(zeile,"|");
interpret = st.nextToken().trim();
titel = st.nextToken().trim();
stimmen = Integer.parseInt(st.nextToken().trim());
}
public int compareTo(Object x){
Song s =(Song) x;
if(this.stimmen>s.stimmen) return -1;
else if(this.stimmen==s.stimmen) return 0;
else return 1;
}
public String toString(){
return interpret+": "+titel;
}
}
Benutzen Sie für Ihre Lösung auch die Rückseite des vorherigen Blattes!
.
Fachhochschule Stuttgart
Hochschule der Medien
Prof. Uwe Schulz
Klausur Informatik 2, EDV-Nr. 40303/ 42022
Aufgabe 2 (25 Punkte):
Schreiben Sie eine grafische Anwendung, die
einen Button und zwei Textfelder enthält.
Zunächst trägt der Button die Aufschrift
„Start“ und das untere Textfeld zeigt den
nebenstehenden Text. Beide Textfelder sind
in diesem Zustand nicht editierbar.
Wird der Start-Knopf gedrückt, wechselt
seine Aufschrift zu „Fertig“, das obere
Textfeld wird editierbar und ein Timer startet,
der die Sekunden zählt.
Ein weiterer Klick auf den Knopf stoppt den
Timer und gibt im unteren Textfeld die
Anzahl der geschriebenen Worte sowie die
dazu benötigte Zeit aus. Worte werden durch
Leerzeichen, Komma, Semikolon sowie
Zeilenumbruch getrennt.
Eine Kurzbeschreibung der notwendigen
Klassen und Interfaces sind der Klausur
beigefügt.
Das Layout der Anwendung spielt keine
Rolle, Sie können alle Elemente auf einem
Panel unterbringen!
Benutzen Sie für Ihre Lösung auch die Rückseite des vorherigen Blattes!
.
31. Januar 2006
Seite 3 von 4
Fachhochschule Stuttgart
Hochschule der Medien
Prof. Uwe Schulz
Klausur Informatik 2, EDV-Nr. 40303/ 42022
31. Januar 2006
Seite 4 von 4
public class Aufgabe2 extends JFrame{
public static void main(String[] a){
new Aufgabe2();
}
Aufgabe2(){
setSize(400,600);
getContentPane().add(new GedichtAufZeitPanel());
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
}
class GedichtAufZeitPanel extends Box implements ActionListener{
private JTextArea eingabe = new JTextArea(), ausgabe=new JTextArea();
private JButton knopf = new JButton("Start");
private Timer timer;
private int zeit=0;
GedichtAufZeitPanel(){
super(BoxLayout.Y_AXIS);
add(knopf);
ausgabe.setText("Druecke den Start-Knopf und schreibe ein Gedicht. ");
ausgabe.append("\nSobald Du fertig bist, druecke den Knopf wieder.");
ausgabe.append("\nDu erhaelst die Zeit sowie die zahl der Worte.");
ausgabe.setEditable(false);
eingabe.setEditable(false);
add(new JScrollPane(eingabe));
add(new JScrollPane(ausgabe));
knopf.addActionListener(this);
timer = new Timer(1000, new Tick());
}
public void actionPerformed(ActionEvent e){
if("Start".equals(knopf.getText())){
zeit=0;
knopf.setText("Fertig");
timer.start();
eingabe.setEditable(true);
eingabe.setText("");
}else{
knopf.setText("Start");
timer.stop();
eingabe.setEnabled(false);
StringTokenizer st = new StringTokenizer(eingabe.getText()," ,;.\n");
ausgabe.setText("Das waren "+st.countTokens()+" Worte in "+zeit+"Sekunden");
}
}
class Tick implements ActionListener{
public void actionPerformed(ActionEvent e){
zeit++;
}
}
}
Benutzen Sie für Ihre Lösung auch die Rückseite des vorherigen Blattes!
.
Kurzreferenz der wichtigsten Klassen und Methoden
Klassen
JButton (java.lang.Object / java.awt.Component / java.awt.Container / javax.swing.JComponent / javax.swing.AbstractButton)
JButton(String t)
Void addActionListener(ActionListener a)*
Erzeugt JButton mit der Aufschrift t
Registriert den ActionListener a
JFrame
(java.lang.Object / java.awt.Component / java.awt.Container / java.awt.Window / java.awt.Frame)
Frame()
Erzeugt standard-Frame
Frame(String t)
Erzeugt Frame mit dem Titel t
void setSize(int b, int h)
Breite und Höhe festlegen
void setDefaultCloseOperation(int o)
Legt fest, was beim Schließen des Fensters passiert
(z.B. EXIT_ON_CLOSE)
Container getContentPane()
Gibt die Content-Pane des Frames zurück.
JMenuBar getJMenuBar()
Gibt die Menüleiste des Frames zurück.
void setVisible(boolean v)*
Legt fest, ob der Frame gezeigt wird.
JLabel (java.lang.Object / java.awt.Component / java.awt.Container / javax.swing.JComponent)
JLabel(String t)
String getText()
void setText(String t)
void setHorizontalAlignment(int a)
Erzeugt JLabel mit der Aufschrift t
Gibt den Inhalt des JLabels zurück
Schreibt den Text t
Legt die horizontale Ausrichtung fest (z.b. JLabel.RIGHT)
JPanel (java.lang.Object / java.awt.Component / java.awt.Container / javax.swing.JComponent)
JPanel()
void add(Container c)
void addMouseListener(MouseListener m)
void addMouseMotionListener(MouseMotionListener m)
Erzeugt ein standard Panel
Legt den Container c auf das Panel
Registriert den MouseListener m
Registriert den MouseMotionListener m
JTextArea (java.lang.Object / java.awt.Component / java.awt.Container / javax.swing.JComponent / javax.swing.JTextComponent)
JTextArea(int z, int s)
JTextArea(String t, int z, int s)
void append(String t)
String getText()*
void setText(String t)*
void setEditable(boolean etb)
Erzeugt JTextArea mit z Zeilen und s Spalten
Erzeugt JTextArea mit z Zeilen und s Spalten und dem
Anfangstext t
Erweitert den Text in der Textrea um t
Gibt den Inhalt der TextArea zurück
Schreibt den Text t in die TextArea
Legt fest, ob Inhalt editierbar ist
JTextField (java.lang.Object / java.awt.Component / java.awt.Container / javax.swing.JComponent / javax.swing.JTextComponent)
JTextField(int n)
JTextField(String t)
JTextField(String t, int n)
String getText()*
void setText(String t)*
void setHorizontalAlignment(int a)
Erzeugt JTextField der Breite n
Erzeugt JTextField mit dem Anfangstext t
Erzeugt JTextField mit dem Anfangstext t der Breite n
Gibt den Inhalt des Textfeldes zurück
Schreibt den Text t in das Textfeld
Legt die horizontale Ausrichtung fest (z.b. JTextField.RIGHT)
javax.swing.JTextArea
JTextArea(int rows, int cols)
void setText(String s)
void append(String s)
Erzeugt eine TextArea mit rows Zeilen und cols Spalten
Setzt s als Text
Hängt s an den Text an
Javax.swing.JScrollPane
JScrollPane(Component view)
Erzeugt eine ScrollPane mit view als Viewport
Javax.swing.Timer
Timer(int m, ActionListener a)
void addActionListener(ActionListener a)
boolean isRunning()
void start()
void stop()
Erzeugt einen Timer mit einem Intervall von m Millisekunden und
registriert a als ActionListener. a darf null sein.
Registriert den ActionListener a
Gibt true zurück, wenn der Timer gestartet ist
Startet den Timer
Stoppt den Timer
java.util.StringTokenizer
StringTokenizer (String text)
StringTokenizer (String text, String trenner)
int countTokens()
String nextToken()
boolean hasMoreTokens()
Erzeugt StringTokenizer, der text zerlegt, Trennzeichen " \t\n\r\f"
Erzeugt StringTokenizer, der text zerlegt, Trennzeichen aus trenner
Liefert Anzahl Tokens
Liefert nächstes Token
Liefert true, wenn noch weitere Tokens da sind
java.io.LineNumberReader
LineNumberReader( Reader e)
String readLine()
Erzeugt einen LineNumberReader
Liefert nächste Zeile oder null am Ende der Eingabe
java.io.FileReader
FileReader(File f)
FileReader(String name)
Erzeugt einen FileReader, der aus Datei f liest
Erzeugt einen FileReader, der aus Datei mit Namen name liest
Interfaces
java.awt.event.ActionListener
public void actionPerformed ActionEvent e)
Reagiert auf das registrierte Ereignis
java.lang.Comparable
public int compareTo(Object x)
Liefert -1 wenn this<x, 0 wenn this==x und 1 wenn this>x
Herunterladen