• Keine Ergebnisse gefunden

Informatik 2 für Regenerative Energien Klausur vom 20. September 2013

N/A
N/A
Protected

Academic year: 2021

Aktie "Informatik 2 für Regenerative Energien Klausur vom 20. September 2013"

Copied!
5
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Jörn Loviscach

Versionsstand: 20. September 2013, 09:25

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: 15 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, kein Handy und Ähnliches.

Name Vorname Matrikelnummer E-Mail-Adresse, falls nicht in ILIAS

1. Im C#-Programmlisting im Anhang sind 15 Fehler, darunter keine Tippfehler und höchstens ein Fehler pro Zeile. Stellen Sie eine Liste dieser Art mit allen Fehlern auf:

Zeile korrekter Programmtext 123

public void foo()

543

int a = 42;

2. Mit dem (korrigierten) Code aus dem Anhang wird die Methode

Test.Teste()

ausgeführt. Welche Werte stehen in den Variablen

p

,

istDa1

und

istDa2

in den Zeilen 12 bis 14?

3. Wenn für denselben Mitarbeiter zweimal hintereinander

Geht

aufgerufen wird, ohne dass zwischendurch für ihn

Kommt

aufgerufen wird, soll eine Exception geworfen werden. Was schreiben Sie dazu an welcher Stelle ins Programm?

4. Schreiben Sie eine Methode der Klasse

Zeiterfassung

, die bestimmt, wie viele Mitarbeiter aktuell anwesend sind.

5. Schreiben Sie eine Klasse

Gast

folgender Art: Sie erbt von

Person

. Sie enthält einen

Mitarbeiter

, den der Gast besucht. Der Konstruktor von

Gast

hat als Parameter Vorname, Nachname, Anrede, Geburtsdatum und den Mitarbeiter, der besucht wird.

1

(2)

6. Schreiben Sie eine Methode der Klasse

Zeiterfassung

, die in eine Datei namens

"zeiten.txt"

zeilenweise Personalnummer und gesamte Arbeitszeit ausgibt. Benutzen Sie dafür zum Beispiel

System.IO.File.WriteAllLines(string pfad, List<string> zeilen)

. Welche Änderung(en) sind in den anderen Teilen des Programms nötig?

7. Zeichnen Sie zu diesen C#-Klassen ein UML-Klassendiagramm:

abstract class A {

int b;

public virtual int c(int d) {

return 13;

} }

class B : A {

public override int c(int d) {

return 42;

} }

class C : B {

int e;

}

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<int> a = new List<int>();

a.Add(13);

a.Add(42);

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

b.Enqueue(a[1]);

b.Enqueue(9);

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

c.Add(b);

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

c.Add(b);

int x = b.Dequeue();

int y = c[2].Dequeue();

c[0].Enqueue(11);

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

(3)

Dieses Listing enthält 15 Fehler!

Dies soll ein Programm zur Zeiterfassung in einem kleinen Betrieb werden.

Die Methode

Teste

macht die Handhabung der Klassen vor.

1 c l a s s Test

2 {

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

4 {

5 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 mCurie = new M i t a r b e i t e r ( " Marie " , " Curie " ,

7 "Madame" , new DateTime ( 1 8 6 7 , 11 , 7 ) ) ;

8 z . fügeMitarbeiterHinzu ( mCurie ) ;

9 z . fügeMitarbeiterHinzu ( M i t a r b e i t e r ( " A l b e r t " , " E i n s t e i n " ,

10 " Herr " , new DateTime ( 1 8 7 9 , 3 , 1 4 ) ) ) ;

11 mCurie .Kommt ( ) ;

12 i n t p = z . findePersonalnummer ( mCurie ) ;

13 b o o l istDa1 = z . IstDa ( p ) ;

14 b o o l istDa2 = z . IstDa ( 2 ) ;

15 z . Geht ( p ) ;

16 }

17 }

18

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

20 {

21 L i s t <M i t a r b e i t e r > m i t a r b e i t e r = new L i s t <M i t a r b e i t e r > ( ) ;

22

23 p u b l i c v o i d fügeMitarbeiterHinzu ( M i t a r b e i t e r m)

24 {

25 Add (m) ;

26 }

27

28 p u b l i c M i t a r b e i t e r g i b M i t a r b e i t e r ( i n t personalnummer )

29 {

30 return m i t a r b e i t e r . Find ( x => x . Personalnummer == personalnummer ) ;

31 }

32

33 p u b l i c i n t findePersonalnummer ( M i t a r b e i t e r m)

34 {

35 return m. Personalnummer ;

36 }

37

38 p u b l i c v o i d Kommt( i n t personalnummer )

39 {

40 g i b M i t a r b e i t e r ( personalnummer ) . Kommt ( ) ;

41 }

42

43 p u b l i c v o i d Geht ( i n t personalnummer )

44 {

45 g i b M i t a r b e i t e r ( personalnummer ) . Geht ( ) ;

46 }

47

(4)

48 p u b l i c b o o l IstDa ( i n t personalnummer )

49 {

50 g i b M i t a r b e i t e r ( personalnummer ) . IstDa ( ) ;

51 }

52 }

