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)