Musterlösung Vorkurs Informatik 2007

Werbung
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 01.10.2007
Testklausur
Vorkurs Informatik
01.10.2007
Musterlösung
Seite 1 von 9
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 01.10.2007
Aufgabe 1: [20 Punkte]
Algorithmen und Programmierung
stk
lau
Vo su
Un rku r ive rs Mu
rsi Inf ste
tät orm rlö
Do at su
rtm ik ng
un
d
Gegeben sei folgender Algorithmus:
a := 2;
b := 1;
Solange a < 4,
{
wenn a gerade, dann b := b + 2.5;
a := a + 1;
}
gib b zurück;
a) Welchen Wert haben die Variablen a und b nach jedem Durchlauf der Schleife.
[ 8 Punkte ]
Durchlauf
Wert von a
Wert von b
1
2
3
4
3.5
3.5
b) Schreiben Sie den Algorithmus als vollständiges Java-Programm. [ 12 Punkte ]
class Algorithmus{
Te
public static void main (String[] argv){
System.out.println("b: "+algo());
}
}
static float algo(){
int a = 2;
float b = 1;
while( a < 4 ){
if( a % 2 == 0 ){
b = b + 2.5f;
}
a = a + 1;
}
return b;
}
Seite 2 von 9
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 01.10.2007
Aufgabe 2: [15 Punkte]
Programmierung
stk
lau
Vo su
Un rku r ive rs Mu
rsi Inf ste
tät orm rlö
Do at su
rtm ik ng
un
d
a) Gegeben sei die Java-Deklaration eines Arrays:
double[] Daten = {4.5, 7, 8.5, -2.1, 0.7};
Welchen Wert haben die folgenden Ausdrücke? [ 4 Punkte ]
________________4.5___________________
Daten[0];
Daten[(Daten.length-2)/2]; _________________7__________________
b) Ermitteln Sie den Wahrheitswert des angeführten booleschen Ausdrucks. [ 2 Punkte ]
4 true
(8 <= 8) || (16 < 2)
… false
c) Schreiben Sie eine Java-Funktion static void sieben(int n), die alle durch
sieben teilbaren Zahlen zwischen 1 und n bestimmt. Die Funktion soll die Zahlen zwischen
1 und n auf dem Bildschirm ausgeben und alle durch sieben teilbaren Zahlen zusätzlich mit
einem Stern markieren. [ 9 Punkte ]
static void sieben(int n){
Te
int i = 2;
while( i < n){
if( i % 7 == 0){
System.out.println(i+"*");
} else {
System.out.println(i);
}
i = i +1;
}
}
Seite 3 von 9
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 01.10.2007
Aufgabe 3: [15 Punkte]
Rekursion und Programmierung
stk
lau
Vo su
Un rku r ive rs Mu
rsi Inf ste
tät orm rlö
Do at su
rtm ik ng
un
d
Die folgende rekursive Berechungsvorschrift liefert den größten gemeinsamen Teiler zweier
positiver ganzer Zahlen:
x falls x = y
⎧
⎪
ggT ( x, y ) = ⎨ ggT ( x − y, y ) falls x > y
⎪ ggT ( x, y − x) falls x < y
⎩
a) Berechnen Sie ggT(16,6) durch aufeinanderfolgendes Anwenden der Rekursionsvorschrift.
(Hinweis: Der erste Schritt ist unten angegeben und soll nun weitergeführt werden.
[ 6 Punkte ]
Lösung: ggT(16,6) = ggT(10,6) = ggT(4,6) = ggT(4,2) = ggT(2,2) = 2
b) Schreiben Sie eine rekursive Java-Methode ggT, die den größten gemeinsamen Teiler
zweier Zahlen x und y gemäß der Berechnungsvorschrift bestimmt. [ 9 Punkte ]
Te
static int ggT(int x, int y){
if( x > y ){
return ggT( x - y, y );
}
if( x < y ){
return ggT( x, y - x );
}
return x;
}
Seite 4 von 9
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 01.10.2007
Aufgabe 4: [30 Punkte]
Klassen, Objekte und Programmierung
stk
lau
Vo su
Un rku r ive rs Mu
rsi Inf ste
tät orm rlö
Do at su
rtm ik ng
un
d
a) Entscheiden Sie für folgende Behauptungen, ob sie richtig oder falsch sind. [ 4 Punkte ]
1) In einem Java-Programm können mehrere Objekte einer Klasse vorhanden sein.
4 richtig
… falsch
2) Ein Java-Programm darf nur aus einer Klassendeklaration bestehen.
… richtig
4 falsch
b) Eine Klasse Aklasse ist wie folgt deklariert:
class Aklasse{
float a;
String b;
Aklasse(float x, String y){
a = x;
b = y;
}
}
Stellen Sie graphisch dar, wie sich die Anweisung
Aklasse b = new Aklasse(1.4,“neu“);
im Speicher auswirkt. [ 4 Punkte ]
(Hinweis: Hintergrund der Frage sind die Begriffe Objekt, Objektvariable und Referenz).
Te
b
1.4
“neu“
Seite 5 von 9
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 01.10.2007
c) 1. Deklarieren Sie eine Klasse mit Namen Test. Die Klasse soll ein int-Array a als
Attribut haben. Das Array soll nicht instantiiert werden. [ 2 Punkt ]
stk
lau
Vo su
Un rku r ive rs Mu
rsi Inf ste
tät orm rlö
Do at su
rtm ik ng
un
d
class Test{
int[] a;
}
2. Schreiben Sie einen Konstruktor für die Klasse Test, der einen int-Parameter n hat.
Der Konstruktor soll das Array a der Klasse Test auf ein Array der Länge n
instantiieren. [ 3 Punkte ]
Test(int n){
a=new int[n];
}
3. Schreiben Sie eine Methode void invers(), die die Elemente im Array a in
umgekehrter Reihenfolge in a speichert. [ 8 Punkte ]
Beispiel:
a invers
a
5 6 2 1 3 4
Te
0
1
2
3
4
5
4 3
1 2 6 5
0
2
1
void invers(){
int buffer, pos;
for(int x=0; x<a.length/2; x++){
pos=a.length-x-1;
buffer=a[x];
a[x]=a[pos];
a[pos]=buffer;
}
}
Seite 6 von 9
3
4
5
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 01.10.2007
d) Gegeben sei folgende Deklaration eines Objekttyps
class Element{
stk
lau
Vo su
Un rku r ive rs Mu
rsi Inf ste
tät orm rlö
Do at su
rtm ik ng
un
d
int wert;
Element naechstes;
void setzNaechstes(Element next){
naechstes = next;
}
}
Das Ergebnis des Programmstücks
Element a = new Element();
lässt sich graphisch so darstellen:
a
b
wert
naechstes
Ergänzen Sie die Graphik so, dass sie das Ergebnis zeigt, wenn dieses Programmstück so
fortgesetzt wird:
Te
Element b = new Element();
a.setzNaechstes(b);
b.setzNaechstes(new Element());
[ 9 Punkte]
Seite 7 von 9
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 01.10.2007
Aufgabe 5: [20 Punkte]
Algorithmen und Datenstrukturen
stk
lau
Vo su
Un rku r ive rs Mu
rsi Inf ste
tät orm rlö
Do at su
rtm ik ng
un
d
a) Geben Sie die Folge der Werte der Knoten an, die in dem angegebenen binären Suchbaum
besucht werden, wenn in dem gegebenen Baum nach dem Wert 6 gesucht wird. [4 Punkte ]
3
1
7
6
8
Lösung:________________________3, 7, 6__________________________________
b)
1) Für welche der folgenden Kombinationen von Funktionen f(n), g(n) ist die Aussage
f(n) = O(g(n)) korrekt: [ 3 Punkte ]
i. f(n)= 7n2 + 4, g(n)=n2
4 richtig
… falsch
ii. f(n) = n4 + 100000 n2, g(n) = n2
… richtig
4 falsch
iii. f(n) = 5, g(n) = 1
4 richtig
… falsch
Te
2) Begründen Sie Ihre Antwort zur Teilaufgabe 1) (f(n)= 7n2 + 4, g(n)=n2). [3 Punkte ]
i.
f(n) = O(g(n)): ∃ c0 , n0 : ∀n > n0 : f (n) < c0 ∗ g (n) , hier c0 = 8, n0 = 0
ii.
Für alle Funktionswerte größer 0, wächst die Funktion 8n2 stärker als 7n2+4.
iii.
Der Funktionsgraph von 8n2 liegt oberhalb von 7n2+4, für alle Funktionswerte größer 0.
Seite 8 von 9
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 01.10.2007
c) Beweisen Sie durch vollständige Induktion, dass die folgende Formel korrekt ist:
[ 10 Punkte ]
stk
lau
Vo su
Un rku r ive rs Mu
rsi Inf ste
tät orm rlö
Do at su
rtm ik ng
un
d
Behauptung: Die Summe S(n)= q 0 + q 1 + q 2 + … + q n der Potenzzahlen q i von i=0 bis
q n+1 − 1
q n+1 − 1
i=n ist gleich
, d.h. S (n) =
q −1
q −1
Induktionsanfang (n=1):
q1+1 − 1 q 2 − 1 (q − 1)(q + 1)
S (1) =
=
=
= q +1
q −1
q −1
q −1
Induktionsschritt:
Annahme:
q n−1 − 1
qn −1
S (n − 1) =
, S (n − 2) =
, …, S (1) = q + 1
q −1
q −1
Beweis:
q n − 1 n q n − 1 + q n (q − 1)
S (n) = S (n − 1) + q =
+q =
q −1
q −1
n
Te
q n − 1 + q n +1 − q n q n +1 − 1
=
=
q −1
q −1
Seite 9 von 9
Herunterladen