Programmentwicklung I für Hörer anderer Fachrichtungen

Werbung
Programmentwicklung I für Hörer
anderer Fachrichtungen
-Sommersemester 2003Abschlussklausur 05.08.2003
Name :
Vorname :
Matrikelnummer :
Hauptfach :
Nebenfach/Fachrichtung
Hinweise :
1. Überprüfen Sie anhand der aufgedruckten Seitennummern 1 - 18 die Vollständigkeit Ihres
Klausurtextes.
2. Hilfsmittel: bis zu 4 Seiten DIN A4 mit Notizen nach Wahl.
Aufgabe Thema
maximale Punktzahl erreichte Punktzahl
1
Basiswissen (allgemein)
5
2
Applikationen, Methoden
6
3
Methoden (einfache Variable)
11
4
Methoden, Felder
9
5
Rekursion
8
6
Basiswissen (Objektorientierung)
5
7
Klassen, Vererbung
16
60
1. Klausur
Übung/Praktikum
Summe
-1-
Aufgabe 1
(5 Punkte )
Kennzeichnen Sie die folgenden Aussagen durch Ankreuzen als „wahr“ oder „falsch“.
Bewertung: keine Antwort:
0
Punkte
richtige Antwort:
+0.5 Punkte
falsche Antwort:
-0.5 Punkte
Minimal können 0 Punkte erreicht werden.
wahr
falsch
Eine Methode kann sich selbst aufrufen.
Eine Methode kann nur überladen werden, wenn sie als public deklariert ist.
Einer int-Variable kann auch ohne cast ein double-Wert zugewiesen werden,
wenn der double-Wert nicht zu groß ist.
Der Aufruf einer Methode muss in Quelltext hinter (bzw. unter) den Kopf dieser
Methode stehen.
Blöcke werden mit { und } gruppiert.
Zu einer Klasse gibt es immer auch Objekte.
Ein Objekt ist die Erweiterung einer Klasse und erbt deren Eigenschaften.
Eine Unterklasse erbt die Attribute und Methoden der Oberklasse. Es können
jedoch weitere Daten und Methoden hinzugefügt werden.
Eine Konstante erkennt man an dem Schlüsselwort static.
Schlüsselwörter müssen mit ; voneinander getrennt werden.
-2-
Aufgabe 2
( 3 + 3 = 6 Punkte )
a) Schreiben Sie eine Java-Applikation, die folgende Aufgabe erledigt:
Zuerst sollen alle Kommandozeilenparameter mit geradem Index in normaler Reihenfolge und
anschließend die übrigen Parameter in umgekehrter Reihenfolge ausgegeben werden.
-3-
Aufgabe 2
(Fortsetzung)
b) Das nebenstehende Flussdiagramm beschreibt den
Primzahltest nach dem Verfahren "Sieb des
Eratosthenes".
Schreiben Sie eine Java-Methode, die dieses Verfahren
entsprechend dem Flussdiagramm realisiert.
Hinweise:
1. Die Methode soll die ganze Zahl n als
Eingabeparameter haben; n ≥ 2 können Sie ohne
weitere Prüfung voraussetzen.
2. Das Feld a muss in der Methode erzeugt werden.
Start
ao = false
a1 = false
i=2
i≤n
a = true
i = i+1
i=2
ai = false
ja
nein
k=2
k*i ≤ n
ak*i = false
k = k+1
i = i+1
i≤n
Rückgabe (a)
Stopp
-4-
Aufgabe 3
( 4 + 3 + 4 = 11 Punkte )
2i
∞
x2 x4 x6
i x
a) Es ist cos x =1 − + − + .... = ∑ (-1)
2! 4! 6!
(2i)!
i=0
Schreiben Sie eine Java-Methode cos entsprechend folgender Spezifikation:
Name:
Parameter:
Rückgabewert:
Wirkung:
cos
x (double)
double
Es werden so viele Summanden dieser Reihe aufsummiert, bis sich aufgrund der
Rechengenauigkeit die Partialsumme nicht mehr ändert. Diese soll dann
zurückgegeben werden.
-5-
Aufgabe 3
( Fortsetzung )
b) Schreiben Sie eine Java-Methode entsprechend folgender Spezifikation:
Name:
Parameter:
Rückgabewert:
Wirkung:
Hinweis:
divmod
m, n (ganze Zahlen)
ganzzahliges Feld mit 2 Komponenten (nämlich q und r)
Unter ausschließlicher Benutzung der Operatoren +, -, >=, == und > werden
der Quotient q ( d.h. m/n) der ganzzahligen Division von m durch n und der
Teilungsrest r (d.h. m%n) ermittelt und im Feld zurückgegeben.
Die Operatoren / und % dürfen in dieser Teilaufgabe nicht benutzt werden!
Sie können für diese Teilaufgabe voraussetzen, dass m≥0 und n>0 ist.
-6-
Aufgabe 3
( Fortsetzung )
c) Der Kehrwert 1/a einer positiven reellen Zahl a kann ohne Division durch folgendes
Iterationsverfahren nummerisch beliebig genau berechnet werden:
Startwert:
Iterationsschritt:
x0 mit 1/(2a) < x0 < 3/(2a)
xn+1 = xn * (2-a xn)
Schreiben Sie eine Java-Methode kehrwert entsprechend folgender Spezifikation, die dieses
Verfahren realisiert.
Name:
Parameter:
Rückgabewert:
Wirkung:
Hinweise:
kehrwert
a, x0 (double)
double
Zunächst wird die Bedingung 1/(2a) < x0 < 3/(2a) (natürlich ohne
Verwendung von Divisionen) überprüft. Ist diese Bedingung nicht erfüllt,
soll 0 zurückgegeben werden.
Ansonsten soll solange das nächste xi berechnet werden, bis erstmals das
Abbruchkriterium | xi+1 – xi | >= | xi – xi-1 | erfüllt ist; es sind also in jedem
Fall mindestens 2 Iterationsschritte durchzuführen.
1. In dieser Teilaufgabe ist die Verwendung des Operators / nicht erlaubt.
2. Für diese Teilaufgabe können Sie a > 0 voraussetzen.
-7-
Aufgabe 4
(4 + 5 = 9 Punkte )
a) Die hier nicht weiter spezifizierte Methode ausgabe gibt beim Aufruf ausgabe(v) mit
einem int-Feld v dieses Feld in einer Zeile aus.
Welche Ausgabe wird unter dieser Voraussetzung durch folgendes Programmfragment erzeugt?
int[] zeile = {1, 2, 3, 4};
int[][] matrix = new int[3][4];
System.out.print("Stelle 1: ");
ausgabe(matrix[1]);
matrix[1] = zeile;
zeile[1] = 5;
System.out.print("Stelle 2: ");
ausgabe(matrix[1]);
zeile = new int[2];
zeile[0] = 6;
System.out.print("Stelle 3: ");
ausgabe(zeile);
System.out.print("Stelle 4: ");
ausgabe(matrix[1]);
Stelle 1:
Stelle 2:
Stelle 3:
Stelle 4:
-8-
Aufgabe 4
(Fortsetzung)
b) Eine n x n - Transvektionsmatrix ist durch die Dimension n, eine ganze Zahl r mit 1≤r<n
und n-r Werte a1, a2,..., an-r definiert.
Alle Diagonalelemente dieser Matrix sind = 1 und in der r-ten Spalte stehen unterhalb der
Diagonalen die Werte a1, a2,..., an-r. Die restlichen Matrixelemente haben den Wert 0.
Beispiel: Durch n = 4, r = 2, a1 = 1.5 und a2 = 2.5 ist die Matrix
1 0 0 0 
0 1 0 0 


 0 1.5 1 0 


 0 2.5 0 1 
