• Keine Ergebnisse gefunden

Informatik 2 für Regenerative Energien Klausur vom 15. Juli 2015

N/A
N/A
Protected

Academic year: 2021

Aktie "Informatik 2 für Regenerative Energien Klausur vom 15. Juli 2015"

Copied!
6
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Jörn Loviscach

Versionsstand: 15. Juli 2015, 09:50

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. Mit dem (korrigierten) Code aus dem Programmlisting im Anhang wird Folgendes ausgeführt:

Zelle f = new Fresszelle(640, 480);

Zelle b = new Bakterium(640, 480);

List<Zelle> zellen = new List<Zelle>();

zellen.Add(f);

zellen.Add(b);

int x = f.Vermehre().Count;

b.FrissWennMöglich(zellen);

int y = zellen.Count;

bool z = zellen[0].IstNahe(f);

Was steht danach in den Variablen

x

,

y

,

z

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

1

(2)

3. Beschreiben Sie in ca. zwei Sätzen, an welcher Stelle im Programm und aus welchem Grund Folgendes mit dem (korrigierten) Code aus dem Programm- listing fehlschlägt:

Zelle g = new Fresszelle(640, 480);

g.IstNahe(null);

4. Jede Fresszelle soll sich merken, wie viele Bakterien sie gefressen hat. Diese Anzahl soll man öffentlich abfragen können. Welche Änderungen sind dazu an den (korrigierten) Klassen im Anhang nötig?

5. Erweitern Sie den Code der

for

-Schleife in den Zeilen 31 bis 34 des Lis- tings im Anhang so, dass die Bakterien mit einem gewissen Mindestabstand zueinander platziert werden. Verwenden Sie dazu die Methode

IstNahe

. 6. Es soll eine Klasse für eine weitere Sorte an Bakterien geschrieben wer-

den. Diese sollen als längliche Ovale dargestellt werden. Beschreiben Sie in ca. drei Sätzen, was dafür zu tun ist.

7. Zeichnen Sie das UML-Klassendiagramm für diese C#-Klassen:

abstract class X {

int a;

public abstract int f(double x);

}

class Y : X {

double b;

string g(int y) {

return "bla";

} }

class Z : Y {

public override int f(double x) {

return 42;

} }

Damit Kursivschrift (falls nötig) zu erkennen ist, umkringeln Sie diese oder benutzen Sie eine andere Farbe dafür.

(3)

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

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

a.Push(b);

a.Push(b);

a.Push(c);

a.Push(c);

b.Add(16);

b.Add(23);

a.Pop().Add(8);

int x = a.Pop()[0];

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

int z = a.Pop()[0];

Dieses Listing enthält 15 Fehler!

Dies soll ein Programm für eine biologische Simulation sein: Fresszellen und Bakterien bewegen sich langsam über eine Fläche. Die Bakterien vermehren sich. Die Fresszellen fressen Bakterien, die in ihre Nähe kommen.

1 a b s t r a c t c l a s s Simulation

2 {

3 p r o t e c t e d double f e n s t e r b r e i t e ;

4 p r o t e c t e d double f e n s t e r h ö h e ;

5 p r o t e c t e d L i s t < Z e l l e > z e l l e n = new L i s t < Z e l l e > ;

6

7 p u b l i c Simulation ( double f e n s t e r b r e i t e , double f e n s t e r h ö h e )

8 {

9 t h i s . f e n s t e r b r e i t e = f e n s t e r b r e i t e ;

10 t h i s . f e n s t e r h ö h e = f e n s t e r h ö h e ;

11 }

12

13 p u b l i c v o i d MacheSimulationsSchritt ( ) ;

14

15 p u b l i c v o i d Zeichne ( Canvas c )

16 {

17 c . Children . Clear ( ) ;

18 f o r e a c h ( var z in Z e l l e )

19 {

20 Zeichne ( c ) ;

21 }

22 }

23 }

24

(4)

25 c l a s s Bakteriensimulation

26 {

27 p u b l i c Bakteriensimulation ( i n t zahlBakterien , i n t z a h l F r e s s z e l l e n ,

28 double f e n s t e r b r e i t e , double f e n s t e r h ö h e )

29 : base ( f e n s t e r b r e i t e , f e n s t e r h ö h e )

30 {

31 f o r ( i n t i = 0 ; i < zahlBakterien ; i ++)

32 {

33 z e l l e n . Add ( new Bakterium ( f e n s t e r b r e i t e , f e n s t e r h ö h e ) ) ;

34 }

35 f o r ( i n t i = 0 ; i < z a h l F r e s s z e l l e n ; i ++)

36 {

37 z e l l e n . Add ( new F r e s s z e l l e ( f e n s t e r b r e i t e , f e n s t e r h ö h e ) ) ;

38 }

39 }

40

41 p u b l i c o v e r r i d e v o i d MacheSimulationsSchritt ( )

42 {

43 i n t i = 0 ;

44 while ( i < z e l l e n . Count )

45 {

46 Z e l l e z = z e l l e n [ i ] ;

47 z . FrissWennMöglich ( z e l l e n ) ;

48

49 // z kann Z e l l e n g e f r e s s e n haben , d i e in der L i s t e

50 // vor z s t e h e n ; das b i s h e r i g e i stimmt dann n i c h t mehr .

51 // Deshalb :

52 i = z e l l e n . IndexOf ( z ) + 1 ;

53 }

54

55 L i s t < Z e l l e > t o c h t e r z e l l e n = new L i s t < Z e l l e > ( ) ;

56 f o r e a c h ( var z in z e l l e n )

57 {

58 z . Bewege ( f e n s t e r b r e i t e , f e n s t e r h ö h e ) ;

59 // AddRange h e i ß t : a l l e s aus e i n e r anderen L i s t e hinzufügen

60 t o c h t e r z e l l e n . AddRange ( z . Vermehre ) ;

61 }

62 z e l l e n . AddRange ( t o c h t e r z e l l e n ) ;

63 }

64 }

