• Keine Ergebnisse gefunden

Informatik 2 für Regenerative Energien Klausur vom 27. Juli 2017

N/A
N/A
Protected

Academic year: 2021

Aktie "Informatik 2 für Regenerative Energien Klausur vom 27. Juli 2017"

Copied!
6
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Jörn Loviscach

Versionsstand: 26. Juli 2017, 19:33

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. Jeder Anschluss soll höchstens einmal verbunden werden können. Stellen Sie das mit einer Exception sicher. Was ändern Sie dazu wie an dem (korrigierten) Code aus dem Programmlisting?

4. Leiten Sie von der Klasse

Batterie

des korrigierten Code aus dem Pro- grammlisting eine Klasse

Blockbatterie

ab und schreiben Sie einen Konstruktor dafür, der die Spannung fest auf 9 Volt setzt.

5. Schreiben Sie für die Klasse

Anschluss

des korrigierten Code aus dem Programmlisting eine Methode

Löse

, die entgegengesetzt zur Methode

Verbinde

wirkt. Sind Änderungen an weiteren Stellen im Code nötig?

Wenn ja, welche? Hinweis: Die Methode

Remove(x)

einer Liste entfernt daraus das erste Vorkommen des Elements

x

.

1

(2)

6. Schreiben Sie für die Klasse

Bauelement

aus dem korrigier- ten Code aus dem Programmlisting eine öffentliche Methode

PrüfeObVerbunden(Bauelement b)

, deren Rückgabewert angibt, ob das aktuelle Bauelement direkt mit dem Bauelement

b

verbunden ist.

7. Zeichnen Sie das UML-Klassendiagramm zu diesen drei Klassen. Kennzei- chen Sie dabei Kursivschrift durch eine andere Farbe o. ä.

abstract class A {

public int b;

abstract public double c(int x);

}

abstract class B : A {

public long d;

int e(int x) {

return 2 * x;

} }

class C : B {

public override double c(int x) {

return 3.14 * x;

} }

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

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

v.Add(1);

v.Add(2);

v.Add(3);

s.Push(v);

s.Push(v);

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

s.Push(u);

u.Add(4);

List<int> w = u;

w.Add(5);

int x = s.Pop().Count;

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

int z = s.Pop()[1];

(3)

Dieses Listing enthält 15 Fehler!

Dies ist der Anfang eines Programms, das elektronische Schaltungen modelliert.

Bauelemente haben Anschlüsse. Anschlüsse werden mittels Verbindungen verbun- den; die Information darüber ist dann sowohl im Anschluss und in der Verbindung vorhanden. Die Methode

Teste

der Klasse

Test

macht die Benutzung der Klas- sen 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 B a t t e r i e b = new B a t t e r i e ( 9 . 0 ) ;

6 T r a n s i s t o r t = new T r a n s i s t o r ( f a l s e ) ;

7 Widerstand w1 = new Widerstand ( 1 0 0 0 0 . 0 ) ;

8 Widerstand w2 = new Widerstand ( 1 0 0 0 . 0 ) ;

9 Widerstand w3 = new Widerstand ( 4 7 0 . 0 ) ;

10 Widerstand w4 = w1 ;

11 Verbindung vPlus = new Verbindung ( ) ;

12 Verbindung vMasse = new Verbindung ( ) ;

13 Verbindung vBasis = new Verbindung ( ) ;

14 Verbindung v K o l l e k t o r = new Verbindung ( ) ;

15 b . GibAnschluss ( " P l u s p o l " ) . Verbinde ( vPlus ) ;

16 b . GibAnschluss ( " Minuspol " ) . Verbinde ( vMasse ) ;

17 w1 . GibAnschluss ( "A" ) . Verbinde ( vPlus ) ;

18 w1 . GibAnschluss ( "B" ) . Verbinde ( vBasis ) ;

19 w2 . GibAnschluss ( "A" ) . Verbinde ( vBasis ) ;

20 w2 . GibAnschluss ( "B" ) . Verbinde ( vMasse ) ;

21 t . GibAnschluss ( " Basis " ) . Verbinde ( vBasis ) ;

22 t . GibAnschluss ( " Emitter " ) . Verbinde ( vMasse ) ;

23 t . GibAnschluss ( " K o l l e k t o r " ) . Verbinde ( v K o l l e k t o r ) ;

24 w3 . GibAnschluss ( "A" ) . Verbinde ( vPlus ) ;

25 w3 . GibAnschluss ( "B" ) . Verbinde ( v K o l l e k t o r ) ;

26

27 b o o l x = t . PrüfeObAlleAnschlüsseVerbunden ( ) ;

28 b o o l y = w4 . PrüfeObAlleAnschlüsseVerbunden ( ) ;

29 s t r i n g z = t . FindeVerbundeneBauelemente ( ) [ 1 ] . Name;

30 }

31 }

32

33 c l a s s Anschluss

