Technische Universität Braunschweig
Institut für Programmierung und Reaktive Systeme
Programmieren I
Dr. Werner Struckmann 17. Februar 2018
Name:
Vorname:
Matrikelnummer: Kennnummer:
Anrede: Frau Herr
Studiengang: Bachelor Master Diplom Frühstudium Erasmus Fachrichtung: Informatik Wirtschaftsinformatik Mathematik Physik Mobilität und Verkehr Psychologie Maschinenbau ( Mechatronik)
Elektrotechnik Wirtschaftsingenieurwesen ( Bauing E-Technik Maschbau) Finanz- und Wirtschaftsmathematik IST Sonstige:
Versuch der Notenverbesserung:
Bitte kreuzen Sie an, falls Sie teilgenommen haben: Programmierlabor, Legolabor.
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 5 10 16 8 11 20 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 dürfen Ergebnisse weder telefonisch noch per E-Mail mitgeteilt werden.
Die Ergebnisse der Klausur erfahren Sie voraussichtlich ab dem 22. Februar 2018 auf der Web-Seite dieser Veranstaltung. Ihre Klausur können Sie am
Freitag, den 23. Februar 2018,
von 10:00 bis 14:00 Uhr im Raum 251 des Informatikzentrums einsehen.
Aufgabe 1: Bitte kreuzen Sie die wahren Aussagen an. Für die vollständigen richtigen Antworten einer Gruppe erhalten Sie einen Punkt. Die Fragen dieser Aufgabe beziehen sich auf Java 8.
Interface:
Ein Interface muss eine abstrakte oder eine konkrete Methode enthalten:
In einem Interface kann eine Methode den Modifikator defaultbekommen:
In einem Interface können Methoden den gleichen Namen bekommen:
Operatoren:
Der Operator+ wird stets numerisch ausgewertet:
Der Operator= ist rechtsassoziativ:
Der Operator% liefert immer Werte >= 0:
Arrays:
Die Elemente eines Arrays können zum Beispiel vom Typ charsein:
Die Länge eines Arrays kann stets vom Compiler festgestellt werden:
Die Elemente eines Arrays können geändert werden:
Objektorientierung:
Von astrakten Klassen können keine Objekte erzeugt werden:
Ein Objekt einer Klasse kann
evtl. Variablen anderer Klassen zugeordnet werden:
Man kann einstellen, dass Klassen
von anderen Klassen durch extendsnicht erweitert werden:
Deklaration:
Die Deklaration float w = 0.1F; erzeugt eine Fehlermeldung:
Die Deklaration float x = 2E5f; erzeugt eine Fehlermeldung:
Die Deklaration float y = (double) 2; erzeugt eine Fehlermeldung:
Die Deklaration float z = ’f’; erzeugt eine Fehlermeldung:
Die Deklaration float _$_2 = 2.0f; erzeugt eine Fehlermeldung:
5 Punkte
– 2 –
Aufgabe 2: (Zahldarstellung) Schreiben Sie die Hexadezimalzahl (0x7D)16 als Binär-, Oktal- und als Dezimalzahl in Java. Durch welche Bitfolge wird der byte-Wert −18 in Java gespeichert? Welchen Wert stellt der Ausdruck 17 - 013 + 0xd - 0b1110 in Java dar?
a) (0x7D)16 als Binärzahl in Java:
b) (0x7D)16 als Oktalzahl in Java:
c) (0x7D)16 als Dezimalzahl in Java:
d) Byte-Darstellung von −18:
e) Der Wert von 17 - 013 + 0xd - 0b1110:
10 Punkte
Aufgabe 3: (Kontrollstrukturen, Operatoren, Arrays) Welche der beiden folgenden Schlei- fen terminieren? Geben Sie im Falle der Terminierung an, welche Werte die Variablen besitzen, nachdem die jeweiligen Anweisungen ausgeführt wurden.
a) int x = 12;
int y = 11;
while ( x > y ) { switch (x / y) {
case 0 : x = x + 1;
case 1 : y = y - 4; break;
case 2 : y = y + 8;
case 3 : x = x + 1; break;
default : y = y + 3;
} }
Die Schleife terminiert: ja nein x = y =
b) int x = 8;
int y = 5;
for (int i = 1; i < x + y; i = i + 2) { x = y;
if ( x < y ) {
if ( x > y ) x++; else y--;
} else {
if ( x > y ) y++; else x--;
} }
Die Schleife terminiert: ja nein x = y =
Geben Sie für jeden der folgenden Ausdrücke den primitiven Typ und den Wert des Aus- drucks an. Setzen Sie vor jedem Ausdruck die Deklarationint x = 14; voraus.
c) (x >> 1 ^ 7 ) pr. Typ: Wert:
d) (x == (x | 2)) pr. Typ: Wert:
e) (x + ~2 - x%2) pr. 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 <= 15; i = i+3) a[i/3] = 10 - i%4;
for (int i = 5; i >= 0; i--) a[i] = a[a[i] - 6] + 2*i - 2;
a[0] = a[1] = a[2] =
a[3] = a[4] = a[5] =
16 Punkte
Aufgabe 4: (Programmverständnis) Gegeben seien die Methode static void g(int[][] a, int... t) {
int m = t[0], n = t[0];
for (int l = 0; l <= t.length-1; l++) { if (t[l] < m) m = t[l];
if (t[l] > n) n = t[l];
}
assert m <= a.length & n >= a.length;
int y = a[0].length;
int i = 0;
for (int k = 1; k <= a.length-1; k++) { if (a[k].length > y) {
y = a[k].length;
i = k;
} }
int s = 0;
for (int j = 0; j <= a[i].length-1; j = j+2) { s = s + a[i][j] - a[i][j+1];
}
System.out.println(s);
}
sowie das Programmfragment
int[][] a = {{5,3,1},{2,1,3,2},{5,7}};
g(a, 2, 4);
a) Was macht die Methode g in Abhängigkeit der Parameter a und int... t? Welche Fehler können während der Laufzeit dieser Methode auftreten? Begründen Sie Ihre Aussage.
b) Wie lautet die Ausgabe des Programmfragments?
8 Punkte Lösung:
– 5 –
Aufgabe 5: (Rekursion) Gegeben sei die folgende rekursive Methode:
static int f(int x, int y) { if (y <= 1)
return y + 2;
else
if (x == 1) return x + 1;
else
return 2 + f(f(x-3,y), y/2);
}
Welchen Wert liefert der Aufruf f(16, 3)? In welcher Reihenfolge und mit welchen Pa- rametern wird f dabei aufgerufen? Geben Sie die Reihenfolge der Aufrufe explizit an.
Wie groß ist diemaximale Rekursionstiefe, d. h. die maximale Anzahl gleichzeitig aktiver Aufrufe? Liefert für alle int-Werte x ≥ 0, y ≥ 0 der Aufruf f(x, y) einen int-Wert?
Begründen Sie Ihre Antwort.
11 Punkte Lösung:
– 6 –
Aufgabe 6: (Programmerstellung) Eine derGoldbachschen Vermutungen(Christian Gold- bach, 1690-1764) sagt, dass jede gerade Zahl n≥6 als Summe von zwei ungeraden Prim- zahlen beschrieben werden kann. Für alle Zahlen ist dies bis heute noch nicht bewiesen.
Beispiele: 6 = 3 + 3, 8 = 3 + 5, 10 = 3 + 7 = 5 + 5, ...
Schreiben Sie ein lauffähiges Java-Programm, das diese Vermutung bis n = 1000 prüft und die Summe ausgibt. Beschreiben Sie Ihren Algorithmus. Schreiben Sie Ihren Programmcode auf die nächste Seite. Sie dürfen eigene Hilfsmethoden schreiben, aber weder Klassen noch Methoden importieren. Auf diese Aufgabe erhalten Sie Punkte, wenn Ihr Programm erkennbar geeignet ist, die Problemstellung zu lösen.
20 Punkte Lösung:
– 7 –
– 8 –
– 9 –