Probe-Klausur zur Vorlesung „Einführung in die Informatik“, 05.07.2010 Name: __________________________ Matrikelnummer: _______________________ Studiengang: ____________________ Semester/Versuch:____________/__________ Datum: Bearbeitungszeit: 60 min Punkteverteilung Aufgabe 1: 2 Aufgabe 5: 4 Aufgabe 2: 4 Aufgabe 6: 5 Aufgabe 3: 10 Aufgabe 7: 6 Aufgabe 4: 4 Aufgabe 8: 5 Summe der Punkte: 40 Notenverteilung: 1.0 38-40 2.0 29-31 3.0 23-24 4.0 17-18 1.3 35-37 2.3 27-28 3.3 21-22 4.3 10-16 1.7 32-34 2.7 25-26 3.7 19-20 4.7 5-9 A6 A7 A1 A2 A3 A4 A4 1 A8 Σ Aufgabe 1) Darstellung von Grafiken (2 Punkte) In digitalen Rechensystemen können Abbildungen auf zwei verschiedene Arten realisiert werden. a) Was versteht man unter Vektorgrafik? (1 Punkt) b) Was versteht man unter Rastergrafik? (1 Punkt) Aufgabe 2) Lineare Suche (4 Punkte) Angenommen, B sei eine Reihung mit n Elementen. Die Elemente B1, ..., Bn haben als Werte jeweils Zahlen. In der Reihung B soll nach einem Element mit dem Wert 35 gesucht werden. a) Beschreiben Sie den Algorithmus zur linearen (und nicht der binären!) Suche, um in der Reihung B nach einem Element mit dem Wert 35 zu suchen. (2 Punkte) b) Skizzieren Sie kurz Vorteile und Nachteile der linearen Suche (z. B. gegenüber der binären Suche)? (2 Punkte) 2 Aufgabe 3) Datenbanken (10 Punkte) Eine Universität möchte in einer relationalen Datenbank Informationen zu Vorlesungen, Dozenten, Studierenden und Studiengängen sowie die Beziehungen zwischen diesen Informationen verwalten. Zunächst wird ein ER-Modell (Entity-Relationship Modell) erstellt. Es existieren dabei die Entity-Typen Studierender: mit den Attributen: Name, MatrikelNr, Geburtsdatum Studiengang: mit den Attributen: Name, Kürzel, Fakultät Dozent: mit den Attributen: PersonalNr, Name Vorlesung: mit den Attributen: VorlesungsID, Name, ECTS, Kurzbeschreibung und die Relationship-Typen besucht: zwischen Studierender und Vorlesung studiert: zwischen Studierender und Studiengang hält: zwischen Dozent und Vorlesung zugeordnet: zwischen Vorlesung und Studiengang Beachten Sie folgende Festlegungen: - Ein Studierender besucht mehrere Vorlesungen; eine Vorlesung wird von mehreren Studierenden besucht. - Ein Dozent kann mehrere Vorlesungen halten; eine Vorlesung wird von einem Dozenten gehalten. - Ein Studiengang umfasst eine Reihe von Vorlesungen; eine Vorlesung kann mehreren Studiengängen zugeordnet sein. - Ein Studierender ist für einen Studiengang eingeschrieben; ein Studiengang wird von vielen Studierenden studiert. Teilaufgaben a) Zeichnen Sie für diese Datenbankaufgabe das zugehörige ER-Modell. Geben sie für jeden Entity-Typ einen geeigneten Primärschlüssel und bei den Relationship-Typen die zugehörigen Kardinalitäten an. (8 Punkte) b) Das ER-Modell der Teilaufgabe a) soll nun in Tabellen der relationalen Datenbank umgesetzt werden. Jeder Entity-Typ wird dabei auf eine eigene Tabelle abgebildet (d.h. es entstehen die Tabellen Studierender, Studiengang, Dozent und Vorlesung). Bilden Sie nun die folgenden Relationship-Typen der Teilaufgabe a) auf Tabellen der relationalen Datenbank ab: • „studiert“ • „besucht“ Beachten Sie dabei die Kardinalitäten der Relationship-Typen, um entscheiden zu können, ob für den jeweiligen Relationship-Typ eine eigene Tabelle notwendig ist oder nicht. (2 Punkte) 3 Aufgabe 4) Algorithmus, Programm, Prozess (4 Punkte) a) Charakterisieren Sie kurz die Begriffe Algorithmus, Programm und Prozess. (3 Punkte) b) Welche Zustände kann ein Prozess einnehmen? (1 Punkt) Aufgabe 5) Rekursion (4 Punkte) Das Wachstum einer Kaninchenpopulation kann über die Fibonacci-Folge beschrieben werden. Eine Zahl der Fibonacci-Folge berechnet sich durch die Addition der beiden vorherigen Zahlen der Folge (0, 1, 1, 2, 3, 5, 8, 13, …). Die formale rekursive Definition der FibonacciFolge lautet: a) Ergänzen Sie die nachfolgende Java-Methode computeNthFibonacciNumber so, dass die Funktion die n-te Zahl der Fibonacci-Folge zurückgibt. (2P) public class Fibonacci { public int computeNthFibonacciNumber(int n){ int result = 0; if(n == 0){ result = 0; } else if(n == 1){ result = 1; } else { result = computeNthFibonacciNumber(n - 1) + computeNthFibonacciNu } return result; } } b) Wenn die Methode mit Fibonacci someFibonacci = new Fibonacci(); someFibonacci.computeNthFibonacciNumber(4); aufgerufen wird: Wie entfaltet sich dann die Rekursion als Folge von Aufrufen? Für die Darstellung der Folge der Aufrufe können Sie entweder eine textuelle oder eine graphische Darstellung verwenden. (2P) 4 Aufgabe 6) Java (5 Punkte) Es soll ein simpler Taschenrechner in Java programmiert werden. Der Taschenrechner soll zwei Funktionen haben: • Addieren von positiven natürlichen Zahlen (einschließlich 0) und • Exponenzieren positiver natürlicher Zahlen mit positiven natürlichen Exponenten (jeweils einschließlich 0). Hierzu seien die folgende Klasse Calculator gegeben. Füllen Sie die Lücken geeignet mit Java-Elementen (Ausdrücke, Klammern etc.)! Lösung: public class Calculator { public long addNumbers(long numberOne, long numberTwo){ long result = numberOne + numberTwo; return result; } public long exponentiateNumbers(long base, long exponent){ long result = 1; for(int i=0; i < exponent; i++){ result = result * base; } return result; } } Aufgabe 7) Normalform (6 Punkte) a) Erklären Sie in Stichpunkten die 2. Normalform (1 P.) b) Würde man die nachfolgende Relation verwenden, kann es zu Anomalien kommen. Welche Anomalien können auftreten? Geben Sie ein Beispiel je Anomalie an. (3 P) SchülerId Name Wohnort Geschlecht Geburtsjahr KlassenId Klassenzimmer 32134234883 9 Meier, Franz 80333 München männlich 1987 9a 234 68742364987 3 Gebhardt, Doris 80333 München weiblich 1985 7c Pavillon … … … … … … … 5 c) Modifizieren Sie die Tabelle aus Teilaufgabe 7 b in der Weise, dass die ersten drei Normalformen erfüllt sind. Es genügt, wenn Sie die neue(n) Tabelle(n) ohne Datentupel angeben. (2P) 6 Aufgabe 8) SQL (5 Punkte) Ein Gymnasium setzt eine Datenbank ein, um die Noten der Schüler zu erfassen. Insbesondere werden die Noten der mündlichen Abiturprüfung in der Relation „prüfen“ gespeichert. Gehen sie von folgender Beispielausprägung der Datenbank aus: Schüler Lehrer LehrerId Nachname Vorname SchülerId Nachname Vorname 23 Meier Paul 150 Axt Simon 24 Schmidt Eva 151 Gerull Alex 25 Eckhardt Max 152 Huber Karin 26 Hussak Susi 153 Scholl Benni 27 Walter Hans 154 Zeiler Ena 155 Klug Anna prüfen Fach SchülerId FachId LehrerId Note FachId Bezeichnung 153 10 23 3 10 Mathe 154 10 26 1 11 Physik 152 13 25 2 12 Deutsch 150 12 27 4 13 Erdkunde 151 14 24 3 14 Englisch Formulieren Sie nachfolgende SQL-Anfragen: a) Finden Sie den Nach- und Vornamen von Schülern, die bei Frau Hussak eine 1 bekommen haben. (3P) b) Die Schülerin Anna Klug hat soeben ihre mündliche Abiturprüfung im Fach Physik bei Herrn Walter mit Note 3 bestanden. Geben Sie einen SQL Ausdruck an, durch den die Ausprägung der Datenbank entsprechend der neuen Situation modifiziert wird. (2P) ENDE DER KLAUSURAUFGABEN 7 Lösung zu den Aufgaben, Wiederholungsklausur WS 2009/10 Aufgabe 1) Darstellung von Grafiken (2 Punkte) In digitalen Rechensystemen können Abbildungen auf zwei verschiedene Arten realisiert werden. c) Was versteht man unter Vektorgrafik? (1 Punkt) d) Was versteht man unter Rastergrafik? (1 Punkt) Lösung Lösung zu Teilaufgabe a) (1 Punkt) Eine Vektorgraphik besteht aus einer Menge von geometrischen Objekten, wie z.B. Linie, Rechteck. Vektorgraphiken sind geeignet für Zeichnungen. Vektorgrafiken benötigen erheblich weniger Speicher. Lösung zu Teilaufgabe b) (1 Punkt) Rastergraphiken bestehen aus einer Menge von Pixeln. Rastergraphiken sind geeignet für die Darstellung von Fotos, z.B. von Digitalkameras. Aufgabe 2) Lineare Suche (4 Punkte) Angenommen, B sei eine Reihung mit n Elementen. Die Elemente B1, ..., Bn haben als Werte jeweils Zahlen. In der Reihung B soll nach einem Element mit dem Wert 35 gesucht werden. c) Beschreiben Sie in einfachen Worten den Algorithmus zur linearen (und nicht der binären!) Suche, um in der Reihung B nach einem Element mit dem Wert 35 zu suchen. (2 Punkte) d) Skizzieren Sie kurz Vorteile und Nachteile der linearen Suche (z. B. gegenüber der binären Suche)? (2 Punkte) Lösung zu Teilaufgabe a) (2 Punkte) Man durchsucht die Reihung sequentiell, ein Element nach dem anderen, solange bis man das Element mit Wert 35 gefunden hat. Man gibt das gefundene Element zurück, der Algorithmus stoppt. (Man kann auch eine Beschreibung in Java oder Pseudocode angeben.) Lösung zu Teilaufgabe b) (2 Punkte) Vorteil: bei der linearen Suche muss die Zahlenmenge nicht sortiert sein, während die binäre Suche eine sortiere Zahlenmenge erwartet. (1 Punkt) 8 Nachteil: im schlimmsten Fall muss die gesamte Zahlenmenge durchsucht werden; auch um festzustellen ob die Zahl in der Zahlenmenge enthalten ist oder nicht. (1 Punkt) 9 Aufgabe 3) Datenbanken (10 Punkte) Eine Universität möchte in einer relationalen Datenbank Informationen zu Vorlesungen, Dozenten, Studierenden und Studiengängen sowie die Beziehungen zwischen diesen Informationen verwalten. Zunächst wird ein ER-Modell (Entity-Relationship Modell) erstellt. Es existieren dabei die Entity-Typen Studierender: mit den Attributen: Name, MatrikelNr, Geburtsdatum Studiengang: mit den Attributen: Name, Kürzel, Fakultät Dozent: mit den Attributen: PersonalNr, Name Vorlesung: mit den Attributen: VorlesungsID, Name, ECTS, Kurzbeschreibung und die Relationship-Typen besucht: zwischen Studierender und Vorlesung studiert: zwischen Studierender und Studiengang hält: zwischen Dozent und Vorlesung zugeordnet: zwischen Vorlesung und Studiengang Beachten Sie folgende Festlegungen: - Ein Studierender besucht mehrere Vorlesungen; eine Vorlesung wird von mehreren Studierenden besucht. - Ein Dozent kann mehrere Vorlesungen halten; eine Vorlesung wird von einem Dozenten gehalten. - Ein Studiengang umfasst eine Reihe von Vorlesungen; eine Vorlesung kann mehreren Studiengängen zugeordnet sein. - Ein Studierender ist für einen Studiengang eingeschrieben; ein Studiengang wird von vielen Studierenden studiert. Teilaufgaben a) Zeichnen Sie für diese Datenbankaufgabe das zugehörige ER-Modell. Geben sie für jeden Entity-Typ einen geeigneten Primärschlüssel und bei den Relationship-Typen die zugehörigen Kardinalitäten an. (8 Punkte) b) Das ER-Modell der Teilaufgabe a) soll nun in Tabellen der relationalen Datenbank umgesetzt werden. Jeder Entity-Typ wird dabei auf eine eigene Tabelle abgebildet (d.h. es entstehen die Tabellen Studierender, Studiengang, Dozent und Vorlesung). Bilden Sie nun die folgenden Relationship-Typen der Teilaufgabe a) auf Tabellen der relationalen Datenbank ab: • „studiert“ • „besucht“ Beachten Sie dabei die Kardinalitäten der Relationship-Typen, um entscheiden zu können, ob für den jeweiligen Relationship-Typ eine eigene Tabelle notwendig ist oder nicht. (2 Punkte) 10 Lösung zu Teilaufgabe a) (8 Punkte) 1 Punkt 1 Punkt MatrikelNr Name Geburtsdatum 1 Punkt Studierender N besucht M N 1 Punkt M studiert zugeordnet 1 Name Kürzel Fakultät Studiengang Vorlesung 1 Punkt N N hält VorlesungsID Name Kurzbeschreibung ECTS 1 Punkt 1 Dozent PersonalNr Name 1 Punkt 1 Punkt Die Primärschlüssel der Entity-Typen sind die Folgenden: Studierender: MatrikelNr Studiengang: Name Vorlesung: VorlesungsID Dozent: PersonalNr Lösung zu Teilaufgabe b) (2 Punkte) Es erfolgt folgende Umsetzung der Relationship-Typen „studiert“ (Kardinalität 1:N) wird in Tabelle Studierender integriert, wobei Name als Fremdschlüssel aufgenommen wird. (1 Punkt) „besucht“ (Kardinalität M:N) wird als eigene Tabelle „besucht“ realisiert, deren Primärschlüssel aus den beiden Attributen MatrikelNr und VorlesungsID besteht. (1 Punkt) 11 Aufgabe 4) Algorithmus, Programm, Prozess (4 Punkte) a) Charakterisieren Sie kurz die Begriffe Algorithmus, Programm und Prozess. (3 Punkte) b) Welche Zustände kann ein Prozess einnehmen? (1 Punkt) Lösung Lösung zu Teilaufgabe a) (3 Punkte) - Ein Algorithmus ist eine detaillierte und explizite Vorschrift zur schrittweisen Lösung eines Problems. (1 Punkt) Oder Ein Algorithmus ist eine endliche, deterministische und effektive Vorschrift. - Ein Programm ist die Formulierung eines Algorithmus in einer Programmiersprache. (1 Punkt) - Ein Prozess ist die Ausführung eines Programms in einem Rechner. Lösung zu Teilaufgabe b) Prozesse können die folgenden Zustände einnehmen: „wartend“ (waiting), „bereit“ (ready) oder „laufend“ (running)) 12 (1 Punkt) Aufgabe 5) Rekursion (4 Punkte) Das Wachstum einer Kaninchenpopulation kann über die Fibonacci-Folge beschrieben werden. Eine Zahl der Fibonacci-Folge berechnet sich durch die Addition der beiden vorherigen Zahlen der Folge (0, 1, 1, 2, 3, 5, 8, 13, …). Die formale rekursive Definition der FibonacciFolge lautet: a) Ergänzen Sie die nachfolgende Java-Methode computeNthFibonacciNumber so, dass die Funktion die n-te Zahl der Fibonacci-Folge zurückgibt. (2P) public class Fibonacci { public int computeNthFibonacciNumber(int n){ int result = 0; if(n == 0){ result = 0; } else if(n == 1){ result = 1; } else { result = computeNthFibonacciNumber(n - 1) + computeNthFibonacciNu } return result; } } b) Wenn die Methode mit Fibonacci someFibonacci = new Fibonacci(); someFibonacci.computeNthFibonacciNumber(4); aufgerufen wird: Wie entfaltet sich dann die Rekursion als Folge von Aufrufen? Für die Darstellung der Folge der Aufrufe können Sie entweder eine textuelle oder eine graphische Darstellung verwenden. (2P) Lösung Lösung zur Teilaufgabe 2 a) (2 Punkte): public class Fibonacci { public int computeNthFibonacciNumber(int n){ int result = 0; if(n == 0){ result = 0; } else if(n == 1){ result = 1; } else { result = computeNthFibonacciNumber(n-1) + computeNthFibonacciNumber(n-2); } 13 return result; } } Lösung zur Teilaufgabe 2 b) (2 Punkte) Textuell: Kürzen wir zur Notation den Methodenaufruf computeNthFibonacciNumber(int n) mit fibo(n) ab, so erhalten wir: fibo(4) = fibo(2) + fibo(3) = fibo(0) + fibo(1) + fibo(1) + fibo(2) = fibo(0) + fibo(1) + fibo(1) + fibo(0) + fibo(1) =0+1+1+0+1 Graphisch: fibo(4) fibo(3) fibo(2) fibo(0) 0 fibo(1) fibo(1) 1 1 fibo(2) fibo(0) 0 14 fibo(1) 1 Aufgabe 6) Java (4 Punkte) Es soll ein simpler Taschenrechner in Java programmiert werden. Der Taschenrechner soll zwei Funktionen haben: • Addieren von positiven natürlichen Zahlen (einschließlich 0) und • Exponenzieren positiver natürlicher Zahlen mit positiven natürlichen Exponenten (jeweils einschließlich 0). Hierzu seien die folgende Klasse Calculator gegeben. Füllen Sie die Lücken geeignet mit Java-Ausdrücken! Lösung: public class Calculator { public long addNumbers(long numberOne, long numberTwo){ long result = numberOne + numberTwo; return result; } public long exponentiateNumbers(long base, int exponent){ long result = 1; for(int i=0; i < exponent; i++){ result = result * base; } return result; } } Aufgabe 7) Normalform 6 Punkte) a) Erklären Sie in Stichpunkten die 2.. Normalform (1 P.) Eine Relation R mit zugehörigen funktionalen Abhängigkeiten F ist in 2. NF, falls jedes Nichtschlüsselattribut A ∈ R voll funktional abhängig ist von jedem Kandidatenschlüssel der Relation. b) Würde man die nachfolgende Relation verwenden, kann es zu Anomalien kommen. Welche Anomalien können auftreten? Geben Sie ein Beispiel je Anomalie an. (3 P) 15 SchülerId Name Wohnort Geschlecht Geburtsjahr KlassenId Klassenzimmer 321342348839 Meier, Franz 80333 München männlich 1987 9a 234 687423649873 Gebhardt, Doris 80333 München weiblich 1985 7c Pavillon … … … … … … … Einfügeanomalie: Was macht man mit Schülern die noch keiner Klasse zugeordnet wurden. Updateanomalie: Würde man die Postleitzahlen für München ändern, dann müsste man dies in allen Tupeln tun die Schüler in München repreäsentieren. Löschanomalie: Was passiert wenn das Pavillon als Klassenzimmer nicht mehr zur Verfügung steht da es abgerissen wurde. Ein Löschen der Tupel mit Pavillon als Klassenzimmer würde den Verlust von Schülerinformationen implizieren. b) Modifizieren Sie die Tabelle aus Teilaufgabe 7 b in der Weise, dass die ersten drei Normalformen erfüllt sind. Es genügt, wenn Sie die neue(n) Tabelle(n) ohne Datentupel angeben. (2P) Schüler SchülerId KlassenId Nachname Vorname PLZ (0,5P) Klasse KlassenId Klassenzimmer (0,5P) PLZ Ort (1P) 16 Geschlecht Geburtsjahr Aufgabe 8) SQL (5 Punkte) Ein Gymnasium setzt eine Datenbank ein, um die Noten der Schüler zu erfassen. Insbesondere werden die Noten der mündlichen Abiturprüfung in der Relation „prüfen“ gespeichert. Gehen sie von folgender Beispielausprägung der Datenbank aus: Schüler Lehrer LehrerId Nachname Vorname SchülerId Nachname Vorname 23 Meier Paul 150 Axt Simon 24 Schmidt Eva 151 Gerull Alex 25 Eckhardt Max 152 Huber Karin 26 Hussak Susi 153 Scholl Benni 27 Walter Hans 154 Zeiler Ena 155 Klug Anna prüfen Fach SchülerId FachId LehrerId Note FachId Bezeichnung 153 10 23 3 10 Mathe 154 10 26 1 11 Physik 152 13 25 2 12 Deutsch 150 12 27 4 13 Erdkunde 151 14 24 3 14 Englisch Formulieren Sie nachfolgende SQL-Anfragen: a) Finden Sie den Nach- und Vornamen von Schülern, die bei Frau Hussak eine 1 bekommen haben. (3P) select s.Nachname, s.Vorname from Schüler s, Lehrer l, prüfen p where l.Nachname = ’Hussak’ and l.LehrerId = p.LehrerId and p.Note = 1 and p.SchülerId = s.SchülerId; (Jede Zeile 0,5 Punkte -> 3 P. insgesamt) b) Die Schülerin Anna Klug hat soeben ihre mündliche Abiturprüfung im Fach Physik bei Herrn Walter mit Note 3 bestanden. Geben Sie einen SQL Ausdruck an, durch den 17 die Ausprägung der Datenbank entsprechend der neuen Situation modifiziert wird. (2P) INSERT INTO prüfen (SchülerId, FachId, LehrerId, Note.) VALUES (155, 11, 27, 1); (Jede Zeile 1 Punkt -> 2 P. insgesamt) 18