klausurAugust2011MitLoesungsvorschlaegen

Werbung
Klausur zur Vorlesung „Einführung in die Informatik“ 04.08.2011 Name:___________________________Matrikelnummer:__________________ Studiengang:_____________________Semester/Versuch:_______/_________ Bearbeitungszeit: 60 min Punkteverteilung A1 A2 A3 A4 A5 A6 A7 9 6 6 3 3 6 7 Summe der Punkte: 40 A1 A2 A3 A4 A5 A6 A7 Σ 1 Aufgabe 1: Konzeptuelle und logische Modellierung von Datenbanken (9 Punkte) Es soll eine Datenbank für ein Reservierungssystem einer Hotelkette entworfen werden. (1) (5 P) Vervollständigen Sie das auf der nächsten Seite angedeutete Entity‐Relationship‐
Modell, sodass folgende Entity‐ und Relationship‐Typen und Attribute abgebildet werden: ƒ
Gast: mit den Attributen GastNr, Vorname und Nachname ƒ
Adresse: mit den Attributen AdrNr, Land, Ort, PostalCode, Straße und HausNr ƒ
Gebäude: mit den Attributen GebNr und AnzStockwerke ƒ
Zimmer: mit den Attributen ZimNr, Größe und AnzBetten ƒ
Kategorie: mit den Attributen KatNr, Bezeichnung, Ausstattung und Foto ƒ
hat: zwischen Gebäude und Zimmer ƒ
hat: zwischen Zimmer und Kategorie ƒ
hat: zwischen Gebäude und Adresse (eindeutig) ƒ
hat: zwischen Gast und Adresse (eindeutig) ƒ
reserviert: zwischen Gast und Zimmer mit den Attributen Von, Bis und Preis Hinweis: Vergessen Sie nicht, die Primärschlüssel zu markieren und die Funktionalitäten einzutragen! 2 (2) (4 P) Überführen Sie Ihr ER‐Modell aus Teilaufgabe (1) in ein relationales Schema und verfeinern Sie das Schema durch Elimination von Relationen! Hinweis: Nutzen Sie die Funktionalitätsangaben der Relationship‐Typen, um zu entscheiden, ob für den jeweiligen Relationship‐Typ eine eigene Tabelle notwendig ist! 3 Aufgabe 2: SQL (6 Punkte) Gegeben sei ein Ausschnitt der aus der Zentralübung bekannten Universitätsdatenbank. Professoren
Studenten
Rang Raum MatrNr
Vorlesungen
PersNr
Name
Name
Semester
VorlNr
Titel
2125
Sokrates
C4
226
24002
Xe nokrates
18
5001
Grund züge
4
2137
2126
Russel
C4
232
25403
Jonas
12
5041
Ethik
4
2125
2127 Kopernikus
C3
310
26120
Fichte
10
5043
Erkenntnistheorie
3
2126
2133
C3
52
26830
Aristoxenos
8
5049
Mäeutik
2
2125
C3
309
27550 Schopenhaue r
6
4052
Logik
4
2125
3
5052
Wissenschaft
3
2126
2
5216
Bioethik
2
2126
Popper
2134 Augustinus
2136
Curie
C4
36
28106
2137
Kant
C4
7
29120 Theop hrastos
...
...
...
...
29555
Feuerbach
2
5259
Der Wiener Kreis
2
2133
...
...
...
5022
Glaube
2
2134
4630
Die 3 Kritiken
4
2137
...
...
...
...
hören
MatrNr
Carnap
SWS gelesenVon
VorlNr
26120
5001
27550
5001
27550
4052
28106
5041
28106
5052
28106
5216
28106
5259
29120
5001
29120
5041
...
...
(1) Formulieren Sie eine SQL‐Anfrage, aus der die Vorlesungen hervorgehen, die von Sokrates oder Kant gelesen werden. Die Ergebnisrelation soll die Attribute Name, VorlNr und Titel besitzen. (3 P) (2) Formulieren Sie eine SQL‐Anfrage, aus der die Namen der Studenten hervorgehen, die mindestens eine Vorlesung mit drei Semesterwochenstunden und mindestens eine Vorlesung mit vier Semesterwochenstunden gehört haben. Die Ergebnisrelation soll das Attribut NameStudent besitzen. (3 P) 4 Aufgabe 3: Datenstrukturen und Algorithmen
(6 Punkte) (1) (2 P) Beschreiben Sie stichwortartig bzw. knapp die Datenstrukturen „einfach verkettete Liste“ und „Reihung (Array)“ unter Berücksichtigung der folgenden Teilfragen: • Wo liegen die konzeptuellen Unterschiede zwischen den beiden Datenstrukturen? • Wie viele Elemente können in diesen Strukturen nach ihrer Deklaration gespeichert werden? • Können Elemente unterschiedlichen Typs in diesen Strukturen gespeichert werden? (2) Sortierverfahren a. Beschreiben Sie das Prinzip des rekursiven Sortierverfahrens Quicksort! (2 P) b. Verdeutlichen Sie schematisch das Prinzip des Quicksort Algorithmus am Beispiel des folgenden Arrays! Als Pivot‐Element soll jeweils das mittlere Element(§) des Arrays genommen werden. (2 P) a[0] = 11 a[1] = 6 a[2] = 3 a[3] = 10 a[4] = 18 a[5] = 9 a[6] = 15 (§): Mittleres Element heißt genauer: Für ein Array a[0], a[1], a[2],..., a[n]
soll als Pivot‐Element das Element a[
n
] gewählt werden. 2
5 Aufgabe 4: Betriebssysteme (3 Punkte) (1) Was ist ein Prozess? (1 P) (2) Welche Zustandsübergänge kann ein Prozess durchlaufen und welche Ereignisse sind für diese Übergänge verantwortlich? (Ein beschrifteter Übergangsgraph ist ausreichend) (2 P) 6 Aufgabe 5: Programmierung (3 Punkte) (1) Objektorientierte Programmierung: Was ist der Sinn und Zweck eines Konstruktors (engl.: Constructor) in einer Klasse? (1 P) (2) (1 P) Warum ist folgende Vorschrift zum Reichwerden kein Algorithmus? Schritt (1) Addiere die Zahlen 2 und 3
Schritt (2) Wenn das Ergebnis aus Schritt (1) die Zahl 5 ist,
mache mit Aktien ein Vermögen an der Börse.
Schritt (3) Ende.
(3) Was versteht man bei Methodenaufrufen (bspw. in Java) unter call by value? (1 P) 7 Aufgabe 6: Java (I) (6 Punkte) (1) Gegeben sei folgender Java Code: public class AnimalDemo {
public static void main(String[] args) {
Elephant elephant = new Elephant();
LargeAnimal largeAnimal = new LargeAnimal();
largeAnimal.eat();
largeAnimal = elephant;
Tyrannosaur tyrannosaur = new Tyrannosaur();
largeAnimal.eat();
}
}
public class LargeAnimal {
public void eat(){
System.out.println("*knurps!*");
}
}
public class Elephant extends LargeAnimal{
public void eat(){
System.out.println("hmmm a tasty haystack! *haps!*");
}
}
public class Tyrannosaur extends LargeAnimal{
public void eat(){
System.out.println("hmmm a tasty 800 kg steak!*mampf*");
}
}
(a) Welche Ausgabe produziert AnimalDemo ? (2 P) 8 (b) (1 P) Welche Begriffe charakterisieren das Prinzip, das aus der Ausgabe von AnimalDemo folgt? Kreuzen Sie den zutreffenden Begriff / die zutreffenden Begriffe an! Rekursion (engl.: Recursion)....................... Overloading (deutsch: Überladen)............. Polymorphie (engl.: Polymorphism)............ (2) In einem Satz: Was ist der Unterschied zwischen Methoden (engl.: methods) bzw. Attributen (engl.: fields), die mit dem Modifier static gekennzeichnet sind, und Methoden (engl.: methods) bzw. Attributen (engl.: fields), die nicht mit dem Modifier static gekennzeichnet sind? (1 P) (3) (2 P) Gegeben sei folgender Java Code: public class ControlStructuresDemo {
public static void main(String[] args) {
int fritz = 0;
for(int i=0; i<3; i++){
fritz++; //operator ++ means:
fritz = fritz + 1
}
System.out.println(fritz);
double johnny = 2.0d;
while( johnny > 1 ){
johnny = johnny - 0.7d;
}
System.out.println(johnny);
}
}
Welche Ausgabe produziert ControlStructuresDemo ? 9 Aufgabe 7: Java (II) (7 Punkte) (1) Gegeben ist folgende unvollständige rekursive Java Methode: public long faculty(long argument){ //compute f(x) = x!
long result;
if(argument == 0){
result = 1;
} else {
result =
argument * faculty(argument - 1);
}
return result;
}
Ergänzen Sie die fehlende Zeile sinnvoll! (2 P) (2) (1 P) Gegeben sei folgender fehlerhafter Java Code‐Ausschnitt: int[] someArray = new int[3];
for(int i=0; i<4; i++){
someArray[i] = 0;
}
Wo liegt der Fehler? (3) (4P) Gegeben sei folgende fehlerhafte Klasse Calculator , die einen einfachen Taschenrechner implementieren soll: public class Calculator {
public double add(double a, double b){
double result;
result = a + b;
}
10 public void mult(double a, double b){
double result;
result = a * b;
return result;
}
public static long faculty(int a){
//compute f(x) = x!
while(a < 0){
System.out.println("no negative arguments,please!");
}
long result = 1;
for(int i=0; i<a; i++){
result = result * a;
}
return result;
}
}
Umranden bzw. markieren Sie die vier Fehler im Code und erklären Sie ganz kurz, was dort falsch ist! 11 Lösungsvorschläge:
12 Aufgabe 1: Konzeptuelle und logische Modellierung von Datenbanken (9 Punkte) (1) ER‐Diagramm (5 P) : (2) Relationen (4 P) : Gast: {[GastNr:integer, vorname:varchar(500), nachname:varchar(500), AdrNr:integer]} Adresse: {[AdrNr:integer, Land:varchar(500), Ort:varchar(500), PostalCode:integer, Straße:varchar(500), HausNr:integer]}
Gebaude: {[GebNr:integer, AnzStockwerke:integer, AdrNr:integer]} Zimmer: {[ZimNr:integer, GebNr:integer, Groesse:double, AnzBetten:integer, KatNr:integer}] Kategorie: {[KatNr:integer, Bezeichnung:varchar(1000), Ausstattung:varchar(10000), Foto:blob]} reserviert: {[ZimNr:integer, GastNr:integer, Von:date, Bis:date, Preis:double]} 13 Aufgabe 2: SQL (6 Punkte) (1) SQL (3 P) select p.Name, v.VorlNr, v.Titel from Professoren p, Vorlesungen v where p.PersNr = v.gelesenVon and (p.Name = ’Sokrates’ or p.Name = ’Kant’) (2) SQL (3 P) Variante 1 (per Join): select distinct(s.Name) as NameStudent from Studenten s, hören h, hören hh, Vorlesungen v, Vorlesungen vv where s.MatrNr = h.MatrNr and s.MatrNr = hh.MatrNr and h.VorlNr = v.VorlNr and v.SWS = 3 and hh.VorlNr = vv.VorlNr and vv.SWS = 4 oder Variante 2 (per Unteranfragen): select distinct(s.Name) as NameStudent from Studenten s, hören h, hören hh where s.MatrNr = h.MatrNr and h.VorlNr in (select v.VorlNr 14 from Vorlesungen v where v.SWS = 3 ) and hh.VorlNr in (select v.VorlNr from Vorlesungen v where v.SWS = 4 ) 15 Aufgabe 3: Datenstrukturen und Algorithmen
(6 Punkte) (1) Einfach verkettete Liste: Folge von Elementen. Jedes Element enthält (neben dem Inhalt) einen Zeiger (bzw. Referenz) auf nächstes Element. Es können beliebig viele Elemente gespeichert werden. Typen der Inhalte und auch Typen der Elemente (sofern sie den gleichen Nachfolger‐
Mechanismus unterstützen (bspw. durch Vererbung))) können verschieden sein. Reihung (Array): Jedes Element besitzt eine eindeutige Nummer. (Im Speicher konzeptuell durch einen fortlaufend nummerierten, in der Größe bei der Deklaration festgelegten gleichmäßig partitionierten Speicherbereich realisiert). Es können nur eine feste Anzahl von Elementen gespeichert werden, die vom gleichen Typ sein müssen. (2) (a) • Wähle Pivot Element p • Teile auf: Alle Elemente <p in erstes Teilfeld, alle Elemente >p in zweites Teilfeld • Wende Algorithmus rekursiv auf erstes Teilfeld an • Wende Algorithmus rekursiv auf zweites Teilfeld an. • Mische Teilfeld eins, Pivot und Teilfeld zwei zusammen 1(b) a[0] = 11 6 3 3 a[1] = 6 3 9 6 a[2] = 3 9 6 9 a[3] = 10 10 10 10 a[4] = 18 15 15 11 a[5] = 9 18 11 15 a[6] = 15 11 18 18 16 Aufgabe 4: Betriebssysteme (3 Punkte) (1) Ein Prozess ("process, task") ist ein Ablauf eines Programms, der von dem Betriebssystem verwaltet wird. (2) 17 Aufgabe 5: Programmierung (3 Punkte) (1) Ein Konstruktor wird bei der Instantiierung eines Objekts mit new aufgerufen und dient zur Initialisierung des Objekts in Abhängigkeit von etwaig an ihn übergebenen Parametern. (2) „Mache ein Vermögen an der Börse“ ist kein effektiv ausführbarer Schritt. (3) Beim call bei value werden die Werte der Parameter einer Methode beim Aufruf der Methode in lokalen Variablen kopiert. Nach Verlassen der Methode werden die lokalen Kopien zerstört. Etwaige Veränderungen an den lokalen Variablen gehen verloren. 18 Aufgabe 6: Java (I) (6 Punkte) (1) (a) Ausgabe: *knurps!*
hmmm a tasty haystack! *haps!*
(b)Richtig ist nur Polymorphie.
(2) Mit static gekennzeichnete methods bzw. fields gehören zur Klasse, nicht mit static gekennzeichnete zu Objekten der Klasse (3) Die Ausgabe ist: 3
0.6
19 Aufgabe 7: Java (II) (7 Punkte) (1)
Die vervollständigte Methode lautet: public long faculty(long argument){ //compute f(x) = x!
long result;
if(argument == 0){
result = 1;
} else {
result =
argument * faculty(argument - 1);
}
return result;
}
(2)
Lösung: Zweite Zeile: Es muss i<3 heissen! (3)
Lösung: public class Calculator {
Es fehlt return result;
public double add(double a, double b){
double result;
result = a + b;
Der Rückgabewert
sollte double sein
}
public void mult(double a, double b){
double result;
result = a * b;
return result;
}
Es sollte if heissen
public static long faculty(int a){
while(a < 0){
System.out.println("no negative arguments,
please!");
}
long result = 1;
20 for(int i=0; i<a; i++){
result = result * a;
}
return result;
}
}
21 korrekt wäre ( a-i)
Herunterladen