Möchte eigne Funktion erstellen

xJoSx

Newbie
Registriert
Nov. 2012
Beiträge
4
Hey Leute, hab mal vor einigen Tagen einen Taschenrechner Programmiert. Funktioniert auch alles nur mein Problem ist es, dass ich die Codes beim Gleichheits Zeichen verkürtzen will durch eine eigene selbsterstellte Function. Würde mich über Tipps und Hilfe freuen.

Hier der Code fürs Gleichheitszeichen und die Variabeln:

Dim FirstNumber As Double
Dim SecondNumber As Double
Dim AnswerNumber As Double
Dim ArithmeticProcess As String
Dim Zahl As Double
Dim Op As String

Private Sub cmdgleich_Click()
SecondNumber = Val(Replace(txtDisplay.Text, ",", "."))
If Op = "+" Then
AnswerNumber = FirstNumber + SecondNumber
End If
If Op = "-" Then
AnswerNumber = FirstNumber - SecondNumber
End If
If Op = "X" Then
AnswerNumber = FirstNumber * SecondNumber
End If
If Op = "/" Then
If SecondNumber = "0" Then
MsgBox "Man kann nicht mit Null teilen", 16, "Achtung"
Exit Sub
End If
AnswerNumber = FirstNumber / SecondNumber
End If
txtDisplay.Text = AnswerNumber
End Sub
 
Eh... was möchtest du erreichen? Wird (für mich) nicht klar aus deinem Text.

Zum Code aber grundlegend folgendes:

Da "Op" sowieso nur genau einen Wert haben kann, solltest du mit ElseIf oder Case arbeiten statt einzelnen Ifs, die momentan alle einzeln überprüft werden.
 
Bei deinem gewählten Ansatz kann man diese Funktion nicht weiter kürzen.


Man kann allerdings alternativ einen anderen Ansatz verwenden, nämlich einen Parser zu schaffen, der eine Rechnung nach unären und binären Operationen absucht und diese dann ausführt.
Bsp:
(a-b)*c wird zu
1. Rechne: a, b Operation: Subtraktion Ergebnis: _E1
2. Rechne: _E1, c Operation: Multiplikation Ergebnis: _E2
3. Stelle _E mit der höchsten Nummer dar.

Warum sollte man so was programmieren? Weil der Taschenrechner dann auch mit komplizierten Rechnungen klarkommt.
Die so aufgelöste Rechnung kann man in einem Baum darstellen, wobei Operationen Knoten mit einem oder zwei Ästen und Operanden Blätter sind.
200px-Term42.svg.png

(Quelle)
 
Code:
Option Explicit
Private Function Gleich(FirstNumber As Double, SecondNumber As Double, Op As String) As Double
    
'hier ein Switch case... (deine Formel eben)

End Function


Private Sub cmdgleich_Click()
'blabla Variablendefinition

txtDisplay.Text = Gleich(FirstNumber, SecondNumber, Op)


End Sub

Je nach dem, was du sonst so konstruiert hast, oder welche Genauigkeit du willst, musst du eben ein wenig typecasting betreiben bzw. die Variablentypen anpassen.

*edit:
Auch wenn, gemessen an der Qualität/Logik des Codes, der Post 4 vielleicht oversized für dich ist, v.a. wenn es zur Übung sein soll, solltest du auf JEDEN FALL den Post 2 beachten, insofern du switch case kennst.
*edit2: Oops. Der Post 3 ist genau, was du brauchst, um das aus 2 umzusetzen. Darum nochmals edit.
 
Zuletzt bearbeitet:
Zurück
Oben