Klausur

Werbung
Zwischentest
Grundlagen der Programmierung II
Sommersemester 2008
Dienstag 29.04.2008 13:15 bis 13:55 Uhr Raum Hörsaal G
(40 Minuten)
Bitte schreiben Sie leserlich!
Es ist Platz gelassen für die Antwort. Sie können die Rückseiten mit benutzen, falls Ihnen der Platz
nicht ausreicht.
Keine Hilfsmittel erlaubt
Name……………….
:_____________________________
Matrikelnummer…… :_____________________________
Studiengang………... :_____________________________
In jedem Teil (in Teil l und in Teil 2) muss eine ausreichende Punkzahl erreicht werden.
Teil 1: Grundlagen
1.1. Matrix spiegeln
1.2. Code vereinfachen
Anzahl Punkte…....... :_____________________________
Teil 2: Aufbauwissen
2.1. static - non-static
2.2. Vererbung etc.
Anzahl Punkte…....... :_____________________________
Viel Erfolg !
Seitenzahl: 6 (inklusive Reserve-Seite falls der Platz nicht reicht)
Korrektor-Nummer : 5
Name:_____________________________________________________________________
frei für Ihre Notizen, falls der Platz sonst nicht reicht:
Seite 2 von 6
Name:_____________________________________________________________________
(zu Teil 1:)
1.1. Matrix spiegeln (max 8 Punkte erreichbar)
Gegeben ist ein Java-Programm, das ein 2-dimensionales Array wie folgt mit
Zahlen auffüllt und anschließend am Bildschirm ausgibt.
11
21
31
41
51
12
22
32
42
52
13
23
33
43
53
14
24
34
44
54
15
25
35
45
55
Das Auffüllen des Arrays (1.Teil des Programms) und die Ausgabe
des Arrays (3.Teil des Programms) sollen Sie unverändert übernehmen !
Sie sollen nur einen mittleren Teil einfügen, der im 2-dimensionalen Array die Zahlen vertauscht. Ihr Programm soll die
Zahlen der Matrix wirklich vertauschen, sie nicht nur
neu berechnen!
Ergänzen Sie das gegebene Programm so, dass es die Matrix an der Achse von rechts oben nach links unten spiegelt. Die
gewünschte Ausgabe ist:
55
54
53
52
51
45
44
43
42
41
35
34
33
32
31
25
24
23
22
21
15
14
13
12
11
*/
public class A24
{
public static void main( String[] args )
{
int matrix[][] = new int [5][5] ;
int zeile, spalte ;
// hier startet das Programm
// Teil 1: Matrix auffüllen - sollen Sie unverändert lassen !!
for ( zeile = 0 ; zeile < 5 ; zeile++ )
for ( spalte = 0 ; spalte < 5 ; spalte++ )
matrix[ zeile ][ spalte ] = (zeile+1) * 10 + (spalte+1) ;
// Teil 2: Matrix spiegeln - das sollen Sie programmieren
// Teil 3: Matrix ausgeben - sollen Sie unverändert lassen
for ( zeile = 0 ; zeile < 5 ; zeile ++ )
{
for ( spalte = 0 ; spalte < 5 ; spalte ++ )
System.out.print( " " + matrix[ zeile ][ spalte ] ) ;
System.out.println( ) ;
}
}
}
Seite 3 von 6
Name:_____________________________________________________________________
(zu Teil 1:) 1.2. Code vereinfachen (max. 13 Punkte erreichbar)
/*
*
*
*
*
*
*
*
Von der Klasse test1 ist nur die Methode combine außen sichtbar,
deren Parameter können jedoch in der aufrufenden Anwendung beliebig gewählt sein.
Vereinfachen Sie das folgende Programm so weit wie möglich!
Wichtig ist aber, dass das entstehende vereinfachte Programm bei beliebigen Werten
für die Aktualparameter von combine dasselbe tut.
Erklären Sie die einzelnen Vereinfachungsschritte mit je einem Satz,
z.B. "Die Anweisungen in Zeile X bis Y tun dasselbe wie die in Zeile Z".
* Sie können durchstreichen und ergänzen, um nicht so viel schreiben zu müssen
*/
class test1 {
public static void main(String [] args) {
combine( 2,2,2,2 ) ;
combine( 3,3,4,3 ) ;
// hier kommen weitere Aufrufe von combine mit anderen Parametern
}
/*
/*
/*
/*
/*
/*
/*
/*
1
2
3
4
5
6
7
8
*/
*/
*/
*/
*/
*/
*/
*/
public static void combine( int i, int b1,int b2,int b3 )
{
if ( b1==b2 )
if ( b1-b3==0 )
if ( b2 == b3 )
System.out.println( f1(i) + f4(i) - f3(i) ) ;
else
System.out.println( f2(i) ) ;
/* 9 */
/* 10 */
/* 11 */
/* 12 */
if (b3-b1==0)
if ( b1 != b2 )
System.out.println( f1(i) - f2(i) ) ;
}
/*
/*
/*
/*
13
14
15
16
*/
*/
*/
*/
private static int f1(int n)
{
if (n<1) return 1 ;
else return n*n*f1(n-1) ;
}
/*
/*
/*
/*
17
18
19
20
*/
*/
*/
*/
private static int f2(int m)
{ if (m>0) return m*m*f2(m-1) ;
else return 1 ;
}
/*
/*
/*
/*
/*
/*
/*
/*
21
22
23
24
25
26
27
28
*/
*/
*/
*/
*/
*/
*/
*/
private static int f3(int k)
{
int r=1 ;
while (k>0)
{
r = k*k*r ;
k-- ;
} ;
return r ;
}
/*
/*
/*
/*
/*
/*
/*
/*
29
30
31
32
33
34
35
36
*/
*/
*/
*/
*/
*/
*/
*/
private static int f4(int j)
{
int s=1 ;
do
{
s = j*j*s ;
j-- ;
} while (j>0) ;
return s ;
}
}
Seite 4 von 6
Name:_____________________________________________________________________
(zu Teil 2:) 2.1. static - nicht static (maximal 14 Punkte erreichbar)
/*
*
*
*
*
*
Die Klasse punkt21s enthält eine static-Methode gleich.
Schreiben Sie eine nicht-static-Methode, die dasselbe leistet und
ändern Sie den Aufruf in der main-Methode so, dass Ihre nicht-static-Methode
statt der static-Methode gleich aufgerufen wird.
Sie können unterhalb der Zeile "// ** ... " durchstreichen und
ergänzen, um nicht so viel schreiben zu müssen
*/
class punkt21s {
int x, y;
punkt21s(int nx,int ny) { x= nx; y=ny ; }
static int read() {return 1;} // bzw. eine andere Implementierung,
// die ints liefert
public static void main(String [] args) {
int a1 = read(); // read soll einen int-Wert liefern
int a2 = read();
int a3 = read();
int a4 = read();
punkt21s p1 = new punkt21s(a1,a2);
punkt21s p2 = new punkt21s(a3,a4);
// **
ab hier sollen Sie ändern
if ( gleich(p1,p2) ) System.out.println("gleich") ;
else System.out.println("ungleich") ;
}
static boolean gleich(punkt21s p,punkt21s p2)
{ return p2.x==p.x && p2.y==p.y ; }
}
Seite 5 von 6
Name:_____________________________________________________________________
(zu Teil 2) 2.2. Vererbung und Redefinition (maximal 16 Punkte erreichbar)
In diesem Programm dürfen Sie nichts streichen, sondern nur ergänzen!
Erweitern Sie die final void Methode fliegtInfo() in der Klasse Tier und ggf. andere Klassen so, dass Ihr Programm das
übliche Default-Verhalten zum fliegen ausgibt, d.h. Tiere fliegen im Allgemeinen nicht, Vögel schon, aber Pinguine nicht,
und so dass die main-Funktion die folgende Ausgabe liefert.
Das Tier bello fliegt nicht
Das Tier hansi fliegt
Das Tier tweety fliegt nicht
Achten Sie auf Minimierung des Codes. Wenn Sie weitere abstrakte Methoden brauchen, definieren Sie diese.
abstract class Tier {
String name;
Tier(String n) { name=new String(n); }
final void fliegtInfo() {
// bitte ab hier ergänzen
System.out.println( "Das Tier " + name + ____________________ ) ;
}
}
}
class Vogel extends Tier
{
Vogel(String name){ super(name) ; }
// ggf. hier ergänzen
}
class Hund extends Tier
{
Hund(String name){ super(name) ; }
// ggf. hier ergänzen
}
class Pinguin extends Vogel
{
Pinguin(String name){ super(name) ; }
// ggf. hier ergänzen
}
public class Flugtest{
// unverändert lassen
public static void main( String [] args )
{ Tier bello = new Hund ( "bello" ) ;
bello.fliegtInfo() ;
Tier hansi= new Vogel ( "hansi" ) ;
hansi.fliegtInfo() ;
Tier tweety = new Pinguin ( "tweety" ) ;
tweety.fliegtInfo() ;
}
}
Seite 6 von 6
Herunterladen