JAVA für Nichtinformatiker - Probeklausur -

Werbung
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 12 , . . . , n2 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 f0 , f1 , f2 , f3 , . . . sind durch die Rekursionsvorschrift
f0 = 0
f1 = 1
fn = fn−1 + fn−2 für n ≥ 2
gegeben.
(a) Berechne f6 .
Lösung:
(b) Schreibe Sie eine Java-Methode public int fib rek(int n), die zu einer gegebenen
Zahl n ≥ 0 die Fibonacci-Zahl fn 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 fn 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:
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 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().
import eip .*;
public class Circle
{
private double x , y ;
private double r ;
// Koordinaten des Mittelpunktes
// 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 πr2 .
Der Umfang von K ist 2πr.
Der Durchmesser von K ist 2r.
Sie K 0 ein zweiter Kreis mit Mittelpunkt
(x0 , y 0 ) und Radius r0 . Die Kreise K und K 0
p
überlappen sich genau dann, wenn (x − x0 )2 + (y − y 0 )2 ≤ r + r0 ist.
Der Abstand
von K und K 0 ist 0, falls die beiden Kreise sich überlappen, und andep
renfalls (x − x0 )2 + (y − y 0 )2 − r − r0 .
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 .*;
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 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
q1
D
;
default
; [zeichne Dreieck]
default
start
q0
q3
;
default
Q
default
; [zeichne Quadrat]
q2
Implementiere diesen Automaten durch Vervollständigung 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 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 ();
vera rbeite Zeiche n ( inputChar );
} while ( inputChar != ’x ’ );
Std . out . println ( " FERTIG " );
}
}
Page 11
Zugehörige Unterlagen
Herunterladen