• Keine Ergebnisse gefunden

Informatik 2 für Regenerative Energien Klausur vom 28. September 2016

N/A
N/A
Protected

Academic year: 2021

Aktie "Informatik 2 für Regenerative Energien Klausur vom 28. September 2016"

Copied!
6
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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. Mindest- punktzahl zum Bestehen: 20 Punkte. Hilfsmittel: maximal vier einseitig oder zwei beidseitig beschriftete DIN-A4-Spickzettel beliebigen Inhalts, möglichst selbst ver- fasst 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 korrekter Programmtext 123

public void foo()

543

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ück- gibt, 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 Zeit- punkt, der nach allen anderen Zeitpunkten liegt.

7. Schreiben Sie ein fehlerfrei compilierbares C#-Programm, das diesem Dia- gramm 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 c l a s s Test

2 {

3 p u b l i c s t a t i c v o i d Teste ( )

4 {

5 Buch b1 = new Buch ( " E l e k t r o t e c h n i k " , 1 0 ) ;

6 Buch b2 = new Buch ( " Englisch " , 1 ) ;

7 Buch b3 = new NichtVerlängerbaresBuch ( " Chemie " , 2 ) ;

8 B i b l i o t h e k bib = new B i b l i o t h e k ( 3 ) ;

9 bib . FügeBuchHinzu ( b1 ) ;

10 bib . FügeBuchHinzu ( b2 ) ;

11 bib . FügeBuchHinzu ( b3 ) ;

12 Person p1 = new Person ( " Anton " ) ;

13 Person p2 = new Person ( " Berta " ) ;

14 Person p3 = new Person ( " Carla " ) ;

15 b2 . LeiheAusFallsMöglich ( p1 ) ;

16 b o o l x = b2 . LeiheAusFallsMöglich ( p2 ) ;

17 b1 . MerkeVor ( p1 ) ;

18 b2 . MerkeVor ( p3 ) ;

19 b o o l y = b2 . VerlängereFallsMöglich ( p1 ) ;

20 b2 . NehmeZurück ( p1 ) ;

21 s t r i n g z = bi b . FindeErfüllbareReservierungen ( ) ;

22 }

23 }

24

25 a b s t r a c t c l a s s Buch

26 {

27 s t a t i c s t r i n g t i t e l ;

28 p u b l i c s t r i n g T i t e l { g et { return t i t e l ; } }

29 i n t anzahlExemplare ;

30 t a g e L e i h f r i s t = 3 0 ;

31 L i s t <Ausleihvorgang > ausleihen = new L i s t <Ausleihvorgang > ( ) ;

32 L i s t <Person > vormerkungen = new L i s t <Person > ( ) ;

33

34 p u b l i c v o i d Buch ( s t r i n g t i t e l , i n t anzahlExemplare )

35 {

36 t h i s . t i t e l = t i t e l ;

37 t h i s . anzahlExemplare = anzahlExemplare ;

38 }

39

40 p u b l i c b o o l LeiheAusFallsMöglich ( Person person )

41 {

42 L i s t <Person > e r f ü l l b a r = FindeErfüllbareReservierungen ( ) ;

43 i f ( e r f ü l l b a r . Contains ( person ) )

44 {

45 ausleihen . Add ( new Ausleihvorgang ( person , t a g e L e i h f r i s t ) ) ;

46 vormerkungen . Remove ( person ) ;

(4)

47 return true ;

48 }

49 e l s e i f ( ausleihen . Count + vormerkungen . Count < anzahlExemplare )

50 {

51 ausleihen . Add ( new Ausleihvorgang ( person , t a g e L e i h f r i s t ) ) ;

52 return true ;

53 }

54 e l s e

55 {

56 return f a l s e ;

57 }

58 }

59

60 // Nur dann verlängerbar , wenn genügend Exemplare n i c h t vorgemerkt .

61 p u b l i c v i r t u a l b o o l VerlängereFallsMöglich ( Person person )

62 {

63 i f ( anzahlExemplare >= ausleihen . Count + vormerkungen . Count )

64 {

65 f o r e a c h ( var a u s l e i h e in ausleihen )

66 {

67 i f ( a u s l e i h e . DiePerson == person )

68 {

69 a u s l e i h e . Verlängere ( t a g e L e i h f r i s t ) ;

70 return true ;

71 }

72 }

73 return f a l s e ;

74 }

75 e l s e

76 {

77 return f a l s e ;

78 }

79 }

80

81 p u b l i c v o i d NehmeZurück ( Person person )

82 {

83 Ausleihvorgang a = 0 ;

84 f o r e a c h ( var a u s l e i h e in ausleihen )

85 {

86 i f ( a u s l e i h e . DiePerson = person )

87 {

88 a = a u s l e i h e ;

89 break ;

90 }

91 }

92

93 i f ( a == n u l l )

94 {

95 ausleihen . Remove ( a ) ;

96 }

97 }

(5)

98

99 p u b l i c v o i d MerkeVor ( Person person )

100 {

101 vormerkungen . Add ( person ) ;

102 }

103

104 p u b l i c v o i d EntferneVormerkung ( Person person )

105 {

106 vormerkungen . Remove ( person ) ;

107 }

108

109 p u b l i c L i s t <Person > FindeErfüllbareReservierungen ( )

110 {

111 L i s t <Person > e r f ü l l b a r = L i s t <Person > ( ) ;

112

113 f o r ( i n t i = 0 ; i < vormerkungen . Count

114 && i < anzahlExemplare − ausleihen . Count ; i ++)

115 {

116 e r f ü l l b a r . Add ( vormerkungen [ i ] ) ;

117 }

118

119 return ;

120 }

121 }

