• Keine Ergebnisse gefunden

Informatik 2 für Regenerative Energien Klausur vom 13. Juli 2016

N/A
N/A
Protected

Academic year: 2021

Aktie "Informatik 2 für Regenerative Energien Klausur vom 13. Juli 2016"

Copied!
6
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Jörn Loviscach

Versionsstand: 13. Juli 2016, 00:09

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

a

,

b

und

c

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

3. Zeichnen Sie für die drei Klassen

Tätigkeit

,

Projekttätigkeit

und

Pause

aus dem Code im Anhang ein UML-Klassendiagramm. Zeichnen Sie nur Felder (Attribute) und Methoden ein, keine Konstruktoren und Properties. Damit gegebenenfalls Kursivschrift zu erkennen ist, umkringeln Sie die oder benutzen Sie eine andere Farbe dafür.

4. In der Klasse

Projekt

des korrigierten Code aus dem Programmlisting ist es möglich, dass

kunde

die Nullreferenz ist. Verhindern Sie das.

5. Jede Instanz der Klasse

Tätigkeit

im korrigierten Code aus dem An- hang soll eine Methode

GibProjekt

besitzen. Instanzen der Klasse

Projekttätigkeit

sollen hier das Projekt zurückliefern; Instanzen der Klasse

Pause

sollen

null

zurückliefern. Lösen Sie dies mit Polymorphie.

1

(2)

6. Schreiben Sie für die Klasse

Zeiterfassung

im korrigierten Code aus dem Anhang diese öffentliche Methode:

TimeSpan ZähleProjektstundenVonMitarbeiter(Mitarbeiter m)

Sie soll Dauern der gesamten Projekttätigkeiten des Mitarbeiters aufsum- mieren und zurückliefern. Gegebenenfalls sind auch anderswo Änderungen am Code nötig.

7. Leiten Sie von der Klasse

Tätigkeit

eine Klasse

Urlaub

ab und schreiben Sie dafür folgenden öffentlichen Konstruktor:

Urlaub(DateTime von, int anzahlTage)

Hinweis:

TimeSpan

hat eine statische Methode

FromDays

.

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.

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

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

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

s.Add(q);

s.Add(q);

s.Add(r);

q.Enqueue(1);

q.Enqueue(2);

q.Enqueue(3);

r.Enqueue(q.Dequeue());

int x = s[0].Dequeue();

int y = s[1].Dequeue();

int z = s[2].Dequeue();

(3)

Dieses Listing enthält 15 Fehler!

Dies soll ein Programm für eine Zeiterfassung sein, die verschiedene Projekte und Kunden unterscheiden kann.

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 Z e i t e r f a s s u n g z = new Z e i t e r f a s s u n g ;

6 M i t a r b e i t e r m1 = new M i t a r b e i t e r ( " Schmidt " , 1 0 0 . 0 , 2 0 0 . 0 ) ;

7 M i t a r b e i t e r m2 = new M i t a r b e i t e r ( " Müller " , 1 5 0 . 0 , 3 0 0 . 0 ) ;

8 Kunde k1 = new Kunde ( ) ;

9 Kunde k2 = new Kunde ( ) ;

10 P r o j e k t p1 = new P r o j e k t ( k1 ) ;

11 P r o j e k t p2 = new P r o j e k t ( k2 ) ;

12 // DateTime ( Jahr , Monat , Tag , Stunde , Minute , Sekunde )

13 P r o j e k t t ä t i g k e i t pt1 = new P r o j e k t t ä t i g k e i t (

14 new DateTime ( 2 0 1 6 , 7 , 11 , 11 , 0 , 0 ) ,

15 new DateTime ( 2 0 1 6 , 7 , 11 , 12 , 0 , 0 ) , p1 ) ;

16 T ä t i g k e i t t1 = new Pause (

17 new DateTime ( 2 0 1 6 , 7 , 11 , 12 , 0 , 0 ) ,

18 new DateTime ( 2 0 1 6 , 7 , 11 , 13 , 0 , 0 ) ) ;

