Probeklausur - Universität zu Lübeck

Werbung
Universität zu Lübeck
Institut für Telematik
Prof. Dr. Stefan Fischer
Probeklausur im Fach Programmieren“
”
Hinweise zur Bearbeitung:
Es sind keinerlei Hilfsmittel zugelassen.
Diese Klausur umfasst 18 Seiten. Prüfen Sie Ihr Exemplar auf Vollständigkeit.
Notieren Sie alle Lösungen direkt auf den Aufgabenblättern.
Schreiben Sie nicht mit Bleistift sondern mit Tinte oder Kugelschreiber. Verwenden
Sie keinen Rotstift.
Vermerken Sie auf jedem abgegebenen Blatt Ihren vollständigen Namen und Ihre
Matrikelnummer.
Füllen Sie das folgende Formularfeld aus:
Name:
.................................................................
Vorname:
.................................................................
Studiengang:
.................................................................
Matrikel-Nr.:
.................................................................
Versuch Nr.:
1
2
3
4
Viel Erfolg!
Aufgabe
1
2
3
4
5
maximale Punktzahl
10
13
10
14
13
Summe:
60
Note:
Seite 1 von 18
erreichte Punktzahl
Name, Vorname:
Aufgabe 1
Matrikel-Nr.:
(10 Punkte)
Bewerten Sie durch Ankreuzen, welche der folgenden Aussagen korrekt bzw. nicht korrekt
sind. Ein richtig gesetztes Kreuz gibt 0,5 Punkte, ein falsch gesetztes Kreuz -0,5 Punkte.
Aussagen, die mit keinem Kreuz versehen werden, gehen nicht in die Bewertung ein. Die
minimale Punktzahl beträgt 0 Punkte.
(10 Punkte)
korrekt falsch
2
2
Moderne Mikroprozessoren arbeiten objektorientiert.
2
2
In Java ist der primitive Datentyp double immer 32 Bit breit.
2
2
In Java kann der primitive Datentyp int Werte zwischen −215 und 215 − 1
speichern.
2
2
Abstrakte Klassen können keine Konstruktoren enthalten.
2
Wird ein Attribut einer Java-Klasse static deklariert, so kann man auch
dann darauf zugreifen, wenn noch keine Instanzen dieser Klasse erzeugt
wurden.
2
2
Die Main-Methode eines Java-Programms muss immer static deklariert
werden.
2
2
Die Umgebungsvariable CLASSPATH“ kann eine Auflistung von Jar”
Dateien und Verzeichnissen enthalten, in denen die für ein Projekt erforderlichen Class-Dateien abgelegt sind.
2
2
Java-Bytecode kann von den meisten Mikroprozessoren direkt als Maschinencode verarbeitet werden.
2
2
Der Exponent einer IEEE754 -Zahl wird in Zweierkomplementdarstellung
gespeichert.
2
2
Bei der Addition im Einerkomplement kann der Übertrag stets ignoriert
werden.
2
2
Bei der Zweierkomplementdarstellung muss das Vorzeichenbit anders behandelt werden als die übrigen Bits.
2
2
Ein Algorithmus ist deterministisch, wenn er bei jedem Ablauf mit den
gleichen Eingaben dieselbe Berechnung durchführt.
2
2
2
2
In Java ist der primitive Datentyp double eine IEEE754 -Fließpunktzahl.
2
In Java ist der primitive Datentyp int immer 32 Bit breit.
Seite 3 von 18
korrekt falsch
2
2
Es gibt nichtterminierende Java-Programme.
2
2
Eine Oberklasse erbt von ihrer Unterklasse alle Konstruktoren.
2
2
Eine Instanz eines Objektes nennt man auch Klasse.
2
Eine Instanz einer Klasse ist insbesondere vom Typ der Oberklasse dieser
Klasse.
2
2
Wird ein Konstruktor in der Unterklasse überschrieben, so kann der Code
des Konstruktors der Oberklasse mittels des Schlüsselwortes super trotzdem aufgerufen werden.
2
2
Ein interface kann über Variablen verfügen.
2
Seite 4 von 18
Name, Vorname:
Matrikel-Nr.:
Aufgabe 2 : Zahlenumrechnung (13 Punkte)
Achten Sie darauf, dass sämtliche Berechnungsschritte nachvollziehbar sind!
(a) Zweier-Komplement: (8 Punkte)
a) Rechnen Sie die drei Dezimalzahlen -4, 25 und -80 in 8-Bit-Zweierkomplementdarstellung um.
b) Addieren die drei Zahlen aus Aufgabenteil (a) in 8-Bit-Zweierkomplementdarstellung.
Seite 5 von 18
(b) Stellen Sie die Zahl −21, 37510 in der IEEE 754-Darstellung mit 32 Bit dar. Geben Sie
bei der Umrechnung den Rechenweg an und benennen Sie die drei Teile, aus denen
eine Zahl in der IEEE 754-Darstellung besteht. (5 Punkte)
Seite 6 von 18
Name, Vorname:
Matrikel-Nr.:
Aufgabe 3 : Java-Fehlerfinden (10 Punkte)
(a) In folgendem Java-Programm haben sich 10 Syntaxfehler eingeschlichen. Kennzeichnen Sie sämtliche Fehler im Quelltext und machen Sie Korrekturvorschläge. Für jede
richtige Verbesserung erhalten Sie einen Punkt. Für jeden von Ihnen (unbeabsichtigt) eingebauten Fehler wird Ihnen ein Punkt abgezogen. Die minimal erreichbare
Punktzahl beträgt bei dieser Aufgabe 0 Punkte. (10 Punkte)
1
public klasse Add {
2
public static void main( String [0] args) {
byte [] ia1=new byte (2);
byte [] ia2=new byte [3];
ia1 [1]=1;
ia1 [0]=4;
ia2 [1]=2;
ia2 [0]=9;
print (add(ia1;ia2 ));
}
3
4
5
6
7
8
9
10
11
12
static byte [] add(byte [] a, byte [] b {
int maxlength ==0;
if (a.length >b. length )
maxlength =a. length ;
System .out. println (" maxlength ist " maxlength );
else
maxlength =b. length ;
byte [] c = new byte[ maxlength +1];
byte uebertrag =0;
for (int i=0; i< maxlength +1; i++) {
byte z1 =0;
byte z2 =0;
if (i<a. length ) z1=a[i];
if (i<b. length ) z2=b[i];
c[i]= (byte )(( z1+z2+ uebertrag )%10);
uebertrag = (byte )(( z1+z2+ uebertrag )/10);
}
return c;
}
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public static this print (byte [] ia) {
for (int i=ia.length -1; i >=0;i--) {
system .out. print (ia[i]);
}
System .out. println ();
}
34
35
36
37
38
39
40
}
Seite 7 von 18
Seite 8 von 18
Name, Vorname:
Matrikel-Nr.:
Aufgabe 4 : Java-Implementierung
(14 Punkte)
(a) Geben Sie einen Algorithmus an, der die Dezimal-Quersumme einer int-Zahl namens
ganzzahl berechnet und das Ergebnis als int zurückliefert. Der Rückgabewert soll
immer positiv sein.
Beispiele:
ganzzahl
5
123
−123
89012
richtiges Ergebnis
5
6
6
20
Vervollständigen Sie hierzu die folgende Java-Methode! (8 Punkte)
1
public static int quersumme (int ganzzahl ){
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
}
Seite 9 von 18
(b) Analysieren Sie das folgende Programm und achten Sie dabei insbesondere auf die verschiedenen Gültigkeitsbereiche der Klasse, der Methoden und der lokalen Variablen.
Was wird auf der Konsole ausgegeben, wenn das Programm mit dem Übergabeparameter
21 aufgerufen wird? Begründen Sie Ihre jeweilige Antwort kurz. (6 Punkte)
1
public class Gueltigkeitsbereiche {
2
static int i = 10;
3
4
public static void main( String [] args) {
5
6
System .out. println ("a) i = "+i);
7
8
i = Integer . valueOf (args [0]);
9
10
int i = 5;
11
12
System .out. println ("b) i = "+i);
13
14
classMethod ();
15
16
Gueltigkeitsbereiche bereiche = new Gueltigkeitsbereiche ();
System .out. println ("f) j = " + bereiche . memberMethod ());
17
18
}
19
20
public static void classMethod (){
21
22
System .out. println ("c) i = "+i);
23
24
int i = 42;
25
26
System .out. println ("d) i = "+i);
27
}
28
29
public int memberMethod (){
30
31
int j = 88;
{
j = 5;
}
32
33
34
35
36
System .out. println ("e) i = " + (++i));
return j;
37
38
}
39
40
}
Seite 10 von 18
Name, Vorname:
Matrikel-Nr.:
.
Seite 11 von 18
Aufgabe 5 : UML (13 Punkte)
(a) Setzen Sie das UML-Diagramm aus Abbildung 1 in Java-Klassen um. Geben Sie
vollständige Klassendefinitionen und Methodenköpfe an. Methoden- und Konstruktorenrümpfe brauchen Sie jedoch nicht mit anzugeben! (10 Punkte)
Obst
# farbe: String
+ anzahl: int
+ Obst(farbe: String)
+ gibAnzahl(): int
# istSuess() : boolean
Erdbeere
Zitrone
# gewicht: double
- sauer : boolean
+ groesse: int
- reif: boolean
+ Erdbeere(farbe: String, groesse: int, reif: boolean)
+ istReif() : boolean
+ setzeReif(reif: boolean) : void
+ Zitrone (farbe: String, gewicht: double, sauer: boolean)
+ gibGewicht(): double
Abbildung 1: UML-Klassendiagramm
Seite 12 von 18
Name, Vorname:
Matrikel-Nr.:
.
Seite 13 von 18
(b) Schreiben Sie eine main()-Methode, die folgende Aufgaben ausführt:
a) Legen Sie jeweils abwechselnd Erdbeer- und Zitronenobjekte an, bis insgesamt
10 Obststücke angelegt sind. Um die Anzahl der insgesamt angelegten Obststücke
zu ermitteln, verwenden Sie die Klassenvariable anzahl der Klasse Obst
(3 Punkte)
Seite 14 von 18
Name, Vorname:
Matrikel-Nr.:
Platz für Notizen
Seite 15 von 18
Name, Vorname:
Matrikel-Nr.:
Platz für Notizen
Seite 17 von 18
Herunterladen