65

66 a b s t r a c t c l a s s Z e l l e

67 {

68 s t a t i c Random würfel = new Random ( ) ;

69 p r o t e c t e d Point o r t ;

70 p r o t e c t e d double g e s c h w i n d i g k e i t = 5 . 0 ;

71 p r o t e c t e d Brush f a r b e = Brushes . Red ;

72 p r o t e c t e d double radius = 2 . 0 ;

73 74 75

(5)

76 p u b l i c Z e l l e ( Point p )

77 {

78 o r t = p ;

79 }

80

81 p u b l i c Z e l l e ( double f e n s t e r b r e i t e , double f e n s t e r h ö h e )

82 {

83 o r t = Point ( f e n s t e r b r e i t e * würfel . NextDouble ( ) ,

84 f e n s t e r h ö h e * würfel . NextDouble ( ) ) ;

85 }

86

87 p u b l i c v o i d Zeichne ( Canvas canvas )

88 {

89 E l l i p s e e l l i p s e = new E l l i p s e ( ) ;

90 e l l i p s e . Width = 2 . 0 * radius ;

91 e l l i p s e . Height = 2 . 0 * radius ;

92 e l l i p s e . F i l l = f a r b e ;

93 Canvas . S e t L e f t ( e l l i p s e , o r t . X − radius ) ; // k o r r e k t !

94 Canvas . SetTop ( e l l i p s e , o r t . Y − radius ) ;

95 canvas . Children . Add ( e l l i p s e ) ;

96 }

97

98 p u b l i c v i r t u a l L i s t < Z e l l e > Vermehre ( )

99 {

100 return new L i s t < Z e l l e > ( ) ;

101 }

102

103 p u b l i c v i r t u a l v o i d FrissWennMöglich ( L i s t < Z e l l e > z e l l e n )

104 { }

105

106 p u b l i c v o i d Bewege ( double f e n s t e r b r e i t e , double f e n s t e r h ö h e )

107 {

108 double x = o r t . X + g e s c h w i n d i g k e i t * ( würfel . NextDouble ( ) − 0 . 5 ) ;

109 double y = o r t . Y + g e s c h w i n d i g k e i t * ( würfel . NextDouble ( ) − 0 . 5 ) ;

110

111 // Ins F e n s t e r zurückbringen :

112 i f ( x > f e n s t e r b r e i t e ) { x −= f e n s t e r b r e i t e ; }

113 e l s e i f ( x < 0 ) { x += f e n s t e r b r e i t e ; }

114

115 i f ( y > f e n s t e r h ö h e ) { y −= f e n s t e r h ö h e ; }

116 e l s e i f ( y < 0 ) { y += f e n s t e r h ö h e ; }

117

118 o r t = new Point ( ) ;

119 }

120

121 p u b l i c b o o l IstNahe ( Z e l l e z )

122 {

123 double dx = o r t . X − z . o r t . X ;

124 double dy = o r t . Y − z . Y ;

125 // Pythagoras !

126 return dx * dx + dy * dy < 7.0 * 7 . 0 ;

(6)

127 }

128 }

129

130 c l a s s F r e s s z e l l e : Z e l l e

131 {

132 p u b l i c o v e r r i d e F r e s s z e l l e ( double f e n s t e r b r e i t e , double f e n s t e r h ö h e )

133 : base ( f e n s t e r b r e i t e , f e n s t e r h ö h e )

134 {

135 g e s c h w i n d i g k e i t = 3 . 0 ;

136 f a r b e = Brushes . Green ;

137 radius = 5 . 0 ;

138 }

139

140 p u b l i c o v e r r i d e v o i d FrissWennMöglich ( L i s t < Z e l l e > z e l l e n )

141 {

142 i n t i = 0 ;

143 while ( i < z e l l e n )

144 {

145 i f ( t h i s ! = z e l l e n [ i ] )

146 {

147 i f ( z e l l e n [ i ] i s Bakterium && ! IstNahe ( z e l l e n [ i ] ) )

148 {

149 z e l l e n . RemoveAt ( i ) ;

150 continue ;

151 }

152 }

153 i ++;

154 }

155 }

156 }

157

158 c l a s s Bakterium : Z e l l e

159 {

160 p u b l i c Bakterium ( Point p )

161 : base ( Point p )

162 { }

163

164 p u b l i c Bakterium ( double f e n s t e r b r e i t e , double f e n s t e r h ö h e )

165 : base ( f e n s t e r b r e i t e , f e n s t e r h ö h e )

166 { }

167

168 p u b l i c L i s t < Z e l l e > Vermehre ( )

169 {

170 L i s t < Z e l l e > t o c h t e r z e l l e n = new L i s t < Z e l l e > ( ) ;

171 i f ( würfel . NextDouble ( ) < 0 . 0 0 1 )

172 {

173 t o c h t e r z e l l e n . Add ( new Bakterium ( o r t ) ) ;

174 }

175 return t o c h t e r z e l l e n ;

176 }

177 }

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,

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

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