19 T ä t i g k e i t t2 = new P r o j e k t t ä t i g k e i t (

20 new DateTime ( 2 0 1 6 , 7 , 11 , 20 , 0 , 0 ) ,

21 new DateTime ( 2 0 1 6 , 7 , 11 , 23 , 0 , 0 ) , p2 ) ;

22 z . FügeAufgabeHinzu (m1, pt1 , " P l a n u n g s t r e f f e n " ) ;

23 z . FügeAufgabeHinzu (m2, pt1 , " P l a n u n g s t r e f f e n " ) ;

24 z . FügeAufgabeHinzu (m1, t1 , " Mittag " ) ;

25 z . FügeAufgabeHinzu (m1, t2 , " N o t f a l l " ) ;

26 double a = z . SammleProjekte ( ) . Count ( ) ;

27 double b = z . BestimmeKostenImProjekt ( p1 ) ;

28 double c = z . BestimmeKostenFürKunde ( k2 ) ;

29 }

30 }

31

32 c l a s s Z e i t e r f a s s u n g

33 {

34 L i s t <Aufgabe> aufgaben = new L i s t <Aufgabe > ( ) ;

35

36 p u b l i c v o i d FügeAufgabeHinzu ( M i t a r b e i t e r m i t a r b e i t e r ,

37 T ä t i g k e i t t ä t i g k e i t , s t r i n g kommentar )

38 {

39 aufgaben . Add ( Aufgabe ( m i t a r b e i t e r , t ä t i g k e i t , kommentar ) ) ;

40 }

41

42 p u b l i c double BestimmeKostenImProjekt ( P r o j e k t p r o j e k t )

43 {

44 double summe = 0 . 0 ;

45 f o r e a c h ( Aufgabe a in aufgaben )

46 {

47

(4)

48 i f ( a . D i e T ä t i g k e i t i s P r o j e k t t ä t i g k e i t )

49 {

50 P r o j e k t t ä t i g k e i t p = ( P r o j e k t t ä t i g k e i t ) a . D i e T ä t i g k e i t ;

51 i f ( p . DasProjekt == p r o j e k t )

52 {

53 summe += a . BerechneKosten ( ) ;

54 }

55 }

56 }

57 return summe ;

58 }

59

60 p u b l i c SammleProjekte ( )

61 {

62 p u b l i c L i s t <Projekt > p r o j e k t e = new L i s t <Projekt > ( ) ;

63 f o r e a c h ( a in aufgaben )

64 {

65 i f ( a . D i e T ä t i g k e i t i s P r o j e k t t ä t i g k e i t )

66 {

67 P r o j e k t p = ( ( P r o j e k t t ä t i g k e i t ) a . D i e T ä t i g k e i t ) . DasProjekt ;

68 i f ( ! p r o j e k t e . Contains ( p ) ) // Contains : e n t h a l t e n ?

69 {

70 p r o j e k t e . Add ;

71 }

72 }

73 }

74 return p r o j e k t e ;

75 }

76

77 p u b l i c double BestimmeKostenFürKunde ( kunde )

78 {

79 double summe = 0 . 0 ;

80 L i s t <Projekt > p r o j e k t e = SammleProjekte ( ) ;

81 f o r e a c h ( P r o j e k t p in p r o j e k t e )

82 {

83 i f ( p . DerKunde == kunde )

84 {

85 summe += BestimmeKostenImProjekt ( ) ;

86 }

87 }

88 return summe ;

89 }

90 }

91

92 c l a s s Aufgabe

93 {

94 M i t a r b e i t e r m i t a r b e i t e r ;

95 T ä t i g k e i t t ä t i g k e i t ;

96 p u b l i c T ä t i g k e i t D i e T ä t i g k e i t { ge t { return t ä t i g k e i t ; } }

97 s t r i n g kommentar ;

98

(5)

99 p u b l i c Aufgabe ( M i t a r b e i t e r m i t a r b e i t e r , T ä t i g k e i t t ä t i g k e i t ,

100 s t r i n g kommentar )

101 {

102 t h i s . m i t a r b e i t e r = m i t a r b e i t e r ;

103 t h i s . t ä t i g k e i t = t ä t i g k e i t ;

104 t h i s . kommentar = kommentar ;

105 }

106

107 p u b l i c double BerechneKosten ( )

108 {

109 // TotalHours i s t e i n e P r o p e r t y von DateTime .

110 return t ä t i g k e i t . Dauer . TotalHours * Stundensatz

111 + ( t ä t i g k e i t . HatNachtzuschlag ( ) ? m i t a r b e i t e r . Nachtzuschlag : 0 . 0 ) ;

112 }

113 }

