ProbeKlausur, Lösung

Werbung
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
Herunterladen