122

123 c l a s s NichtVerlängerbaresBuch : Buch

124 {

125 p u b l i c NichtVerlängerbaresBuch ( s t r i n g t i t e l , i n t anzahlExemplare )

126 : base ( t i t e l , anzahlExemplare )

127 { }

128

129 p u b l i c b o o l VerlängereFallsMöglich ( Person person )

130 {

131 return f a l s e ;

132 }

133 }

134

135 c l a s s Person

136 {

137 s t r i n g name ;

138 p u b l i c s t r i n g Name { g et { return name ; } }

139

140 p u b l i c Person ( s t r i n g name )

141 {

142 t h i s . name = name ;

143 }

144 }

145

146 c l a s s Ausleihvorgang

147 {

148 Person person ;

(6)

149 p u b l i c Person DiePerson { g e t { return person ; } }

150 DateTime e n d e L e i h f r i s t ;

151 p u b l i c DateTime E n d e L e i h f r i s t { ge t { return e n d e L e i h f r i s t ; } }

152

153 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 )

154 {

155 t h i s . person = person ;

156 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

157 }

158

159 p u b l i c v o i d Verlängere ( i n t tage )

160 {

161 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 ) ;

162 }

163 }

164

165 c l a s s B i b l i o t h e k

166 {

167 L i s t <Buch> bücher = new L i s t <Buch > ;

168

169 p u b l i c v o i d FügeBuchHinzu ( buch )

170 {

171 Add ( buch ) ;

172 }

173

174 p u b l i c s t r i n g FindeErfüllbareReservierungen ( )

175 {

176 s t r i n g r e s u l t a t = " " ;

177

178 f o r e a c h ( buch in bücher )

179 {

180 L i s t <Person > e r f ü l l b a r = buch . FindeErfüllbareReservierungen ( ) ;

181 f o r e a c h ( var person in e r f ü l l b a r )

182 {

183 r e s u l t a t += person .Name + " : " + buch . T i t e l + " ; " ;

184 }

185 }

186

187 return r e s u l t a t ;

188 }

189 }

Referenzen

ÄHNLICHE DOKUMENTE

Hilfsmittel: maximal vier einseitig oder zwei beidseitig beschriftete DIN-A4-Spickzettel beliebigen Inhalts, möglichst selbst ver- fasst oder zusammengestellt; kein Skript,

Wenn keine Ereignisse der gewünschten Sparte vorhanden sind, ist die Liste sortiert leer und sortiert.First() wirft eine

Hilfsmittel: maximal vier einseitig oder zwei beidseitig beschriftete DIN-A4-Spickzettel beliebigen Inhalts, möglichst selbst ver- fasst oder zusammengestellt; kein Skript,

123 public Mitarbeiter(string nachname, double stundensatz, 143 public TimeSpan Dauer. 144 { get { return bis - von; } } 148 return

Man könnte zum Beispiel im Programm nicht einfach die Exemplare abzählen, sondern die Exemplare einzeln verwalten, also nicht nur Personen speichern, sondern Personen mit den

Die Klasse Vokabeltrainer des korrigierten Code aus dem Programmlis- ting soll eine öffentliche Methode FindeSchwierigeVokabeln erhalten, welche eine Liste aller Vokabel

Nacht&#34; , weil die Zufallsfunktion im Testmodus immer 0 liefert, so dass immer der erste verbleibende Eintrag genommen wird. y ist false , weil die zweite Antwort eine

Bevor du dich für ein Buch entscheidest, führe eine Buch- Untersuchung durch:.. Der Titel des