Einführung in das Programmieren Probeklausur – Lösungen Frederik Kanning 01.07.2013 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 1 b/c) void definiert Methode ohne Rückgabewert return beendet aktuellen Methodenaufruf wenn Rückgabetyp nicht void: legt zusätzlich Rückgabewert fest muss angegeben werden Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 1 b/c) – Beispiel Methode ohne Rückgabe 1 void printNum(int num) { 2 if(num < 0) return; 3 Std.out.println(num); 4 } Methode mit Rückgabe 1 int half(int num) { 2 return num / 2; 3 // Compiler-Fehler; wird niemals erreicht: 4 Std.out.println(num); 5 } Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 1 d) extends definiert Klasse als Unterklasse von bereits vorhandener Klasse Zugriff auf alle Methoden und Variablen der Oberklasse (außer private) Objekte können in Variablen mit Typ der Oberklasse gespeichert werden ⇒ Unterklasse hat auch den Typ der Oberklasse (”zuweisungskompatibel”) Methoden mit gleicher Signatur (Name, Parameter) werden ersetzt ersetzte Methoden können mit super weiter aufgerufen werden Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 1 d) – Beispiel Vererbung mit extends 1 2 3 4 5 6 7 8 9 10 11 12 13 class Vogel { int alter; void ruf() { Std.out.println("mein alter ist " + alter); } } class Ente extends Vogel { // ersetzt ruf(), Zugriff auf Vogel.alter void ruf() { Std.out.println("quak " + alter); } } Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 1 d) – Fortsetzung Beispiel Verwendung von Ente und Vogel 1 2 3 4 5 6 7 8 9 10 11 12 Ente e = new Ente(); // Zuweisung möglich, Ente auch vom Typ Vogel Vogel v = e; // Alter der Ente festlegen e.alter = 42; // Ausgabe: ’quak 42’ // und nicht ’mein alter ist 42’ e.ruf(); // Fehler, nicht jeder Vogel ist eine Ente Ente e2 = new Vogel(); Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 2 1 int a = 2, b = 5; 2 boolean g = false; Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 2 1 2 3 4 5 int a = 2, b = 5; boolean g = false; // g = false || ((1 * 5) == 5) g = g || (--a * b == b); Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 2 1 2 3 4 5 6 int a = 2, b = 5; boolean g = false; // g = false || ((1 * 5) == 5) g = g || (--a * b == b); // geändert: g = true, a = 1 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 2 1 2 3 4 5 6 7 8 int a = 2, b = 5; boolean g = false; // g = false || ((1 * 5) == 5) g = g || (--a * b == b); // geändert: g = true, a = 1 // if(true) b = 5 + (1 + 3) if (g) b += a + 3; Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 2 1 2 3 4 5 6 7 8 9 int a = 2, b = 5; boolean g = false; // g = false || ((1 * 5) == 5) g = g || (--a * b == b); // geändert: g = true, a = 1 // if(true) b = 5 + (1 + 3) if (g) b += a + 3; // geändert: b = 9 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 2 1 2 3 4 5 6 7 8 9 10 11 int a = 2, b = 5; boolean g = false; // g = false || ((1 * 5) == 5) g = g || (--a * b == b); // geändert: g = true, a = 1 // if(true) b = 5 + (1 + 3) if (g) b += a + 3; // geändert: b = 9 a = b; Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 int a = 2, b = 5; boolean g = false; // g = false || ((1 * 5) == 5) g = g || (--a * b == b); // geändert: g = true, a = 1 // if(true) b = 5 + (1 + 3) if (g) b += a + 3; // geändert: b = 9 a = b; // geändert: a = 9 b = a; Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 int a = 2, b = 5; boolean g = false; // g = false || ((1 * 5) == 5) g = g || (--a * b == b); // geändert: g = true, a = 1 // if(true) b = 5 + (1 + 3) if (g) b += a + 3; // geändert: b = 9 a = b; // geändert: a = 9 b = a; // da b bereits 9, keine Änderung mehr Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 int a = 2, b = 5; boolean g = false; // g = false || ((1 * 5) == 5) g = g || (--a * b == b); // geändert: g = true, a = 1 // if(true) b = 5 + (1 + 3) if (g) b += a + 3; // geändert: b = 9 a = b; // geändert: a = 9 b = a; // da b bereits 9, keine Änderung mehr // Ergebnis: a = 9, b = 9, g = true Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 3 1 int [] vec = 2 for (int i = 3 if (i%2 == 4 vec[i - 2] 5 } i i % 2 {1 3; 0) *= ,2 ,3 ,4 ,5}; i < 7; i++) { continue; vec[i - 3]; Anweisung vec[i - 2] *= vec[i - 3] Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 3 1 int [] vec = 2 for (int i = 3 if (i%2 == 4 vec[i - 2] 5 } i 3 i % 2 1 {1 3; 0) *= ,2 ,3 ,4 ,5}; i < 7; i++) { continue; vec[i - 3]; Anweisung vec[i - 2] *= vec[i - 3] Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 3 1 int [] vec = 2 for (int i = 3 if (i%2 == 4 vec[i - 2] 5 } i 3 i % 2 1 {1 3; 0) *= ,2 ,3 ,4 ,5}; i < 7; i++) { continue; vec[i - 3]; Anweisung vec[i - 2] *= vec[i - 3] vec[1] = vec[1] * vec[0] //=2 Ergebnis: Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 3 1 int [] vec = 2 for (int i = 3 if (i%2 == 4 vec[i - 2] 5 } i 3 i % 2 1 {1 3; 0) *= ,2 ,3 ,4 ,5}; i < 7; i++) { continue; vec[i - 3]; Anweisung vec[i - 2] *= vec[i - 3] vec[1] = vec[1] * vec[0] //=2 Ergebnis: vec = {1,2,3,4,5} Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 3 1 int [] vec = 2 for (int i = 3 if (i%2 == 4 vec[i - 2] 5 } i 3 i % 2 1 4 0 {1 3; 0) *= ,2 ,3 ,4 ,5}; i < 7; i++) { continue; vec[i - 3]; Anweisung vec[i - 2] *= vec[i - 3] vec[1] = vec[1] * vec[0] //=2 Ergebnis: vec = {1,2,3,4,5} Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 3 1 int [] vec = 2 for (int i = 3 if (i%2 == 4 vec[i - 2] 5 } i 3 i % 2 1 4 0 {1 3; 0) *= ,2 ,3 ,4 ,5}; i < 7; i++) { continue; vec[i - 3]; Anweisung vec[i - 2] *= vec[i - 3] vec[1] = vec[1] * vec[0] //=2 Ergebnis: vec = {1,2,3,4,5} – Array unverändert Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 3 1 int [] vec = 2 for (int i = 3 if (i%2 == 4 vec[i - 2] 5 } i 3 i % 2 1 4 0 5 1 {1 3; 0) *= ,2 ,3 ,4 ,5}; i < 7; i++) { continue; vec[i - 3]; Anweisung vec[i - 2] *= vec[i - 3] vec[1] = vec[1] * vec[0] //=2 Ergebnis: vec = {1,2,3,4,5} – Array unverändert Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 3 1 int [] vec = 2 for (int i = 3 if (i%2 == 4 vec[i - 2] 5 } i 3 i % 2 1 4 0 5 1 {1 3; 0) *= ,2 ,3 ,4 ,5}; i < 7; i++) { continue; vec[i - 3]; Anweisung vec[i - 2] *= vec[i - 3] vec[1] = vec[1] * vec[0] //=2 Ergebnis: vec = {1,2,3,4,5} – Array unverändert vec[3] = vec[3] * vec[2] //=12 Ergebnis: Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 3 1 int [] vec = 2 for (int i = 3 if (i%2 == 4 vec[i - 2] 5 } i 3 i % 2 1 4 0 5 1 {1 3; 0) *= ,2 ,3 ,4 ,5}; i < 7; i++) { continue; vec[i - 3]; Anweisung vec[i - 2] *= vec[i - 3] vec[1] = vec[1] * vec[0] //=2 Ergebnis: vec = {1,2,3,4,5} – Array unverändert vec[3] = vec[3] * vec[2] //=12 Ergebnis: vec = {1,2,3,12,5} Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 3 1 int [] vec = 2 for (int i = 3 if (i%2 == 4 vec[i - 2] 5 } i 3 i % 2 1 4 0 5 1 6 0 {1 3; 0) *= ,2 ,3 ,4 ,5}; i < 7; i++) { continue; vec[i - 3]; Anweisung vec[i - 2] *= vec[i - 3] vec[1] = vec[1] * vec[0] //=2 Ergebnis: vec = {1,2,3,4,5} – Array unverändert vec[3] = vec[3] * vec[2] //=12 Ergebnis: vec = {1,2,3,12,5} Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 3 1 int [] vec = 2 for (int i = 3 if (i%2 == 4 vec[i - 2] 5 } i 3 i % 2 1 4 0 5 1 6 0 Endergebnis: {1 3; 0) *= ,2 ,3 ,4 ,5}; i < 7; i++) { continue; vec[i - 3]; Anweisung vec[i - 2] *= vec[i - 3] vec[1] = vec[1] * vec[0] //=2 Ergebnis: vec = {1,2,3,4,5} – Array unverändert vec[3] = vec[3] * vec[2] //=12 Ergebnis: vec = {1,2,3,12,5} – Array unverändert vec = {1,2,3,12,5} Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 4 a) 1 public int quadrate() { 2 Std.out.print("Bitte ...: n="); 3 int n = Std.in.readInt() 4 Std.out.print("Die ... " n " Quadrat...: "); 5 for (i = 0; i < n; i++); 6 Std.out.print(i*i + " "); 7 } Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 4 b) 1 public void quadrate() { 2 Std.out.print("Bitte ...: n="); 3 int n = Std.in.readInt(); 4 Std.out.print("Die ... "+n+" Quadrat...: "); 5 for (int i = 1; i <= n; i++) 6 Std.out.print(i*i + " "); 7 } Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 5 a) For-Schleife for(int i = 1; i <= n; i++) { ... } Äquivalente While-Schleife Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 5 a) For-Schleife for(int i = 1; i <= n; i++) { ... } Äquivalente While-Schleife Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 5 a) For-Schleife for(int i = 1; i <= n; i++) { ... } Äquivalente While-Schleife 1 void zahlen_while(int n) { 2 int i = 1; 3 while(i <= n) { 4 Std.out.println(i); 5 i++; 6 } 7 } Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 5 b) Lösung 1 void zahlen_rek(int n) { 2 if(n > 0) { 3 zahlen_rek(n - 1); 4 Std.out.println(n); 5 } 6 } Beispiel, n = 3 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 5 b) Lösung 1 void zahlen_rek(int n) { 2 if(n > 0) { 3 zahlen_rek(n - 1); 4 Std.out.println(n); 5 } 6 } Beispiel, n = 3 zahlen_rek(3) Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 5 b) Lösung 1 void zahlen_rek(int n) { 2 if(n > 0) { 3 zahlen_rek(n - 1); 4 Std.out.println(n); 5 } 6 } Beispiel, n = 3 zahlen_rek(3) zahlen_rek(2) Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 5 b) Lösung 1 void zahlen_rek(int n) { 2 if(n > 0) { 3 zahlen_rek(n - 1); 4 Std.out.println(n); 5 } 6 } Beispiel, n = 3 zahlen_rek(3) zahlen_rek(2) zahlen_rek(1) Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 5 b) Lösung 1 void zahlen_rek(int n) { 2 if(n > 0) { 3 zahlen_rek(n - 1); 4 Std.out.println(n); 5 } 6 } Beispiel, n = 3 zahlen_rek(3) zahlen_rek(2) zahlen_rek(1) zahlen_rek(0) -- Abbruch Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 5 b) Lösung 1 void zahlen_rek(int n) { 2 if(n > 0) { 3 zahlen_rek(n - 1); 4 Std.out.println(n); 5 } 6 } Beispiel, n = 3 zahlen_rek(3) zahlen_rek(2) zahlen_rek(1) -- println(1) zahlen_rek(0) -- Abbruch Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 5 b) Lösung 1 void zahlen_rek(int n) { 2 if(n > 0) { 3 zahlen_rek(n - 1); 4 Std.out.println(n); 5 } 6 } Beispiel, n = 3 zahlen_rek(3) zahlen_rek(2) -- println(2) zahlen_rek(1) -- println(1) zahlen_rek(0) -- Abbruch Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 5 b) Lösung 1 void zahlen_rek(int n) { 2 if(n > 0) { 3 zahlen_rek(n - 1); 4 Std.out.println(n); 5 } 6 } Beispiel, n = 3 zahlen_rek(3) zahlen_rek(2) zahlen_rek(1) zahlen_rek(0) ----- println(3) println(2) println(1) Abbruch Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 6 a) Fibonacci-Zahlen f0 = 0, f1 = 1, fn = fn−1 + fn−2 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 6 a) Fibonacci-Zahlen f0 = 0, f1 = 1, fn = fn−1 + fn−2 Berechnung von f6 n 0 1 2 fn 0 1 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 6 a) Fibonacci-Zahlen f0 = 0, f1 = 1, fn = fn−1 + fn−2 Berechnung von f6 n 0 1 2 3 fn 0 1 1 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 6 a) Fibonacci-Zahlen f0 = 0, f1 = 1, fn = fn−1 + fn−2 Berechnung von f6 n 0 1 2 3 4 5 6 fn 0 1 1 2 3 5 8 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 6 b) Fibonacci-Zahlen f0 = 0, f1 = 1, fn = fn−1 + fn−2 Rekursive Lösung 1 int fib_rek(int n) { 2 if(n == 0) 3 return 0; 4 if(n == 1) 5 return 1; 6 return fib rek(n-1) + fib rek(n-2); 7 } Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 6 b) Fibonacci-Zahlen f0 = 0, f1 = 1, fn = fn−1 + fn−2 Rekursive Lösung 1 int fib_rek(int n) { 2 if(n == 0) 3 return 0; 4 if(n == 1) 5 return 1; 6 return fib rek(n-1) + fib rek(n-2); 7 } Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 6 c) Iterative Lösung 1 int fib_it(int n) { Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 6 c) Iterative Lösung 1 int fib_it(int n) { 2 int a = 0; // n - 2 3 int b = 1; // n - 1 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 6 c) Iterative Lösung 1 int fib_it(int n) { 2 int a = 0; // n - 2 3 int b = 1; // n - 1 4 for(int i = 1; i <= n; i++) { 5 int t = b; // b zwischenspeichern 6 b = a + b; // fn+1 = fn + fn−1 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 6 c) Iterative Lösung 1 int fib_it(int n) { 2 int a = 0; // n - 2 3 int b = 1; // n - 1 4 for(int i = 1; i <= n; i++) { 5 int t = b; // b zwischenspeichern 6 b = a + b; // fn+1 = fn + fn−1 7 a = t; 8 } 9 return a; 10 } Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen mittels ganzzahliger Division durch 1, 10, 100..., bis alle Stellen verrechnet Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen mittels ganzzahliger Division durch 1, 10, 100..., bis alle Stellen verrechnet ist der Fall, wenn Division nur noch Null ergibt Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen mittels ganzzahliger Division durch 1, 10, 100..., bis alle Stellen verrechnet ist der Fall, wenn Division nur noch Null ergibt Beispiel: Quersumme von a = 2634 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen mittels ganzzahliger Division durch 1, 10, 100..., bis alle Stellen verrechnet ist der Fall, wenn Division nur noch Null ergibt Beispiel: Quersumme von a = 2634 a : 1 = 2634, 2634 % 10 = 4 Frederik Kanning Summe: 4 EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen mittels ganzzahliger Division durch 1, 10, 100..., bis alle Stellen verrechnet ist der Fall, wenn Division nur noch Null ergibt Beispiel: Quersumme von a = 2634 a : 10 = 263, 263 % 10 = 3 Frederik Kanning Summe: 4 + 3 EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen mittels ganzzahliger Division durch 1, 10, 100..., bis alle Stellen verrechnet ist der Fall, wenn Division nur noch Null ergibt Beispiel: Quersumme von a = 2634 a : 100 = 26, 26 % 10 = 6 Frederik Kanning Summe: 4 + 3 + 6 EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen mittels ganzzahliger Division durch 1, 10, 100..., bis alle Stellen verrechnet ist der Fall, wenn Division nur noch Null ergibt Beispiel: Quersumme von a = 2634 a : 1000 = 2, 2 % 10 = 2 Frederik Kanning Summe: 4 + 3 + 6 + 2 EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen mittels ganzzahliger Division durch 1, 10, 100..., bis alle Stellen verrechnet ist der Fall, wenn Division nur noch Null ergibt Beispiel: Quersumme von a = 2634 a : 10000 = 0, Abbruch Summe: 4 + 3 + 6 + 2 = 15 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Code 1 int quersumme(int n) { Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Code 1 int quersumme(int n) { 2 int sum = 0; Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Code 1 int quersumme(int n) { 2 int sum = 0; 3 while(n > 0) { Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Code 1 int quersumme(int n) { 2 int sum = 0; 3 while(n > 0) { 4 sum += n % 10; Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Code 1 int quersumme(int n) { 2 int sum = 0; 3 while(n > 0) { 4 sum += n % 10; 5 n /= 10; 6 } Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 7 – Code 1 int quersumme(int n) { 2 int sum = 0; 3 while(n > 0) { 4 sum += n % 10; 5 n /= 10; 6 } 7 return sum; 8 } Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 a) Ausgabe: Erzeuge Erzeuge Erzeuge Erzeuge Erzeuge Erzeuge 2500 -2 5 AABABC- Objekt Objekt Objekt Objekt Objekt Objekt Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 a) – Erläuterung I A a = new A(1); ruft Konstruktor von A auf, Ausgabe Erzeuge A- Objekt setzt Objektvariable x auf 1 Konstruktoren haben denselben Namen wie ihre Klasse und keinen Rückgabetyp (auch kein void!) Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 a) – Erläuterung I A a = new A(1); ruft Konstruktor von A auf, Ausgabe Erzeuge A- Objekt setzt Objektvariable x auf 1 Konstruktoren haben denselben Namen wie ihre Klasse und keinen Rückgabetyp (auch kein void!) B b = new B(0); ruft Konstruktor von B auf da B von A abgeleitet, wird durch super(x); zuerst Konstruktor von A aufgerufen Ausgabe: Erzeuge A- Objekt Erzeuge B- Objekt Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 a) – Erläuterung II C c = new C(5); ruft Konstruktor von C auf da C von B, und B von A abgeleitet, werden analog die Konstruktoren A, B, C nacheinander aufgerufen Verkettung über beliebig viele Vererbungsstufen möglich Ausgabe: Erzeuge A- Objekt Erzeuge B- Objekt Erzeuge C- Objekt Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 a) – Erläuterung III b.foo(50); B definiert keine Methode foo(int x) daher wurde A.foo vererbt und wird jetzt ausgeführt: zwei verschachtelte For-Schleifen, jeweils n mal Methode berechnet daher effektiv x = x + n*n Ausgabe: 2500 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 a) – Erläuterung IV c.foo(50); foo(int x) wurde in Klasse C neu definiert zählt Objektvariable x so lange runter, bis x-- < 0 Post-Decrement: gibt erst aktuellen Wert zurück und zählt dann runter (bei --x genau umgekehrt) -1 erster Wert, der Bedingung nicht mehr erfüllt danach wird noch einmal runtergezählt: x hat nach Schleife den Wert -2 Ausgabe: -2 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 a) – Erläuterung V 1 2 3 4 5 public static void increment(int y) { y++; } int y = 5; increment(y); b.increment(y); Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 a) – Erläuterung V 1 2 3 4 5 public static void increment(int y) { y++; } int y = 5; increment(y); b.increment(y); zählt die lokale Variable y innerhalb der Methode foo() hoch beide Variablen heißen gleich, existieren aber getrennt voneinander Änderung wirkt sich nicht auf das y in TestABC.main aus! einzige Verbindung: beim Aufruf wird der Wert von main-y nach foo-y kopiert Ausgabe: 5 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) B.increment greift nicht auf nicht-statische Methoden oder Variablen ihrer Klasse zu kann daher als einzige Methode statisch deklariert werden Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) B.increment greift nicht auf nicht-statische Methoden oder Variablen ihrer Klasse zu kann daher als einzige Methode statisch deklariert werden Achtung: Zugriffe auf nicht-statische Teile der Klasse, die sich auf ein Objekt beziehen, sind erlaubt: Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) B.increment greift nicht auf nicht-statische Methoden oder Variablen ihrer Klasse zu kann daher als einzige Methode statisch deklariert werden Achtung: Zugriffe auf nicht-statische Teile der Klasse, die sich auf ein Objekt beziehen, sind erlaubt: Beispiel 1 class X { 2 int k; 3 static void f() { 4 // nicht erlaubt: k = 42; 5 // aber: 6 X x = new X(); 7 x.k = 42; 8 } 9 } Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) – statisch vs. nicht-statisch I Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) – statisch vs. nicht-statisch I nicht-statische Methoden (und Variablen) gehören zu einem Objekt Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) – statisch vs. nicht-statisch I nicht-statische Methoden (und Variablen) gehören zu einem Objekt können nur mit einem Objekt verwendet werden Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) – statisch vs. nicht-statisch I nicht-statische Methoden (und Variablen) gehören zu einem Objekt können nur mit einem Objekt verwendet werden Achtung: in nicht-statischen Methoden existiert immer ein Objekt, this Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) – statisch vs. nicht-statisch I nicht-statische Methoden (und Variablen) gehören zu einem Objekt können nur mit einem Objekt verwendet werden Achtung: in nicht-statischen Methoden existiert immer ein Objekt, this statische Methoden und Variablen sind lediglich Klassengebunden Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) – statisch vs. nicht-statisch I nicht-statische Methoden (und Variablen) gehören zu einem Objekt können nur mit einem Objekt verwendet werden Achtung: in nicht-statischen Methoden existiert immer ein Objekt, this statische Methoden und Variablen sind lediglich Klassengebunden existieren automatisch genau einmal pro Klasse Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) – statisch vs. nicht-statisch I nicht-statische Methoden (und Variablen) gehören zu einem Objekt können nur mit einem Objekt verwendet werden Achtung: in nicht-statischen Methoden existiert immer ein Objekt, this statische Methoden und Variablen sind lediglich Klassengebunden existieren automatisch genau einmal pro Klasse sind ohne Objekt benutzbar Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) – statisch vs. nicht-statisch II Beispiel 1 // f() statisch; wird an der Klasse aufgerufen 2 X.f(); Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) – statisch vs. nicht-statisch II Beispiel 1 2 3 4 5 6 7 // f() statisch; wird an der Klasse aufgerufen X.f(); // k ist nicht statisch X y = new X(); // ... y.k = 73; Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) – statisch vs. nicht-statisch II Beispiel 1 2 3 4 5 6 7 8 9 10 // f() statisch; wird an der Klasse aufgerufen X.f(); // k ist nicht statisch X y = new X(); // ... y.k = 73; // auch zulässig, aber zu vermeiden y.f(); Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) – this this ist immer das aktuelle Objekt Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) – this this ist immer das aktuelle Objekt Beispiel 1 class X { 2 // ... 3 void g() { 4 this.k = 23; 5 // oder, wenn k nicht auch lokal 6 // innerhalb von g() definiert: 7 k = 23; 8 } 9 } Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) – this this ist immer das aktuelle Objekt Beispiel 1 class X { 2 // ... 3 void g() { 4 this.k = 23; 5 // oder, wenn k nicht auch lokal 6 // innerhalb von g() definiert: 7 k = 23; 8 } 9 } 10 X x1 = new X(), x2 = new X(); Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) – this this ist immer das aktuelle Objekt Beispiel 1 2 3 4 5 6 7 8 9 10 11 class X { // ... void g() { this.k = 23; // oder, wenn k nicht auch lokal // innerhalb von g() definiert: k = 23; } } X x1 = new X(), x2 = new X(); x1.g(); // this ist hier x1 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 8 b) – this this ist immer das aktuelle Objekt Beispiel 1 2 3 4 5 6 7 8 9 10 11 12 class X { // ... void g() { this.k = 23; // oder, wenn k nicht auch lokal // innerhalb von g() definiert: k = 23; } } X x1 = new X(), x2 = new X(); x1.g(); // this ist hier x1 x2.g(); // hier this = x2 Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 9 – I 1 2 3 4 5 6 7 8 9 10 11 public double area() { return Math.PI * r * r; } public double perimeter() { return 2 * Math.PI * r; } public double diameter() { return 2 * r; } Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 9 – II 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public boolean overlap(Circle that) { return Math.sqrt ( (this.x - that.x) * (this.x - that.x) + (this.y - that.y) * (this.y - that.y) ) <= this.r + that.r; } public double distance(Circle that) { if (overlap(that)) return 0; return Math.sqrt ( (this.x - that.x) * (this.x - that.x) + (this.y - that.y) * (this.y - that.y) ) - this.r - that.r; } Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 9 – III 1 public void draw(Turtle t) { 2 double b = 2*r * Math.sin(Math.PI / 2 / 180); 3 t.setPosition(x, y); 4 t.lt(90); 5 t.fd(r); 6 t.rt(90); 7 t.pd(); 8 for (int i = 0; i < 360; i++) { 9 t.rt(1); 10 t.fd(b); 11 } 12 t.pu(); 13 } Frederik Kanning EIP Probeklausur – Lösungen 4.0 Aufgabe 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 private Color c; // Konstruktor public ColoredCircle(double x, double y, double r, Color c) { // Wichtig: Oberklassen-Konstruktor vor // allem anderen aufrufen, sonst Fehler super(x, y, r); // Farbe speichern this.c = c; } // Methode aus Oberklasse überschreiben public void draw(Turtle t) { t.setPenColor(c); // überschriebene Methode aufrufen super.draw(t); } Frederik Kanning EIP Probeklausur – Lösungen 4.0 Fragen bis hierhin? Frederik Kanning EIP Probeklausur – Lösungen 4.0