JAVA für Nichtinformatiker - Probeklausur - Die folgenden Aufgaben sollten in 150 Minuten bearbeitet werden. Aufgabe 1: Erläutere kurz die Bedeutung der folgenden Java-Schlüsselwörter und gib Sie jeweils ein Beispiel für ihre Verwendung an. (a) int Lösung: int ist die Bezeichnung des Datentyps Integer, der ganze Zahlen repräsentiert. Beispiel: Der Befehl int n = 5; deklariert eine Variable n vom Typ int und initialisiert sie auf den Wert 5. (b) return _ (c) void _ (d) extends _ Aufgabe 2: Betrachte den folgenden Ausschnitt eines Java-Programms. int a = 2, b = 5; boolean g = false ; g = g (--a * b == b); if (g) b += a + 3;
a = b; b = a; Std. out. print ("a = " + a + ", b = " + b + ", g = " + g); Wie lautet die Ausgabe? a =, b =, g = Aufgabe 3: Betrachte den folgenden Ausschnitt eines Java-Programms. int [] vec = 1,2,3,4,5; for ( int i = 3; i < 7; i ++) if (i%2 == 0) continue ; vec [i -2] *= vec [i -3]; Welche Werte enthält der Array vec am Ende der Ausführung? v[0] =, v[1] =, v[2] =, v[3] =, v[4] = Aufgabe 4: public int quadrate () Std. out. print (" Bitte eine Zahl n >0 eingeben : n="); int n = Std.in. readint () Std. out. print (" Die ersten " n " Quadratzahlen : "); for (i = 0; i < n; i ++); Std. out. print (i*i + " "); Die obige Java-Methode soll eine positive ganze Zahl n von der Tastatur einlesen und anschließend die Quadratzahlen 1 2,..., n 2 auf dem Bildschirm ausgeben. Die Ausgabe soll wie folgt aussehen: Bitte eine Zahl n>0 eingeben: n=5 Die ersten 5 Quadratzahlen: 1 4 9 16 25 Allerdings haben sich im obigen Quelltext einige Fehler eingeschlichen. (a) Unterstreiche alle Fehler im Quelltext. (b) Gib eine korrigierte Fassung der Methode an. Page 2
_ Aufgabe 5: Die folgende Methode erhält eine positive ganze Zahl n als Parameter und gibt die Zahlen von 1 bis n auf dem Bildschirm aus. public void zahlen_for ( int n) for ( int i = 1; i <= n; i ++) Std. out. println (i); (a) Implementiere eine dazu äquivalente Methode public void zahlen while(int n), die mit einer while-schleife anstelle eine for-schleife operiert. public int zahlen_while ( int n) (b) Implementiere eine weitere dazu äquivalente Methode public void zahlen rek(int n), die rekursiv arbeitet (die Methode soll also keine Schleife enthalten). public int zahlen_rek ( int n) Aufgabe 6: Die Fibonacci-Zahlen f 0, f 1, f 2, f 3,... sind durch die Rekursionsvorschrift gegeben. (a) Berechne f 6. Lösung: f 0 = 0 f 1 = 1 f n = f n 1 + f n 2 für n 2 (b) Schreibe Sie eine Java-Methode public int fib rek(int n), die zu einer gegebenen Zahl n 0 die Fibonacci-Zahl f n rekursiv berechnet und zurückgibt. Page 3
public int fib_ rek ( int n) (c) Schreibe eine Java-Methode public int fib it(int n), die zu einer gegebenen Zahl n 0 die Fibonacci-Zahl f n iterativ (d.h. ohne Rekursion) berechnet und zurückgibt. public int fib_ it ( int n) Aufgabe 7: Die Quersumme einer natürlichen Zahl ist die Summe ihrer Ziffern. (Beispiel: Die Quersumme von 2634 ist 2+6+3+4 = 15). Schreibe eine Java-Methode public int quersumme(int n), die zu einer gegebenen Zahl n 0 die Quersumme berechnet und zurückgibt. public int quersumme ( int n) Page 4
Aufgabe 8: Betrachte die folgenden vier Java-Klassen: public class A public int x; public A( int x) this.x = x; Std. out. println (" Erzeuge A- Objekt "); public void foo ( int n) for ( int i = 0; i < n; i ++) for ( int j = 0; j < n; j ++) x ++; Std. out. println (x); public class B extends A public B( int x) super (x); Std. out. println (" Erzeuge B- Objekt "); public void increment ( int y) y ++; public class C extends B public C( int x) super (x); Std. out. println (" Erzeuge C- Objekt "); Page 5
public void foo ( int n) while ((n > 0) && (x-- >= 0)) ; Std. out. println (x); public class TestABC public static void main ( String [] args ) A a = new A (1); B b = new B (0); C c = new C (5); b. foo (50); c. foo (50); int y = 5; b. increment (y); Std. out. println (y); (a) Welche Bildschirmausgabe produziert die Ausführung der Klasse TestABC? _ (b) Welche der in den Klassen A, B und C vorkommenden Methoden kann man mit dem Schlüsselwort static versehen, ohne einen Compilerfehler zu erzeugen? (Antwort begründen!) _ Page 6
Aufgabe 9: Die folgende Java-Klasse Circle soll einen Kreis repräsentieren. Implementiere die Methoden perimeter(), diameter(), overlap(), distance() und draw(). public class Circle private double x, y; // Koordinaten des Mittelpunktes private double r; // Radius // Konstruktor public Circle ( double x, double y, double r) this.x = x; this.y = y; this.r = r; public double area () // berechnet den Flächeninhalt return Math. PI * r * r; public double perimeter () // berechnet den Umfang public double diameter () // berechnet den Durchmesser /* gibt genau dann true zurück, wenn sich die Kreise this und that überlappen */ public boolean overlap ( Circle that ) Page 7
// berechnet den Abstand zwischen this und that public double distance ( Circle that ) /* zeichnet den Kreis auf dem Bildschirm unter Verwendung der Turtle t */ public void draw ( Turtle t) Hinweise: Sei K ein Kreis mit Mittelpunkt (x, y) und Radius r. Der Flächeninhalt von K ist πr 2. Der Umfang von K ist 2πr. Der Durchmesser von K ist 2r. Sie K ein zweiter Kreis mit Mittelpunkt (x, y ) und Radius r. Die Kreise K und K überlappen sich genau dann, wenn (x x ) 2 + (y y ) 2 r + r ist. Der Abstand von K und K ist 0, falls die beiden Kreise sich überlappen, und anderenfalls (x x ) 2 + (y y ) 2 r r. Zeichne den Kreis in der Methode draw(...) als n-eck mit großer Eckenzahl n (z.b. n=360). Aufgabe 10: Nun soll die Klasse Circle aus Aufgabe 8 mittels Vererbung zu einer Klasse ColoredCircle erweitert werden, die einen gefärbten Kreis repräsentiert. import java. awt.*; public class ColoredCircle extends Circle private Color c; Page 8
// Konstruktor public ColoredCircle ( double x, double y, double r, Color c) /* zeichnet den farbigen Kreis auf dem Bildschirm unter Verwendung der Turtle t */ public void draw ( Turtle t) Implementiere den obigen Konstruktor public ColoredCircle(...) sowie die Methode public void draw(...). Dabei soll draw(...) auf die gleichnamige Methode der Superklasse zurückgreifen. Aufgabe 11: In dieser Aufgabe soll eine Turtle über Tastatureingaben durch den Benutzer gesteuert werden. Die beiden zulässigen Befehle sind: D: Zeichne ein gleichseitiges Dreieck der Seitenlänge 50 und gehe 50 Schritte nach rechts. Q: Zeichne ein Quadrat der Seitenlänge 50 und gehe 50 Schritte nach rechts. Die einzelnen Befehle werden dabei durch ein ; abgeschlossen - beispielsweise soll die Eingabe Q;D;D;Q;D; zu der Ausgabe führen. Fehlerhafte und unzulässige Eingaben soll das Programm überspringen, bis das nächste ; gelesen wird. Das gewünschte Verhalten wird durch den folgenden endlichen Automaten formal beschrieben: Page 9
q 1 D default start ; ; [zeichne Dreieck] q 0 default ; Q default q 3 default ; [zeichne Quadrat] q 2 Implementiere diesen Automaten durch Vervollständigung der Methode public static void verarbeitezeichen(char inputchar) im folgenden Java-Programm. public class Aufgabe11 static TurtleScreen ts = new TurtleScreen (); static Turtle t = new Turtle ( ts ); static int q; // Zustand des Automaten public static void ve rarbei tezeic hen ( char inputchar ) Page 10
public static void main ( String [] args ) q = 0; // Startzustand ist 0 char inputchar ; t.pd (); do inputchar = Std. in. readchar (); verarbeitezeichen ( inputchar ); while ( inputchar!= x ); Std. out. println (" FERTIG "); Page 11