Musterlösung - Vorkurs Informatik

Werbung
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 27.09.2011
Testklausur
Vorkurs Informatik
27.09.2011
Musterlösung
Seite 1 von 10
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 27.09.2011
Aufgabe 1: [15 Punkte]
Algorithmen und Programmierung
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.
[ 7 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. [ 8 Punkte ]
class Programm{
static float algorithmus(){
int a = 2;
float b = 1.0f;
while (a < 4 ){
if (a % 2 == 0) b = b + 2.5f;
a = a + 1;
}
return b;
}
public static void main(String [] args){
float x = algorithmus();
}
}
Seite 2 von 10
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 27.09.2011
Aufgabe 2: [15 Punkte]
Programmierung
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 ]
 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 von 1 bis
n auf dem Bildschirm ausgeben und alle durch sieben teilbaren Zahlen zusätzlich mit einem
Stern markieren. [ 9 Punkte ]
static void sieben(int n){
int i = 1;
while( i <= n){
if( i % 7 == 0){
System.out.println(i+"*");
} else {
System.out.println(i);
}
i = i +1;
}
}
Seite 3 von 10
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 27.09.2011
Aufgabe 3: [15 Punkte]
Rekursion und Programmierung
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 ]
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 10
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 27.09.2011
Aufgabe 4: [30 Punkte]
Klassen, Objekte und Programmierung
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.
 richtig
 falsch
2) Ein Java-Programm darf nur aus einer Klassendeklaration bestehen.
 richtig
 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).
b
1.4
“neu“
Seite 5 von 10
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 27.09.2011
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 ]
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. [ 2 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
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 10
3
4
5
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 27.09.2011
d) Gegeben sei folgende Deklaration eines Objekttyps
class Element{
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
6
wert
naechstes
Ergänzen Sie die Graphik so, dass sie das Ergebnis zeigt, wenn dieses Programmstück so
fortgesetzt wird:
Element b = new Element();
a.setzNaechstes(b);
b.setzNaechstes(new Element());
b.wert = 6;
[ 10 Punkte]
Seite 7 von 10
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 27.09.2011
e) Realisieren Sie für die Klasse Element eine Methode summe(Element element),
welche ausgehend von einem Element element die Summe der Werte aller in der Liste
enthaltenen Elemente berechnet. Die Methode gibt 0 zurück, falls die Liste leer ist,
ansonsten die Summe der Werte. [ 10 Punkte]
Die Methode summe ist wie folgt deklariert:
static int summe(Element element){
}
int s = 0;
while (element != null) {
s = s+ element.wert;
element = element.naechstes;
}
return s;
Seite 8 von 10
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 27.09.2011
Aufgabe 5: [15 Punkte]
Algorithmen und Datenstrukturen
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. [2 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: [ 2 Punkte ]
i. f(n)= 7n2 + 4, g(n)=n2
 richtig
 falsch
ii. f(n) = n4 + 100000 n2, g(n) = n2
 richtig
 falsch
iii. f(n) = 5, g(n) = 1
 richtig
 falsch
2) Begründen Sie Ihre Antwort zur Teilaufgabe 1) (f(n)= 7n2 + 4, g(n)=n2). [2 Punkte ]
i.
f(n) = O(g(n)):  c0 , n0 : n  n0 : f (n)  c0  g (n) , hier c0  8, n0  2 .
ii.
Für alle Funktionswerte größer 2, 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 2.
Seite 9 von 10
Musterlösung
Name, Vorname, Matrikelnummer (Angaben sind freiwillig)
Bitte unbedingt leserlich ausfüllen
Testklausur – Vorkurs Informatik, 27.09.2011
c) Beweisen Sie durch vollständige Induktion, dass die folgende Formel korrekt ist:
[ 9 Punkte ]
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
, d.h. S (n) 
i=n ist gleich
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:
qn 1
q n1  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
q n  1  q n 1  q n q n 1  1


q 1
q 1
Seite 10 von 10
Herunterladen