definiert.
Schreiben Sie eine Java-Methode entsprechend folgender Spezifikation:
Name:
Parameter:
tvMatrix
n (ganze Zahl)
a (eindimensionales double-Feld)
Rückgabewert: matrix (zweidimensionales double-Feld)
Wirkung:
Die zu n und a gehörende Transvektionsmatrix wird erzeugt und
zurückgegeben.
Dabei können Sie davon ausgehen, dass n ≥ 1 gilt und dass und die Länge des
Feldes a < n ist. Die fragliche Spalte r ergibt sich dann aus der Dimension n
und der Länge von a.
Hinweis:
Beachten Sie die Java-Konventionen zur Indizierung von Feldern.
-9-
Aufgabe 5
( 3 + 5 = 8 Punkte )
a) Was wird beim Aufruf java A5a ausgegeben?
public class A5a
{
static int waswohl(int n)
{
if (n <= 0) return n;
return ( n + waswohl( n/2 ));
}
public static void main(String[] args)
{
for (int i = 0; i < 8; i++)
System.out.println(i + " : " + waswohl(i));
}
}
0:
- 10 -
Aufgabe 5
( Fortsetzung )
b) Schreiben Sie rekursive Java-Methode minmax gemäß folgender Spezifikation, die in einen
Aussschnitt eines eindimensionalen int-Feld gleichzeitig das Minimum und das Maximum
bestimmt.
Name:
Parameter:
minmax
feld (eindimensionales int-Feld)
links, rechts (int-Zahlen)
Rückgabewert: int-Feld mit 2 Komponenten; das Minimum steht in der ersten und das
Maximum in der zweiten Komponente.
Verfahren:
1. Enthält der Feldausschnitt nur eine Komponente, so ist diese sowohl das
Minimum als auch das Maximum.
2. Enthält der Feldausschnitt mindestens 2 Komponenten, so wird er in zwei in
etwa gleich große Hälften geteilt. Anschließend wird mit diesem Verfahren
für beide Hälften getrennt Minimim und Maximum (d.h minlinks und maxlinks
sowie minrechts und maxrechts ) ermittelt.
Das gesuchte Minimum ist dann das Minimum der beiden Zahlen minlinks und
minrechts; entsprechend ist das Maximum die größere der beiden Zahlen
maxlinks und maxrechts.
Hinweise:
1. Sie können ohne weitere Überprüfung voraussetzen, dass
0 ≤ links ≤ rechts < Länge des Feldes
gilt.
2. Iterative Lösungen werden nicht gewertet.
- 11 -
Aufgabe 6
(2 + 3 = 5 Punkte )
Gegeben sei folgendes Java Programm
(die erste Spalte gehört nicht zum Programm und dient nur der Nummerierung der Zeilen):
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class A6a1
{
int i;
static int j;
public int f() { return j; }
}
class A6a2
{ int j;
A6a1 k;
}
public class A6a3 extends A6a1
{
public int f(int i) { return i-j; }
A6a3 (int i) { this.i = i; j = 3*i+2; }
public static void main (String args[])
{
A6a3 k = new A6a3(5);
System.out.println(k.f());
System.out.println(k.f(2));
}
}
a) Welche beiden Zahlen druckt das Programm nach Aufruf von “java A6a3” aus?
b) Kreuzen Sie bei den folgenden Aussagen die jeweils korrekte Vervollständigung an.
Achtung !!! Falsche Kreuze geben Punktabzug.
A6a3 ist eine Subklasse von
A6a1
Der Bezeichner j in Zeile 4 ist
Klassenvariable
Der Bezeichner A6a3 in
Zeile 17 ist
Klasse
Parameter
Konstruktor
Der Bezeichner k in Zeile 21 ist
Klasse
Attribut
nichts davon
Die Klasse A6a2 hat keine(n)
Unterklasse
Instanzvariablen
Konstruktor
Klassenvariablen sind
j in Zeile 9
k in Zeile 10
keine davon
- 12 -
A6a2
A6a3
nichts davon
Instanzvariable
Parameter
Attribut
Aufgabe 7
(7 + 4+ 5 = 16 Punkte )
a) Entwerfen Sie eine Javaklasse Kalender entsprechend folgender Spezifikation:
Name:
Kalender
Attribute:
jahr (ganze Zahl)
monat (ganze Zahl)
tag (ganze Zahl)
Konstruktoren: 1. Parameter: keine
Es wird das Datum 1.1.1600 erzeugt.
2. Parameter: j, m, t (ganze Zahlen)
Es wird das entsprechende Datum erzeugt, sofern die drei Zahlen ein
korrektes Datum (d.h. 1 ≤ Monat ≤ 12; 1 ≤ Tag ≤ entsprechende
Monatslänge) nicht früher als 1.1.1600 darstellen.
Sonst wird das Datum 1.1.1600 erzeugt.
Methoden:
zeige
Parameter:
−
Rückgabewert: −
Wirkung:
Das Datum wird auf dem Bildschirm in der Form
tt.mm.jjjj
angezeigt.
(Beispiel: 5. August 2003 ⇒ 05.08.2003 )
istSchaltjahr
Parameter:
−
Rückgabewert: true / false
Wirkung:
Es wird geprüft, ob das aktuelle Jahr ein Schaltjahr ist.
( Ein Jahr ist ein Schaltjahr, wenn es
- durch 400
oder
- durch 4, aber nicht durch 100
teilbar ist.)
monatslaenge
Parameter:
m (ganze Zahl)
Rückgabewert: ganze Zahl.
Wirkung:
Ist 1 ≤ m ≤ 12, so wird die Länge des zugehörigen Monats
im aktuellen Jahr ermittelt und zurückgereicht.
Bei sonstigen Eingaben wird 0 zurückgereicht.
Monatslängen:
Januar, März, Mai, Juli, August, Oktober, Dezember: 31
Februar: 28 (kein Schaltjahr) bzw. 29 (Schaltjahr)
restliche Monate: 30
Auf die Attribute soll nur mit den Methoden der Klasse und eventueller abgeleiteter Klassen
zugegriffen werden können; auf die Methoden soll von überall her zugegriffen werden können.
- 13 -
Aufgabe 7
( Fortsetzung )
- 14 -
Aufgabe 7
( Fortsetzung )
b) Entwerfen Sie eine Klasse Uhrzeit entsprechend folgender Spezifikation:
Attribute:
std, min (jeweils int)
Konstruktoren:
1. Uhrzeit()
(erzeugt die Uhrzeit 0:00)
2. Uhrzeit(int stunden, int minuten)
(Ist 0 ≤ stunden ≤ 23 und 0 ≤ minuten ≤ 59, so wird die entsprechende
Uhrzeit erzeugt. Andernfalls wird die Uhrzeit 0:00 erzeugt.)
Methoden:
zeige
Parameter:
Rückgabewert: Wirkung:
gibt die aktuelle Uhrzeit im Format std:min auf dem
Terminal aus
copy
Parameter:
Rückgabewert: Uhrzeit
Wirkung:
liefert eine Kopie der aktuellen Uhrzeit
Auf die Attribute darf nur mit Methoden der Klasse zugegriffen werden; die Methoden
sollen von überallher zugreifbar sein.
- 15 -
Aufgabe 7
( Fortsetzung )
c) Erweitern Sie die Klasse Kalender zu einer Klasse Terminkalender entsprechend
folgender Spezifikation:
Name:
Terminkalender
zusätzliche Attribute:
termine ( Feld mit 10 Uhrzeiten)
belegt (ganze Zahl; Anzahl der bereits eingetragenen Termine)
Konstruktoren: Parameter:
Wirkung:
Methoden:
wie bei Kalender
wie bei Kalender; zusätzlich werden alle Uhrzeiten mit
0:00 und belegt mit 0 initialisiert.
zeige
Parameter:
−
Rückgabewert: −
Wirkung:
gibt das das aktuelle Datum und die belegten Termine aus.
neuerTermin
Parameter:
z (Uhrzeit)
Rückgabewert: Wirkung:
Sind noch Termine frei, so wird eine Kopie der übergebenen
Uhrzeit in termine (an der Position belegt) eingetragen
und belegt um 1 erhöht.
Sind schon alle Termine belegt, so wird nur eine
entsprechende Meldung auf dem Bildschirm ausgegeben.
Auf die Attribute soll nur mit den Methoden dieser Klasse zugegriffen werden können; auf die
Methoden soll von überall her zugegriffen werden können
- 16 -
Aufgabe 7
( Fortsetzung )
- 17 -
Zusatzblatt
- 18 -
Herunterladen