114

115 c l a s s M i t a r b e i t e r

116 {

117 s t r i n g nachname ;

118 double stundensatz ;

119 p u b l i c double Stundensatz { g e t { return stundensatz ; } }

120 double nachtzuschlag ; // maximal e i n Mal pro Aufgabe

121 p u b l i c double Nachtzuschlag { g e t { return nachtzuschlag ; } }

122

123 p u b l i c v o i d M i t a r b e i t e r ( s t r i n g nachname , double stundensatz ,

124 double nachtzuschlag )

125 {

126 t h i s . nachname = nachname ;

127 t h i s . stundensatz = stundensatz ;

128 t h i s . nachtzuschlag = nachtzuschlag ;

129 }

130 }

131

132 a b s t r a c t c l a s s T ä t i g k e i t

133 {

134 DateTime von ;

135 DateTime b i s ;

136

137 p u b l i c T ä t i g k e i t ( DateTime von , DateTime b i s )

138 {

139 t h i s . von = von ;

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

141 }

142

143 p u b l i c Dauer

144 { ge t { b i s − von ; } }

145

146 p u b l i c b o o l HatNachtzuschlag ( )

147 {

148 b i s . Hour >= 20 || von . Hour <= 6 || von . Date ! = b i s . Date ;

149 }

(6)

150 }

151

152 c l a s s P r o j e k t t ä t i g k e i t : T ä t i g k e i t

153 {

154 P r o j e k t p r o j e k t ;

155 p u b l i c P r o j e k t DasProjekt { ge t { return p r o j e k t ; } }

156

157 p u b l i c P r o j e k t t ä t i g k e i t ( DateTime von , DateTime bi s , P r o j e k t p )

158 : base ( von , b i s )

159 {

160 p r o j e k t = p ;

161 }

162 }

163

164 c l a s s Pause : T ä t i g k e i t

165 {

166 p u b l i c Pause ( DateTime von , DateTime b i s )

167 : base ( von , b i s )

168 { }

169 }

170

171 a b s t r a c t c l a s s P r o j e k t

172 {

173 Kunde kunde ;

174 p u b l i c Kunde DerKunde

175 { ge t { return kunde ; } }

176

177 p u b l i c P r o j e k t ( Kunde kunde )

178 {

179 t h i s . kunde = kunde ;

180 }

181 }

182

183 c l a s s Kunde

184 { }

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,

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

Hilfsmit- tel: maximal acht einseitig oder vier beidseitig beschriftete DIN-A4-Spickzettel beliebigen Inhalts, möglichst selbst verfasst oder zusammengestellt; kein Skript, keine

Hilfsmit- tel: maximal acht einseitig oder vier beidseitig beschriftete DIN-A4-Spickzettel beliebigen Inhalts, möglichst selbst verfasst oder zusammengestellt; kein Skript, keine

Hilfsmit- tel: maximal acht einseitig oder vier beidseitig beschriftete DIN-A4-Spickzettel beliebigen Inhalts, möglichst selbst verfasst oder zusammengestellt; kein Skript, keine

Hilfsmit- tel: maximal acht einseitig oder vier beidseitig beschriftete DIN-A4-Spickzettel beliebigen Inhalts, möglichst selbst verfasst oder zusammengestellt; kein Skript, keine

Hilfsmit- tel: maximal vier einseitig oder zwei beidseitig beschriftete DIN-A4-Spickzettel beliebigen Inhalts, möglichst selbst verfasst oder zusammengestellt; kein Skript, keine

Hilfsmit- tel: maximal acht einseitig oder vier beidseitig beschriftete DIN-A4-Spickzettel beliebigen Inhalts, möglichst selbst verfasst oder zusammengestellt; kein Skript, keine