java f ur nichtinformatiker - · pdf filejava f ur nichtinformatiker - probeklausur - die...
TRANSCRIPT
JAVA fur Nichtinformatiker- Probeklausur -
Die folgenden Aufgaben sollten in 150 Minuten bearbeitet werden.
Aufgabe 1:Erlautere kurz die Bedeutung der folgenden Java-Schlusselworter und gib Sie jeweils einBeispiel fur ihre Verwendung an.
(a) int
Losung: int ist die Bezeichnung des Datentyps Integer, der ganze Zahlen reprasentiert.Beispiel: Der Befehlint 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 enthalt der Array vec am Ende der Ausfuhrung?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 an-schließend die Quadratzahlen 12, . . . , n2 auf dem Bildschirm ausgeben. Die Ausgabe soll wiefolgt 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 erhalt eine positive ganze Zahl n als Parameter und gibt die Zahlenvon 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 aquivalente 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 aquivalente 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 f0, f1, f2, f3, . . . sind durch die Rekursionsvorschrift
f0 = 0
f1 = 1
fn = fn−1 + fn−2 fur n ≥ 2
gegeben.
(a) Berechne f6.
Losung:
(b) Schreibe Sie eine Java-Methode public int fib rek(int n), die zu einer gegebenenZahl n ≥ 0 die Fibonacci-Zahl fn rekursiv berechnet und zuruckgibt.
Page 3
public int fib_rek(int n)
{
}
(c) Schreibe eine Java-Methode public int fib it(int n), die zu einer gegebenen Zahln ≥ 0 die Fibonacci-Zahl fn iterativ (d.h. ohne Rekursion) berechnet und zuruckgibt.
public int fib_it(int n)
{
}
Aufgabe 7:Die Quersumme einer naturlichen Zahl ist die Summe ihrer Ziffern. (Beispiel: Die Quersum-me 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 zuruckgibt.
public int quersumme(int n)
{
}
Page 4
Aufgabe 8:Betrachte die folgenden vier Java-Klassen:
import eip .*;
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);
}
}
import eip .*;
public class B extends A
{
public B(int x)
{
super(x);
Std.out.println("Erzeuge B-Objekt");
}
public void increment(int y)
{
y++;
}
}
import eip .*;
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);
}
}
import eip .*;
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 Ausfuhrung der Klasse TestABC?
_
(b) Welche der in den Klassen A, B und C vorkommenden Methoden kann man mit demSchlusselwort static versehen, ohne einen Compilerfehler zu erzeugen? (Antwort be-grunden!)
_
Page 6
Aufgabe 9:Die folgende Java-Klasse Circle soll einen Kreis reprasentieren. Implementiere die Metho-den perimeter(), diameter(), overlap(), distance() und draw().
import eip .*;
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 Flacheninhalt
{
return Math.PI * r * r;
}
public double perimeter () // berechnet den Umfang
{
}
public double diameter () // berechnet den Durchmesser
{
}
/* gibt genau dann true zuruck , wenn sich die Kreise
this und that uberlappen */
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 Flacheninhalt von K ist πr2.
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 ′
uberlappen 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 uberlappen, und ande-renfalls
√(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 ColoredCircleerweitert werden, die einen gefarbten Kreis reprasentiert.
import java.awt .*;
import eip .*;
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 Methodepublic void draw(...). Dabei soll draw(...) auf die gleichnamige Methode der Super-klasse zuruckgreifen.
Aufgabe 11:In dieser Aufgabe soll eine Turtle uber Tastatureingaben durch den Benutzer gesteuertwerden. Die beiden zulassigen Befehle sind:
D: Zeichne ein gleichseitiges Dreieck der Seitenlange 50 und gehe 50 Schritte nachrechts.
Q: Zeichne ein Quadrat der Seitenlange 50 und gehe 50 Schritte nach rechts.
Die einzelnen Befehle werden dabei durch ein ; abgeschlossen - beispielsweise soll die Ein-gabe Q;D;D;Q;D; zu der Ausgabe
fuhren. Fehlerhafte und unzulassige Eingaben soll das Programm uberspringen, bis dasnachste ; gelesen wird. Das gewunschte Verhalten wird durch den folgenden endlichenAutomaten formal beschrieben:
Page 9
q0start
q1
q2
q3
D
Q
default
; ; [zeichne Dreieck]
default
;
default
; [zeichne Quadrat]
default
Implementiere diesen Automaten durch Vervollstandigung der Methode public static
void verarbeiteZeichen(char inputChar) im folgenden Java-Programm.
import eip .*;
public class Aufgabe11 {
static TurtleScreen ts = new TurtleScreen ();
static Turtle t = new Turtle(ts);
static int q; // Zustand des Automaten
public static void verarbeiteZeichen(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