• Keine Ergebnisse gefunden

Informatik 2 für Regenerative Energien Klausur vom 26. Juli 2018

N/A
N/A
Protected

Academic year: 2021

Aktie "Informatik 2 für Regenerative Energien Klausur vom 26. Juli 2018"

Copied!
6
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Jörn Loviscach

Versionsstand: 26. Juli 2018, 09:14

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

p

,

c

und

b

? Beschreiben Sie gegebenenfalls, wie Sie zu Ihrer Antwort kommen.

3. Die Methode

BucheZimmer

soll eine Exception werfen, wenn der Zeitpunkt

von

nicht vor dem Zeitpunkt

bis

liegt. Was ändern Sie dazu wie an dem (korrigierten) Code aus dem Programmlisting?

4. Schreiben Sie für die Klasse

Reservierungssystem

aus dem korrigier- ten Code aus dem Programmlisting eine parameterlose öffentliche Metho- de

BerechneGesamteinnahmen

, deren Rückgabewert die Gesamtsumme der Einnahmen aus allen im System vorhandenen Buchungen ist.

1

(2)

5. Schreiben Sie für die Klasse

Reservierungssystem

des korrigierten Co- de aus dem Programmlisting eine Überladung der Methode

FindeZimmer

, bei der man zusätzlich angeben kann, ob man einen Kühlschrank wünscht.

Welche Änderungen sind dazu gegebenenfalls an anderen Klassen nötig?

6. Leiten Sie von der Klasse

Zimmer

des korrigierten Code aus dem Programm- listing eine Klasse

ZimmerMitBalkon

ab, die eine Angabe für die Quadrat- meterzahl des Balkons enthält.

7. Zeichnen Sie ein UML-Klassendiagramm für die folgenden drei Klassen:

class A : B {

int x;

}

class B {

float y;

public virtual double f(int z) {

return 42.0;

} }

class C : A {

public override double f(int z) {

return 13.0;

} }

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.

List<Queue<int>> a = new List<Queue<int>>();

Queue<int> q = new Queue<int>();

a.Add(q);

q.Enqueue(1);

a.Add(q);

q.Enqueue(2);

a.Add(q);

q.Enqueue(3);

a.Add(new Queue<int>());

a[0].Enqueue(4);

a[1].Enqueue(5);

int x = a.Count;

int y = a[0].Dequeue();

int z = a[1].Dequeue();

(3)

Dieses Listing enthält 15 Fehler!

Dies ist der Anfang eines Programms für Zimmerreservierungen in einem Hotel.

Die Methode

Teste

der Klasse

Test

macht die Benutzung der Klassen vor. Dies ist der Programmcode der Klassen:

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 L i s t <Zimmer> zim = new L i s t <Zimmer > ( ) ;

6 zim . Add ( new Zimmer ( 1 0 1 , new Bett [ ] { new Doppelbett ( ) } ,

7 f a l s e , 7 0 . 0 ) ) ;

8 zim . Add ( new Zimmer ( 1 0 2 ,

9 new Bett [ ] { new Doppelbett ( ) , new E i n z e l b e t t ( ) } ,

10 true , 9 0 . 0 ) ) ;

11 zim . Add ( new Zimmer ( 1 0 3 , new Bett [ ] { new E i n z e l b e t t ( ) } ,

12 f a l s e , 6 0 . 0 ) ) ;

13 Reservierungssystem r e s = Reservierungssystem ( zim ) ;

14 Kunde k1 = new Kunde ( ) ;

15 Kunde k2 = new Kunde ( ) ;

16 DateTime d1 = new DateTime ( 2 0 1 8 , 8 , 1 ) ;

17 DateTime d2 = new DateTime ( 2 0 1 8 , 8 , 7 ) ;

18 z = r e s . FindeZimmer ( d1 , d2 , 3 ) ;

19 double p = z [ 0 ] . BerechneGesamtpreis ( ( i n t ) ( ( d2 − d1 ) . TotalDays ) ) ;

20 r e s . BucheZimmer ( k1 , z [ 0 ] , d1 , d2 ) ;

21 i n t c = r e s . FindeZimmer ( d1 , d2 , 1 ) . Count ;

22 b o o l b = r e s . BucheZimmer ( k2 , zim [ 1 ] , d1 , d2 ) ;

23 }

24 }

25

26 c l a s s Reservierungssystem