53

54 c l a s s KommtGehtZeit

55 {

56 DateTime kommt ;

57 DateTime geht ;

58

59 b o o l nochNichtGegangen ;

60 b o o l NochNichtGegangen

61 {

62 g et { return nochNichtGegangen ; }

63 }

64

65 p u b l i c KommtGehtZeit ( )

66 {

67 kommt = DateTime .Now;

68 nochNichtGegangen = true ;

69 }

70

71 p u b l i c Geht ( )

72 {

73 geht = DateTime .Now;

74 nochNichtGegangen = true ;

75 }

76

77 p u b l i c double Dauer

78 {

79 g et { return ( geht − kommt ) . TotalHours ; } // Kein F e h l e r !

80 }

81 }

82

83 c l a s s Person

84 {

85 s t r i n g vorname ;

86 s t r i n g nachname ;

87 s t r i n g anrede ;

88 DateTime geburtsdatum ;

89

90 p u b l i c Person ( s t r i n g vorname , s t r i n g nachname ,

91 s t r i n g anrede , DateTime geburtsdatum )

92 {

93 t h i s . vorname = vorname ;

94 t h i s . nachname = nachname ;

95 t h i s . anrede = anrede ;

96 t h i s . geburtsdatum = geburtsdatum ;

97 }

98

(5)

99 p u b l i c a b s t r a c t b o o l DarfBüroAlleinBetreten ( )

100 {

101 return f a l s e ;

102 }

103 }

104

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

106 {

107 i n t w ö c h e n t l i c h e R e g e l a r b e i t s z e i t = 3 8 . 5 ;

108 L i s t <KommtGehtZeit> kommtGehtZeiten = new L i s t ( ) ;

109 double g e s a m t e A r b e i t s z e i t ;

110

111 i n t personalnummer ;

112 s t a t i c i n t zuletztVergebenePersonalnummer ;

113 p u b l i c i n t Personalnummer

114 {

115 g et { return personalnummer ; }

116 }

117

118 p u b l i c M i t a r b e i t e r ( s t r i n g vorname , s t r i n g nachname ,

119 s t r i n g anrede , DateTime geburtsdatum )

120 : base ( vorname , nachname , anrede , geburtsdatum )

121 {

122 zuletztVergebenePersonalnummer ++;

123 personalnummer = zuletztVergebenePersonalnummer ;

124 }

125

126 p u b l i c v o i d Kommt ( )

127 {

128 kommtGehtZeiten . Add ( new KommtGehtZeit ) ;

129 }

130

131 p u b l i c v o i d Geht ( )

132 {

133 // Last ( ) g i b t den l e t z t e n Eintrag e i n e r L i s t e .

134 kommtGehtZeiten . Last ( ) . Geht ( ) ;

135 g e s a m t e A r b e i t s z e i t = kommtGehtZeiten . Last ( ) . Dauer ;

136 }

137

138 p u b l i c b o o l IstDa ( )

139 {

140 return kommtGehtZeiten . Count ! = 0

141 && ! kommtGehtZeiten . Last ( ) . NochNichtGegangen ;

142 }

143

144 p r o t e c t e d o v e r r i d e b o o l DarfBüroAlleinBetreten ( )

145 {

146 return true ;

147 }

148 }

Referenzen

ÄHNLICHE DOKUMENTE

99 public virtual bool DarfBüroAlleinBetreten() 105 class Mitarbeiter : Person. 107 double wöchentlicheRegelarbeitszeit

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

Wenn derselbe Benutzer zum zweiten Mal versucht, dieselbe Musik zu be- werten, soll eine Exception geworfen werden.. Welche Änderungen nehmen Sie dazu im (korrigierten) Code aus

Ein Verweis auf die Musik mit Jailhouse Rock (weil Carla am besten passt), null (weil niemand passt) und null (weil Anna am besten passt, aber kein anderes Stück als das gemeinsame

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,

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,