1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
Public MustInherit Class Term
''' <summary>
''' liefert den Wert des aktuellen Terms
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public MustOverride Function Value() As Integer
''' <summary>
''' die linke Seite der Operation
''' </summary>
''' <remarks></remarks>
Protected left As Term
''' <summary>
''' die rechte Seite der Operation
''' </summary>
''' <remarks></remarks>
Protected right As Term
''' <summary>
''' der Konsturktor wird von den anderen Klassen aufgerufen
''' </summary>
''' <param name="left">die linke Seite der Operation</param>
''' <param name="right">die rechte Seite - jener welcher eben</param>
''' <remarks></remarks>
Protected Sub New(ByVal left As String, ByVal right As String)
If left Is Nothing Or right Is Nothing Then Return
Me.left = Term.Split(left)
Me.right = Term.Split(right)
End Sub
''' <summary>
''' zerlegt den übergebenen Term in die entsprechenden kleineren Terme
''' </summary>
''' <param name="t">dieser Term soll zerlegt werden</param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function Split(ByVal t As String) As Term
t = t.Replace(" ", "") ' Leerzeichen sind doof
' Term splitten - Punktrechnung vor Strichrechnung
Dim index As Integer = -1
' -- Addition
index = t.IndexOf("+")
If index > 0 Then Return New Addition(t.Substring(0, index), t.Substring(index + 1))
' -- Subtraktion
index = t.IndexOf("-")
If index > 0 Then Return New Subtraction(t.Substring(0, index), t.Substring(index + 1))
' -- Multiplikation
index = t.IndexOf("*")
If index > 0 Then Return New Multiplication(t.Substring(0, index), t.Substring(index + 1))
' -- Division
index = t.IndexOf("/")
If index > 0 Then Return New Division(t.Substring(0, index), t.Substring(index + 1))
Return New Variable(t)
End Function
End Class
Public Class Addition
Inherits Term
Public Sub New(ByVal left As String, ByVal right As String)
MyBase.New(left, right)
End Sub
Public Overrides Function Value() As Integer
Return left.Value + right.Value
End Function
Public Overrides Function ToString() As String
Return "[" & left.ToString & "+" & right.ToString & "]"
End Function
End Class
Public Class Subtraction
Inherits Term
Public Sub New(ByVal left As String, ByVal right As String)
MyBase.New(left, right)
End Sub
Public Overrides Function Value() As Integer
Return left.Value - right.Value
End Function
Public Overrides Function ToString() As String
Return "[" & left.ToString & "-" & right.ToString & "]"
End Function
End Class
Public Class Multiplication
Inherits Term
Public Sub New(ByVal left As String, ByVal right As String)
MyBase.New(left, right)
End Sub
Public Overrides Function Value() As Integer
Return left.Value * right.Value
End Function
Public Overrides Function ToString() As String
Return "[" & left.ToString & "*" & right.ToString & "]"
End Function
End Class
Public Class Division
Inherits Term
Public Sub New(ByVal left As String, ByVal right As String)
MyBase.New(left, right)
End Sub
Public Overrides Function Value() As Integer
Return left.Value / right.Value
End Function
Public Overrides Function ToString() As String
Return "[" & left.ToString & "/" & right.ToString & "]"
End Function
End Class
Public Class Variable
Inherits Term
Private content As Integer
Public Sub New(ByVal t As String)
MyBase.New(Nothing, Nothing)
If Not Integer.TryParse(t, content) Then Throw New ApplicationException("Term '" & t & "' ist keine Zahl")
End Sub
Public Overrides Function Value() As Integer
Return content
End Function
Public Overrides Function ToString() As String
Return "[" & content & "]"
End Function
End Class
|