27 {

28 L i s t <Zimmer> zimmer ;

29 L i s t <Reservierung > reservierungen = new L i s t <Reservierung > ( ) ;

30

31 Reservierungssystem ( L i s t <Zimmer> zimmer )

32 {

33 t h i s . zimmer = zimmer ;

34 }

35

36 // Hinweis : Es s o l l OK s e i n , wenn der neue Gast am s e l b e n Tag a n r e i s t ,

37 // an dem der a l t e Gast a b r e i s t .

38 b o o l IstZimmerFrei ( Zimmer zimmer , DateTime von , DateTime b i s )

39 {

40 f r e i = true ;

41

42 f o r e a c h ( Reservierung r in reservierungen )

43 {

44 i f ( r . Zimmer == zimmer || von < r . Bis && b i s > r . Von )

45 {

46 f r e i = f a l s e ;

(4)

47 break ;

48 }

49 }

50

51 return f r e i ;

52 }

53

54 // Hinweis : Es s o l l nur nach Zimmern mit

55 // der e x a k t r i c h t i g e n Zahl an S c h l a f p l ä t z e n g e s u c h t werden .

56 p u b l i c L i s t <Zimmer> FindeZimmer ( DateTime von ,

57 DateTime b is , i n t zahlDerGäste )

58 {

59 L i s t <Zimmer> verfügbareZimmer = L i s t <Zimmer > ( ) ;

60

61 f o r e a c h ( z in zimmer )

62 {

63 i f ( z . ZahlDerGäste == zahlDerGäste

64 && IstZimmerFrei ( z , von , b i s ) )

65 {

66 Add ( z ) ;

67 }

68 }

69

70 return verfügbareZimmer ;

71 }

72

73 p u b l i c b o o l BucheZimmer ( Kunde kunde , Zimmer zimmer ,

74 DateTime von , DateTime b i s )

75 {

76 i f ( ! IstZimmerFrei ( zimmer , von , b i s ) )

77 {

78 return f a l s e ;

79 }

80

81 reservierungen . Add ( new Reservierung ( kunde , zimmer , von , b i s ) ) ;

82 return ;

83 }

84

85 p u b l i c b o o l GibtEsReservierung ( Kunde kunde , Zimmer zimmer ,

86 DateTime von , DateTime b i s )

87 {

88 Reservierung r1 = new Reservierung ( kunde , zimmer , von , b i s ) ;

89

90 f o r e a c h ( Reservierung r in reservierungen )

91 {

92 i f ( r . I s t G l e i c h ( r1 ) )

93 {

94 return true ;

95 }

96 }

97

(5)

98 return f a l s e ;

99 }

100 }

101

102 a b s t r a c t c l a s s Bett

103 {

104 p u b l i c i n t ZahlDerGäste ( ) ;

105 }

106

107 c l a s s E i n z e l b e t t : Bett

108 {

109 p u b l i c v i r t u a l i n t ZahlDerGäste ( )

110 {

111 return 1 ;

112 }

113 }

114

115 c l a s s Doppelbett : Bett

116 {

117 p u b l i c o v e r r i d e i n t ZahlDerGäste ( )

118 {

119 return 2 ;

120 }

121 }

122

123 c l a s s Zimmer : Bett

124 {

125 i n t nummer ;

126 Bett [ ] be tt en ;

127 b o o l mitKühlschrank ;

128 double preisProNacht ;

129

130 p u b l i c Zimmer ( i n t nummer, Bett [ ] betten , b o o l mitKühlschrank ,

131 double preisProNacht )

132 {

133 t h i s . nummer = nummer ;

134 t h i s . b et te n = b et te n ;

135 t h i s . mitKühlschrank = mitKühlschrank ;

136 t h i s . preisProNacht = preisProNacht ;

137 }

138

139 p u b l i c i n t ZahlDerGäste

140 {

141 g et { return b et te n .Sum( x => x . ZahlDerGäste ( ) ) ; }

142 }

143

144 p u b l i c double BerechneGesamtpreis ( i n t zahlDerÜbernachtungen )

145 {

146 preisProNacht * zahlDerÜbernachtungen ;

147 }

148 }

(6)

149

150 c l a s s Reservierung

151 {

152 Kunde kunde ;

153

154 Zimmer zimmer ;

155 p u b l i c Zimmer Zimmer

156 { ge t { return zimmer ; } }

157

158 DateTime von ;

159 p u b l i c DateTime Von

160 { ge t { return von ; } }

161

162 DateTime b i s ;

163 p u b l i c DateTime Bis

164 { ge t { return b i s ; } }

165

166 p u b l i c Reservierung ( Kunde kunde , Zimmer zimmer ,

167 DateTime von , DateTime b i s )

168 {

169 t h i s . kunde = kunde ;

170 t h i s . zimmer = zimmer ;

171 t h i s . von = von ;

172 t h i s . b i s = b i s ;

173 }

174

175 p u b l i c b o o l I s t G l e i c h ( r )

176 {

177 return kunde == r . kunde && zimmer == r . zimmer

178 && von == r . von && b i s == r . b i s ;

179 }

180 }

181

182 a b s t r a c t c l a s s Kunde

183 {

184 s t r i n g vorname ; // b l e i b t noch ungeschrieben

185 s t r i n g name ; // b l e i b t noch ungeschrieben

186 }

Referenzen

ÄHNLICHE DOKUMENTE

Erweitern Sie in die Klasse Kfz aus dem (korrigierten) Listing im Anhang um eine öffentliche Methode string ListeFahrerUndKilometer() , die die Fahrer und ihre gefahrenen Kilometer

Man führt eine Klasse Inspektion ein, legt eine eine Oberklasse (z. Fahrtenbucheintrag genannt) von Fahrt und Inspektion an und legt fahrtenbuch als Liste von Ereignis an. Die

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

Man kann die neue Klasse von Bakterium ableiten , muss dann aber noch die beiden Konstruktoren und eine neue Überschreibung für Vermehre schreiben (weil sonst die neue

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

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

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

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