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