• Keine Ergebnisse gefunden

Informatik 2 für Regenerative Energien Klausur vom 5. Juli 2013

N/A
N/A
Protected

Academic year: 2021

Aktie "Informatik 2 für Regenerative Energien Klausur vom 5. Juli 2013"

Copied!
5
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Jörn Loviscach

Versionsstand: 13. Juli 2013, 18:12

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 r , z und c in den Zeilen 16 bis 18?

3. Am Anfang des Konstruktors von EMail soll eine Abfrage einge- fügt werden, ob absender und empfänger ein @ -Zeichen enthalten.

Falls nein, soll eine Exception geworfen werden. Hinweis: Die Methode int IndexOf(char c) der Klasse string liefert die Position des ersten Vorkommens von c oder, falls es nicht vorkommt, −1.

1

(2)

4. Angenommen, man hätte in Test.Teste() noch eine Sammlung von EMail s:

List<EMail> posteingang = ... // stammt irgendwo her Nun soll bestimmt werden, wie viele Mails im posteingang ungelesen sind (angehängte Mails nicht mitgezählt). Formulieren Sie den nötigen Code aus, einschließlich der nötigen Änderungen an den (korrigierten) Klassen im

Anhang der Klausur

c1

.

c1

text added by jl

5. Schreiben Sie eine Klasse Visitenkarte folgender Art: Sie erbt von Datenelement . Sie besitzt einen parameterlosen Konstruktor, der als Titel immer "Visitenkarte" benutzt. Sie liefert als Beschreibung

"Visitenkarte" zurück. Sie liefert als Größe

c2

42 zurück.

c

2jl: Länge

6. Schreiben Sie C#-Klassen, die diesem UML-Diagramm entsprechen:

7. Eine Textdatei hat einen Aufbau wie den folgenden, mit beliebig vielen Zeilen:

42;13;"abc"

123;456;"defgh"

234;567;"ijklmn"

Schreiben Sie Stück C#-Code, das diese Datei namens "test.txt"

einliest und die Summe der Zahlen in der Mitte der Zeilen be- rechnet, hier also 13 + 456 + 567. Hinweis: Benutzen Sie zum Bei- spiel string[] System.IO.File.ReadAllLines(string path) , die statische Methode Parse von int und die Methode Split(';') von string . Letztere liefert die Teile der Zeichenkette, von einem Semikolon getrennt sind, als Array von Zeichenketten.

8. Welche Zahlen stehen nach Ausführung dieses C#-Programmfragments in den Variablen c , d und e ? Geben Sie möglichst auch Zwischenschritte an, damit Ihr Gedankengang nachvollziehbar ist.

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

a.Add(1);

a.Add(2);

a.Add(3);

Stack<List<int>> b = new Stack<List<int>>();

b.Push(a);

b.Push(a);

b.Push(new List<int>());

int c = a[2];

int d = b.Pop().Count;

int e = b.Pop()[2];

(3)

Dieses Listing enthält 15 Fehler!

Dies soll ein Programm werden, das E-Mails und deren Anhänge (Attach- ments) verwaltet. Solche Anhänge können auch weitergeleitete E-Mails sein.

Die Methode Teste macht die Handhabung der Klassen vor.

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

EMail e = new EMail ( " Re : Anfrage " , " ab@cd . com " ,

6

" ef@gh . de " , " Tach ! " ) ;

7

byte [ ] d1 = new byte [ 1 0 0 0 0 0 ] ; // müsste man aus B i l d d a t e i e i n l e s e n

8

e . FügeAnhangHinzu ( new B i l d d a t e i ( " B e s t e l l u n g " ,

9

B i l d d a t e i . B i l d t y p . JPG, d1 ) ) ;

10

e . FügeAnhangHinzu ( new EMail ( " Anfrage " , " ef@gh . de " ,

11

" ab@cd . com " , " Hi ! " ) ) ;

12

EMail f = ( EMail ) e . GibAnhang ( 1 ) ;

13

byte [ ] d2 = new byte [ 1 0 0 0 0 0 ] ; // müsste man aus B i l d d a t e i e i n l e s e n

14

f . FügeAnhangHinzu ( new B i l d d a t e i ( " Angebot " ,

15

B i l d d a t e i . B i l d t y p . JPG, d2 ) ) ;

16

b o o l r = e . EntferneAnhang ( " Test " ) ;

17

i n t z = e . ZahlDerAnhänge ( ) ;

18

i n t c = e . HoleGrößeInZeichen ( ) ;

19

}

20

}

21

22

a b s t r a c t c l a s s Datenelement

23

