Technische Universität Braunschweig
Institut für Programmierung und Reaktive Systeme
Programmieren I
Dr. Werner Struckmann 26. August 2013
Name:
Vorname:
Matrikelnummer: Kennnummer:
Anrede: Frau Herr
Studiengang: Bachelor Master Diplom Frühstudium Erasmus Fachrichtung: Informatik Wirtschaftsinformatik Physik Mathematik Mobilität und Verkehr Mechatronik Maschinenbau Psychologie
Finanz- und Wirtschaftsmathematik IST Sonstige:
Die Bearbeitungszeit beträgt 120 Minuten. Die Klausur besteht aus 6 Aufgaben. Sie haben die Klausur bestanden, wenn Sie mindestens 35 von 70 möglichen Punkten erreicht haben.
Aufgabe 1 2 3 4 5 6 Σ
max. Punkte 8 16 6 10 12 18 70
Punkte
Note:
Bitte prägen Sie sich Ihre Kennnummer gut ein. Aus Datenschutzgründen wird das Klau- surergebnis nur unter dieser Kennnummer bekannt gegeben. Aus den gleichen Gründen können Ergebnisse weder telefonisch noch per E-Mail mitgeteilt werden.
Die Ergebnisse der Klausur erfahren Sie ab dem 2. September 2013 auf der Web-Seite dieser Veranstaltung. Ihre Klausur können Sie am
Donnerstag, den 5. September 2013,
von 09:00 bis 11:00 Uhr und von 14:00 bis 16:00 Uhr im Raum 251 des Informatikzentrums einsehen.
Aufgabe 1: (Programmverständnis) Gegeben seien die Methode static int wasPassiert(int[] a) {
int[] b = new int[a.length];
for (int i=0; i<a.length; i++) b[i] = a[i];
for (int j=1; j<b.length; j++) { int k = b[j],
i = j-1;
while (i>=0 && b[i]>k) { b[i+1] = b[i];
i--;
}
b[i+1] = k;
}
int c = 0;
for (int i=0; i<b.length-1; i++) if (b[i+1]-b[i]>c) c = b[i+1]-b[i];
return c;
}
sowie das Programmfragment int[] a = {0,4,6,0,1,8,13};
System.out.println("("+wasPassiert(a)+")");
a) Beschreiben Sie den Rückgabewert der Methode wasPassiertin Abhängigkeit vom Parametera.
b) Wie lautet die Ausgabe des Programmfragments?
8 Punkte Lösung:
Aufgabe 2: (Kontrollstrukturen, Operatoren, Felder) Welche der folgenden Schleifen ter- minieren? Geben Sie im Falle der Terminierung an, welche Werte die Variablen a und b besitzen, nachdem die jeweiligen Anweisungen ausgeführt wurden.
a) int a = 1;
int b = 2;
while (a < 6) { a = a + 2;
switch (a%3) { case 0 : b = a-b;
case 1 : b = a*b;
} }
Die Schleife terminiert: ja nein a = b =
b) int a = 1;
int b = 2;
do {
a = a + 2;
b = a + b;
if ((b % 3) == 0) continue;
b = b + 1;
if ((b % 3) == 2) break;
} while (a!=0);
Die Schleife terminiert: ja nein a = b =
Geben Sie für jeden der folgenden Ausdrücke den Typ und den Wert des Ausdrucks an.
Setzen Sie vor jedem Ausdruck die Deklaration int x = 11;voraus.
c) (x-=2)*(x+=2) Typ: Wert:
d) (x>>1)^2 Typ: Wert:
e) 2*x/2==x/2*2 Typ: Wert:
Es sei a durch int[] a = new int[6] deklariert. Geben Sie den Inhalt des Felds nach Ausführung der beiden folgenden Anweisungen an:
f) for (int i = 0; i < a.length; i++) a[i] = (4*(i+1))%5;
for (int i = a.length-1; i >= 0; i--) a[i] = a[1+a[i]];
a[0] = a[1] = a[2] =
a[3] = a[4] = a[5] =
16 Punkte
– 3 –
Aufgabe 3: (Grundlagen) Bitte kreuzen Sie an. Für jede richtige Antwort erhalten Sie einen Punkt, für jede falsche Antwort wird ein Punkt abgezogen. Kein Kreuz bzw. zwei Kreuze bedeuten 0 Punkte. Die minimale Gesamtpunktzahl für diese Aufgabe beträgt 0 Punkte. Alle Fragen dieser Aufgabe beziehen sich auf Java.
wahr falsch Alle Kommentare beginnen und enden mit dem folgenden Zeichen: /
Die Deklaration float x = ’5’;erzeugt einen Fehler.
Der Operator +darf auch auf Objekte der KlasseStringangewendet werden.
Statische Methoden einer Klasse dürfen nicht auf die Instanzvariablen
ihrer Klasse zugreifen.
Ein Bezeichner/identifier muss mindestens einen Buchstaben enthalten.
Eine Klasse darf höchstens eine Methode mit dem Namen main enthalten.
6 Punkte Aufgabe 4: (Rekursion) Gegeben sei die folgende rekursive Methode:
static int f(int x, int y) { if (x==0)
return 1;
else if (y<=2) return 2;
else
return f(x-2,y-2)-2*f(x-2,y);
}
Welchen Wert liefert der Aufruff(8,4)? In welcher Reihenfolge und mit welchen Parame- tern wirdfdabei aufgerufen? Geben Sie die Reihenfolge der Aufrufe explizit an. Wie groß ist die maximale Rekursionstiefe, d. h. die maximale Anzahl gleichzeitig aktiver Aufrufe?
Terminiert für allex≥0,y≥0 der Aufruff(x,y)mit der Rückgabe einesint-Wertes?
Begründen Sie Ihre Antwort.
10 Punkte Lösung:
Aufgabe 5: (Objektorientierung) Ein Intervall [a, b] wird durch zwei Zahlen a und b definiert. Das Intervall enthält alle Zahlen von a bisb:
[a, b] ={x∈R | a≤x≤b}
Gegeben sei die KlasseIntervallzur Darstellung von Intervallen. Die Methodelaenge() soll die Länge des aktuellen Intervalls liefern. Die Methode geschachtelt(Intervall i) soll den Wert true liefern, falls das Intervall i Teilmenge des aktuellen Intervalls ist.
Die Methode compareTo soll das aktuelle Intervall entsprechend seiner Länge mit dem Parameter vergleichen.
01 public class Intervall extends Comparable { 02 public double a, b;
03 public Intervall(double a, double b) { 04 this.a = Math.min(a,b);
05 this.b = Math.max(a,b);
06 }
07 public boolean geschachtelt(Intervall i) { 08 if (a<=i.a || b>=i.b) return true;
09 return false;
10 }
11 public static double laenge() { 12 return b-a;
13 }
14 public int compareTo(Object o) { 15 Intervall i = o;
16 if (laenge() == i.laenge())
17 return 0;
18 if (laenge() < i.laenge())
19 return -1;
20 else
21 return 1;
22 }
23 }
Außerdem sei das folgende Programmfragment gegeben:
24 Intervall i = new Intervall(6.0,2.0);
25 Intervall j = new Intervall(3.0,5.0);
26 System.out.println("Länge: "+i.laenge());
27 System.out.println(i.geschachtelt(j));
a) Die Programmzeilen 01 bis 27 enthalten Fehler. Markieren Sie die Fehler im Pro- grammtext. Achtung: Für Programmstellen, die nicht zu einem Fehler führen, aber als fehlerhaft gekennzeichnet sind, werden Punkte abgezogen.
b) Geben Sie die korrigierten Zeilen an. Was gibt das korrigierte Programm aus?
Schreiben Sie Ihre Lösung zum Aufgabenteil b) bitte auf Seite 6.
12 Punkte
– 5 –
Lösung zu Aufgabe 5
Aufgabe 6: (Programmerstellung) Gegeben sei eine Folgeavon verschiedenenint-Werten a0, . . . , an−1, n ≥ 1 sowie ein int-Wert x, der in der Folge a enthalten ist. Schreiben Sie eine Methode
static int next(int[] a, int x),
die solch ein Feld a und solch einen Wert x als Parameter erhält. Die Methode soll den kleinsten Wert von a liefern, der größer alsx ist.
Falls der Parameter a das Null-Objekt ist oder keine Werte enthält oder nicht al- le Elemente verschieden sind oder x nicht enthält, soll beim Aufruf der Methode eine IllegalArgumentException ausgelöst werden. Falls x der größte Wert von a ist, soll x das Ergebnis sein. Sie dürfen weder Methoden noch Klassen importieren, aber Hilfsmetho- den schreiben. Die Folge a soll durch einen Aufruf von next nicht geändert werden.
Beispiel: Falls a die Folge (12,7,5,9,13,24) und x der Wert 5 ist, soll der Aufruf next(a,x) den Wert 7 liefern, da 7 die nächstgrößere Zahl von 5 ist.
Erläutern Sie Ihre Methode.
18 Punkte Lösung:
– 7 –