Informatik 2 für Regenerative Energien Klausur vom 28. September 2016 Jörn Loviscach Versionsstand: 28. September 2016, 10:58 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Germany License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/de/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. 15 Punkte für die erste Aufgabe; 3 Punkte für alle weiteren Aufgaben. Mindestpunktzahl zum Bestehen: 20 Punkte. Hilfsmittel: maximal vier einseitig oder zwei beidseitig beschriftete DIN-A4-Spickzettel beliebigen Inhalts, möglichst selbst verfasst oder zusammengestellt; kein Skript, keine anderen Texte, kein Taschenrechner, kein Computer (auch nicht wearable), kein Handy und Ähnliches. Name Vorname Matrikelnummer E-Mail-Adresse 1. Im C#-Programmlisting im Anhang sind 15 Fehler, darunter keine Tippfehler und höchstens ein Fehler pro Zeile. Erstellen Sie eine Liste mit 15 Zeilen aus den Fehlern und ihren jeweiligen Korrekturen, nach dem folgenden Muster: Zeile 123 543 korrekter Programmtext public void foo() int a = 42; 2. Die Methode Test.Teste des (korrigierten) Code aus dem Programmlisting im Anhang wird ausgeführt. Was steht am Ende in den Variablen x, y und z? Beschreiben Sie gegebenenfalls, wie Sie zu Ihrer Antwort kommen. 3. Noch ist es mit dem korrigierten Code aus dem Programmlisting möglich, dass dieselbe Person zwei Exemplare desselben Buchs ausleiht. Verhindern Sie das mit einer Exception. 4. In der Methode NehmeZurück der Klasse Buch des korrigierten Code aus dem Programmlisting ist es möglich, dass die Person, die das Buch zurückgibt, nicht diejenige ist, die das Buch ausgeliehen hat. Ist das ein Problem? Falls ja, beschreiben Sie grob (ca. drei Sätze) eine Möglichkeit, das Programm diesbezüglich zu verbessern. 1 2 5. Schreiben Sie für die Klasse Bibliothek im korrigierten Code aus dem Anhang diese öffentliche Methode: List<string> SucheKomplettEntlieheneBücher() Sie soll eine Liste der Titel aller Buchtitel zurückgeben, von denen aktuell alle Exemplare ausgeliehen sind. Gegebenenfalls sind in anderen Klassen Änderungen nötig. 6. Schreiben Sie von der Klasse Ausleihvorgang im korrigierten Code aus dem Anhang eine abgeleitete Klasse UnbefristeterAusleihvorgang. Hier soll die Ausleihe beliebig lang sein dürfen. Gegebenenfalls sind auch in der Klasse Ausleihvorgang Änderungen nötig. Hinweis: int.MaxValue ist die größtmögliche int-Zahl und DateTime.MaxValue ist der Zeitpunkt, der nach allen anderen Zeitpunkten liegt. 7. Schreiben Sie ein fehlerfrei compilierbares C#-Programm, das diesem Diagramm entspricht. Die Methoden geben, wenn nötig, Phantasiewerte zurück. 8. Welche Zahlen stehen nach Ausführung dieses C#-Programmfragments in den Variablen x, y und z? Geben Sie möglichst auch Zwischenschritte an, damit Ihr Gedankengang nachvollziehbar ist. Stack<List<int>> a = new Stack<List<int>>(); List<int> b = new List<int>(); b.Add(1); b.Add(2); a.Push(b); a.Push(b); List<int> c = new List<int>(); c.Add(3); a.Push(c); b.Add(4); int x = a.Pop()[0]; int y = a.Pop()[0]; int z = a.Pop()[0]; 3 Dieses Listing enthält 15 Fehler! Die soll ein Programm zur Verwaltung der Ausleihen einer Bibliothek sein. Von jedem Buch kann es mehrere Exemplare geben. Wenn man ein Buch vormerkt, muss man dazu nicht ein bestimmtes Exemplar des Buchs wählen. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 c l a s s Test { p u b l i c s t a t i c void Teste ( ) { Buch b1 = new Buch ( " Elektrotechnik " , 1 0 ) ; Buch b2 = new Buch ( " Englisch " , 1 ) ; Buch b3 = new NichtVerlängerbaresBuch ( " Chemie " , 2 ) ; B i b l i o t h e k bib = new B i b l i o t h e k ( 3 ) ; bib . FügeBuchHinzu ( b1 ) ; bib . FügeBuchHinzu ( b2 ) ; bib . FügeBuchHinzu ( b3 ) ; Person p1 = new Person ( " Anton " ) ; Person p2 = new Person ( " Berta " ) ; Person p3 = new Person ( " Carla " ) ; b2 . LeiheAusFallsMöglich ( p1 ) ; b o o l x = b2 . LeiheAusFallsMöglich ( p2 ) ; b1 . MerkeVor ( p1 ) ; b2 . MerkeVor ( p3 ) ; b o o l y = b2 . VerlängereFallsMöglich ( p1 ) ; b2 . NehmeZurück ( p1 ) ; s t r i n g z = bib . FindeErfüllbareReservierungen ( ) ; } } 24 25 26 27 28 29 30 31 32 a b s t r a c t c l a s s Buch { static string t i t e l ; p u b l i c s t r i n g T i t e l { get { return t i t e l ; } } i n t anzahlExemplare ; tageLeihfrist = 30; List <Ausleihvorgang > ausleihen = new List <Ausleihvorgang > ( ) ; List <Person > vormerkungen = new List <Person > ( ) ; 33 34 35 36 37 38 p u b l i c void Buch ( s t r i n g t i t e l , i n t anzahlExemplare ) { this . t i t e l = t i t e l ; t h i s . anzahlExemplare = anzahlExemplare ; } 39 40 41 42 43 44 45 46 p u b l i c b o o l LeiheAusFallsMöglich ( Person person ) { List <Person > e r f ü l l b a r = FindeErfüllbareReservierungen ( ) ; i f ( e r f ü l l b a r . Contains ( person ) ) { ausleihen . Add ( new Ausleihvorgang ( person , t a g e L e i h f r i s t ) ) ; vormerkungen . Remove ( person ) ; 4 return true ; } e l s e i f ( ausleihen . Count + vormerkungen . Count < anzahlExemplare ) { ausleihen . Add ( new Ausleihvorgang ( person , t a g e L e i h f r i s t ) ) ; return true ; } else { return f a l s e ; } 47 48 49 50 51 52 53 54 55 56 57 58 } 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 // Nur dann verlängerbar , wenn genügend Exemplare n i c h t vorgemerkt . p u b l i c v i r t u a l b o o l VerlängereFallsMöglich ( Person person ) { i f ( anzahlExemplare >= ausleihen . Count + vormerkungen . Count ) { f o r e a c h ( var a u s l e i h e in ausleihen ) { i f ( a u s l e i h e . DiePerson == person ) { a u s l e i h e . Verlängere ( t a g e L e i h f r i s t ) ; return true ; } } return f a l s e ; } else { return f a l s e ; } } 80 81 82 83 84 85 86 87 88 89 90 91 p u b l i c void NehmeZurück ( Person person ) { Ausleihvorgang a = 0 ; f o r e a c h ( var a u s l e i h e in ausleihen ) { i f ( a u s l e i h e . DiePerson = person ) { a = ausleihe ; break ; } } 92 i f ( a == n u l l ) { ausleihen . Remove ( a ) ; } 93 94 95 96 97 } 5 98 p u b l i c void MerkeVor ( Person person ) { vormerkungen . Add ( person ) ; } 99 100 101 102 103 p u b l i c void EntferneVormerkung ( Person person ) { vormerkungen . Remove ( person ) ; } 104 105 106 107 108 p u b l i c List <Person > FindeErfüllbareReservierungen ( ) { List <Person > e r f ü l l b a r = List <Person > ( ) ; 109 110 111 112 f o r ( i n t i = 0 ; i < vormerkungen . Count && i < anzahlExemplare − ausleihen . Count ; i ++) { e r f ü l l b a r . Add ( vormerkungen [ i ] ) ; } 113 114 115 116 117 118 return ; 119 } 120 121 } 122 123 124 125 126 127 c l a s s NichtVerlängerbaresBuch : Buch { p u b l i c NichtVerlängerbaresBuch ( s t r i n g t i t e l , i n t anzahlExemplare ) : base ( t i t e l , anzahlExemplare ) { } 128 p u b l i c b o o l VerlängereFallsMöglich ( Person person ) { return f a l s e ; } 129 130 131 132 133 } 134 135 136 137 138 c l a s s Person { s t r i n g name ; p u b l i c s t r i n g Name { get { return name ; } } 139 p u b l i c Person ( s t r i n g name ) { t h i s . name = name ; } 140 141 142 143 144 } 145 146 147 148 c l a s s Ausleihvorgang { Person person ; 6 p u b l i c Person DiePerson { get { return person ; } } DateTime e n d e L e i h f r i s t ; p u b l i c DateTime EndeLeihfrist { get { return e n d e L e i h f r i s t ; } } 149 150 151 152 p u b l i c Ausleihvorgang ( Person person , i n t t a g e L e i h f r i s t ) { t h i s . person = person ; e n d e L e i h f r i s t = DateTime .Now. AddDays ( t a g e L e i h f r i s t ) ; // k o r r e k t } 153 154 155 156 157 158 p u b l i c void Verlängere ( i n t tage ) { e n d e L e i h f r i s t = e n d e L e i h f r i s t . AddDays ( tage ) ; } 159 160 161 162 163 } 164 165 166 167 class Bibliothek { List <Buch> bücher = new List <Buch > ; 168 p u b l i c void FügeBuchHinzu ( buch ) { Add ( buch ) ; } 169 170 171 172 173 p u b l i c s t r i n g FindeErfüllbareReservierungen ( ) { string resultat = " " ; 174 175 176 177 f o r e a c h ( buch in { List <Person > f o r e a c h ( var { resultat } } 178 179 180 181 182 183 184 185 186 return r e s u l t a t ; 187 } 188 189 } bücher ) e r f ü l l b a r = buch . FindeErfüllbareReservierungen ( ) ; person in e r f ü l l b a r ) += person .Name + " : " + buch . T i t e l + " ; " ;
© Copyright 2025 ExpyDoc