34 {

35 s t r i n g name ;

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

37

38 Bauelement bauelement ;

39 p u b l i c Bauelement Element { ge t { return bauelement ; } }

40

41 Verbindung verbundenMit ;

42

43 p u b l i c Anschluss ( s t r i n g name , Bauelement bauelement )

44 {

(4)

45 t h i s . name = name ;

46 t h i s . bauelement = bauelement ;

47 }

48

49 p u b l i c v o i d Verbinde ( v )

50 {

51 verbundenMit = v ;

52 v . FügeHinzu ( t h i s ) ;

53 }

54

55 p u b l i c b o o l PrüfeObVerbunden ( )

56 {

57 return verbundenMit ! = n u l l ;

58 }

59

60 o v e r r i d e p u b l i c L i s t <Anschluss > FindeVerbundeneAnschlüsse ( )

61 {

62 L i s t <Anschluss > e r g e b n i s = new L i s t <Anschluss > ;

63 i f ( verbundenMit ! = n u l l )

64 {

65 L i s t <Anschluss > a l l e = verbundenMit . GibVerbundeneAnschlüsse ( ) ;

66 f o r ( i n t i = 0 ; i < Count ; i ++)

67 {

68 i f ( a l l e [ i ] ! = t h i s )

69 {

70 e r g e b n i s . Add ( a l l e ) ;

71 }

72 }

73 }

74 return ;

75 }

76 }

77

78 c l a s s Verbindung

79 {

80 L i s t <Anschluss > verbundeneAnschlüsse = new L i s t <Anschluss > ( ) ;

81

82 p u b l i c v o i d FügeHinzu ( Anschluss a )

83 {

84 verbundeneAnschlüsse . Add ( a ) ;

85 }

86

87 p u b l i c L i s t <Anschluss > GibVerbundeneAnschlüsse ( )

88 {

89 // Die nächste Z e i l e i s t k o r r e k t . Sie l i e f e r t e i n e Kopie der L i s t e .

90 return new L i s t <Anschluss >( verbundeneAnschlüsse ) ;

91 }

92 }

93

94 a b s t r a c t c l a s s Bauelement

95 {

(5)

96 Anschluss [ ] anschlüsse ;

97

98 s t r i n g name ;

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

100

101 p u b l i c Bauelement ( s t r i n g name )

102 {

103 t h i s . name = name ;

104 }

105

106 p u b l i c GibAnschluss ( s t r i n g name )

107 {

108 f o r ( i n t i = 0 ; i < anschlüsse . Length ; i ++)

109 {

110 i f ( anschlüsse [ i ] . Name ! = name )

111 {

112 return anschlüsse [ i ] ;

113 }

114 }

115 return ;

116 }

117

118 a b s t r a c t p u b l i c b o o l PrüfeObAlleAnschlüsseVerbunden ( )

119 {

120 f o r ( i n t i = 0 ; i < anschlüsse . Length ; i ++)

121 {

122 i f ( ! anschlüsse [ i ] . PrüfeObVerbunden ( ) )

123 {

124 return f a l s e ;

125 }

126 }

127 return true ;

128 }

129

130 p u b l i c L i s t <Bauelement> FindeVerbundeneBauelemente ( )

131 {

132 b = new L i s t <Bauelement > ( ) ;

133 f o r ( i n t i = 0 ; i < anschlüsse . Length ; i ++)

134 {

135 L i s t <Anschluss > a = anschlüsse [ i ] . FindeVerbundeneAnschlüsse ( ) ;

136 f o r ( i n t j = 0 ; j < a . Count ; j ++)

137 {

138 Bauelement be = a [ j ] . Element ( ) ;

139 i f ( ! b . Contains ( be ) )

140 {

141 b . Add ( be ) ;

142 }

143 }

144 }

145 return b ;

146 }

(6)

147 }

148

149 c l a s s Widerstand : Bauelement

150 {

151 double wertInOhm ;

152

153 p u b l i c Widerstand ( double wertInOhm )

154 : base ( "R " + wertInOhm + " ? " )

155 {

156 t h i s . wertInOhm = wertInOhm ;

157 anschlüsse = new Anschluss [ ] { new Anschluss ( "A" , t h i s ) ,

158 new Anschluss ( "B" , t h i s ) } ;

159 }

160 }

161

162 c l a s s T r a n s i s t o r : Bauelement

163 {

164 b o o l istPNP ;

165

166 p u b l i c T r a n s i s t o r ( double istPNP )

167 : base ( istPNP ? "BC 177A" , "BC 107A" )

168 {

169 t h i s . istPNP = istPNP ;

170 anschlüsse = new Anschluss [ ] { new Anschluss ( " Emitter " , t h i s ) ,

171 new Anschluss ( " Basis " , t h i s ) ,

172 new Anschluss ( " K o l l e k t o r " , t h i s ) } ;

173 }

174 }

175

176 c l a s s B a t t e r i e : Bauelement

177 {

178 double spannung ;

179

180 p u b l i c B a t t e r i e ( double spannung )

181 : base ( " B a t t e r i e mit " + spannung + " V o l t " )

182 {

183 t h i s . spannung = spannung ;

184 anschlüsse = new Anschluss [ ] { new Anschluss ( " P l u s p o l " , t h i s ) ,

185 new Anschluss ( " Minuspol " , t h i s ) } ;

186 }

187 }

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