{

24

s t r i n g t i t e l ;

25

p u b l i c s t r i n g T i t e l

26

{

27

g et { return t i t e l ; }

28

}

29

30

p u b l i c Datenelement ( s t r i n g t i t e l )

31

{

32

t h i s . t i t e l = t i t e l ;

33

}

34

35

p u b l i c s t a t i c s t r i n g HoleBeschreibung ( ) ;

36

37

p u b l i c v i r t u a l i n t HoleGrößeInZeichen ( ) ;

38

}

39

40

c l a s s EMail : Datenelement

41

{

42

s t r i n g absender ;

43

s t r i n g empfänger ;

44

DateTime e r s t e l l u n g s Z e i t p u n k t ;

45

s t r i n g t e x t ;

46

b o o l g e l e s e n ;

(4)

47

L i s t <Datenelement> anhänge = new Datenelement ( ) ;

48

49

p u b l i c EMail ( s t r i n g t i t e l , s t r i n g absender ,

50

s t r i n g empfänger , s t r i n g t e x t )

51

: base ( t i t e l )

52

{

53

t h i s . absender = absender ;

54

t h i s . empfänger = empfänger ;

55

t h i s . t e x t = t e x t ;

56

e r s t e l l u n g s Z e i t p u n k t = DateTime .Now;

57

}

58

59

p u b l i c s t r i n g HoleBeschreibung ( )

60

{

61

s t r i n g r e s u l t a t = T i t e l + " mit " + anhänge . Count + " Anhängen : " ;

62

b o o l i s t D e r E r s t e = true ;

63

f o r e a c h ( var item in anhänge )

64

{

65

i f ( ! i s t D e r E r s t e ) ;

66

{

67

r e s u l t a t = r e s u l t a t + " , " ;

68

}

69

i s t D e r E r s t e = f a l s e ;

70

r e s u l t a t = r e s u l t a t + item . HoleBeschreibung ;

71

}

72

return r e s u l t a t ;

73

}

74

75

p u b l i c o v e r r i d e HoleGrößeInZeichen ( )

76

{

77

r e s u l t a t = t e x t . Length ;

78

f o r e a c h ( var item in anhänge )

79

{

80

r e s u l t a t += item . HoleGrößeInZeichen ( r e s u l t a t ) ;

81

}

82

return r e s u l t a t ;

83

}

84

85

p u b l i c v o i d FügeAnhangHinzu ( Datenelement anhang )

86

{

87

Add ( anhang ) ;

88

}

89

90

p u b l i c Datenelement GibAnhang ( i n t i )

91

{

92

anhänge [ i ] ;

93

}

94

95

p u b l i c b o o l EntferneAnhang ( s t r i n g t i t e l )

96

{

97

Datenelement a = anhänge . Find ( x => x . T i t e l == t i t e l ) ;

(5)

98

i f ( a ! = n u l l )

99

{

100

anhänge . Remove ( a ) ;

101

return true ;

102

}

103

e l s e

104

{

105

return f a l s e ;

106

}

107

}

108

109

p u b l i c i n t ZahlDerAnhänge

110

{

111

g et { return anhänge . Count ; }

112

}

113

114

p u b l i c s t r i n g Text

115

{

116

g et

117

{

118

g e l e s e n = true ;

119

return t e x t ;

120

}

121

}

122

}

123

124

c l a s s B i l d d a t e i

125

{

126

p u b l i c enum B i l d t y p { JPG, PNG, GIF }

127

B i l d t y p typ ;

128

byte [ ] daten ;

129

130

p u b l i c B i l d d a t e i ( s t r i n g t i t e l , B i l d d a t e i . B i l d t y p typ , byte [ ] daten )

131

: base ( daten )

132

{

133

t h i s . typ = typ ;

134

t h i s . daten = daten ;

135

}

136

137

p u b l i c o v e r r i d e s t r i n g HoleBeschreibung ( )

138

{

139

// Die f o l g e n d e Z e i l e i s t k o r r e k t : "JPG" usw . a l s s t r i n g .

140

return T i t e l + " ( " +System .Enum. GetName ( t y p e o f ( B i l d t y p ) , typ )+ " ) " ;

141

}

142

143

p u b l i c o v e r r i d e i n t HoleGrößeInZeichen ( )

144

{

145

return daten ;

146

}

147

}

Referenzen

ÄHNLICHE DOKUMENTE

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

maximal vier einseitig oder zwei beidseitig beschriftete DIN-A4-Spickzettel belie- bigen Inhalts, möglichst selbst verfasst oder zusammengestellt; kein Skript, keine anderen Texte,

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

maximal vier einseitig oder zwei beidseitig beschriftete DIN-A4-Spickzettel belie- bigen Inhalts, möglichst selbst verfasst oder zusammengestellt; kein Skript, keine anderen Texte,

Für hinreichend große n ruft sich die Funktion n − 1-mal selbst auf, ohne

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