# Taschenrechner Programmieren



## KlosiBre (4. September 2015)

Hallo Leute,

ich wollte einen Taschenrechner programmieren und stoße auf einige Schwierigkeiten, da ich noch nie mit VBA gearbeitet habe. Kenne teils die Befehle nur in C#.


```
Public Sub class()
Dim berechnen As String
Dim PI As Double
Dim zahl1 As String

Dim zahlen As String
zahlen = 1234567890

Dim charArrayZeichen() As String
ReDim charArrayZeichen(50)

Dim intArrayZahlen() As Integer
ReDim intArrayZahlen(50)
'Private intArrayZahlen As Integer() = New Integer(49) {}
End Sub

Private Sub cmdKlammer1_Click()
txtBoxAnzeige.Text = txtBoxAnzeige.Text + "("
End Sub
Private Sub cmdKlammer2_Click()
txtBoxAnzeige.Text = txtBoxAnzeige.Text + ")"
End Sub

Private Sub cmdKommata_Click()
txtBoxAnzeige.Text = txtBoxAnzeige.Text + ","
End Sub

Private Sub cmdZahl0_Click()
txtBoxAnzeige.Text = txtBoxAnzeige.Text + "0"
End Sub

Private Sub cmdZahl1_Click()
txtBoxAnzeige.Text = txtBoxAnzeige.Text + "1"
End Sub

Private Sub cmdZahl2_Click()
txtBoxAnzeige.Text = txtBoxAnzeige.Text + "2"
End Sub

Private Sub cmdZahl3_Click()
txtBoxAnzeige.Text = txtBoxAnzeige.Text + "3"
End Sub

Private Sub cmdZahl4_Click()
txtBoxAnzeige.Text = txtBoxAnzeige.Text + "4"
End Sub

Private Sub cmdZahl5_Click()
txtBoxAnzeige.Text = txtBoxAnzeige.Text + "5"
End Sub

Private Sub cmdZahl6_Click()
txtBoxAnzeige.Text = txtBoxAnzeige.Text + "6"
End Sub

Private Sub cmdZahl7_Click()
txtBoxAnzeige.Text = txtBoxAnzeige.Text + "7"
End Sub

Private Sub cmdZahl8_Click()
txtBoxAnzeige.Text = txtBoxAnzeige.Text + "8"
End Sub

Private Sub cmdZahl9_Click()
txtBoxAnzeige.Text = txtBoxAnzeige.Text + "9"
End Sub
Private Sub cmdAddition_Click()
zahl1 = txtBoxAnzeige.Text
txtBoxAnzeige.Text = ""
txtBoxAnzeige.Text = zahl1 + "+" + txtBoxAnzeige.Text
berechnen = "addition"
End Sub
Private Sub cmdDivision_Click()
zahl1 = txtBoxAnzeige.Text
txtBoxAnzeige.Text = ""
txtBoxAnzeige.Text = zahl1 + "/" + txtBoxAnzeige.Text
berechnen = "division"
End Sub

Private Sub cmdMultiplikation_Click()
zahl1 = txtBoxAnzeige.Text
txtBoxAnzeige.Text = ""
txtBoxAnzeige.Text = zahl1 + "*" + txtBoxAnzeige.Text
berechnen = "multiplikation"
End Sub

Private Sub cmdSubtraktion_Click()
zahl1 = txtBoxAnzeige.Text
txtBoxAnzeige.Text = ""
txtBoxAnzeige.Text = zahl1 + "-" + txtBoxAnzeige.Text
berechnen = "subtraktion"
End Sub
Private Sub cmdWurzel_Click()
zahl1 = txtBoxAnzeige.Text
berechnen = "wurzel"
End Sub
Private Sub cmdQuadrieren_Click()
zahl1 = txtBoxAnzeige.Text
txtBoxAnzeige.Text = ""
txtBoxAnzeige.Text = zahl1 + "^2" + txtBoxAnzeige.Text
berechnen = "quadrieren"
End Sub
Private Sub cmdPotenzieren_Click()
zahl1 = txtBoxAnzeige.Text
txtBoxAnzeige.Text = ""
berechnen = "potenzieren"
End Sub
Private Sub cmdTangens_Click()
zahl1 = txtBoxAnzeige.Text
berechnen = "tangens"
End Sub
Private Sub cmdCosinus_Click()
zahl1 = txtBoxAnzeige.Text
berechnen = "cosinus"
End Sub
Private Sub cmdSinus_Click()
zahl1 = txtBoxAnzeige.Text
berechnen = "sinus"
End Sub
Private Sub cmdPI_Click()
'Zeigt die Zahl PI
PI = 3.14159265358979
txtBoxAnzeige.Text = PI
zahl1 = txtBoxAnzeige.Text
berechnen = "pi"

End Sub

Private Sub cmdDelte_Click()
txtBoxAnzeige.Text = ""
zahl1 = 0
End Sub
Private Sub cmdErgebnis_Click()


  speichereTextInArray
  'Wandelt die Textbox in Zahlen und mathematische Operatoren um
  textBoxBerechnung.Text = textBoxBerechnung.Text + " = " + CStr(berechneErgebnis)
  'Gibt das Ergebnis zusätzlich aus
End Sub

'Select Case berechnen
'Case "addition"
'txtBoxAnzeige.Text = CDbl(zahl1) + CDbl(txtBoxAnzeige.Text)

'Case "subtraktion"
'txtBoxAnzeige.Text = CDbl(zahl1) - CDbl(txtBoxAnzeige.Text)

'Case "multiplikation"
'txtBoxAnzeige.Text = CDbl(zahl1) * CDbl(txtBoxAnzeige.Text)

'Case "division"
'txtBoxAnzeige.Text = CDbl(zahl1) / CDbl(txtBoxAnzeige.Text)

'Case "wurzel"
'txtBoxAnzeige.Text = Math.Sqr(zahl1)

'Case "quadrieren"
'txtBoxAnzeige.Text = CDbl(zahl1) ^ 2

'Case "potenzieren"
'txtBoxAnzeige.Text = CDbl(zahl1) ^ CDbl(txtBoxAnzeige.Text)

'Case "tangens"
'txtBoxAnzeige.Text = Math.Tan(zahl1)

'Case "cosinus"
'txtBoxAnzeige.Text = Math.Cos(zahl1)

'Case "sinus"
'txtBoxAnzeige.Text = Math.Sin(zahl1)

'Case "pi"
'txtBoxAnzeige.Text = CDbl(PI) * CDbl(zahl1)

'End Select


Public Function speichereTextInArray()
  Dim temporäreZahl As String
  temporäreZahl = ""
  Dim anzahlGespeicherterZahlen As Integer
  anzahlGespeicherterZahlen = 0
  'Laufvariable für das Zahlen-Array
  Dim anzahlGespeicherterZeichen As Integer
  anzahlGesepeicherterZeichen = 0

  Dim intArrayZahlen() As Integer
  ReDim intArrayZahlen(50)

  Dim charArrayZeichen() As String
  ReDim charArrayZeichen(50)


  'Laufvariable für das Zeichen-Array
  Dim i As Integer
  For i = 0 To Len(txtBoxAnzeige.Text)
  'Gehe Textbox durch
  If InStr(zahlen, txtBoxAnzeige.Text) Then
  'Wenn die Stelle eine Zahl ist
  'Füge es der aktuellen "temporären" Zahl hinzu
  temporäreZahl = temopräreZahl + txtBoxAnzeige.Text
  Else
  'Ansonsten
  intArrayZahlen(anzahlGespeicherterZahlen) = "temporäreZahl"
  '**Speichere temporäre Zahl im Array
  anzahlGespeicherterZahlen = anzahlGespeicherterZahlen + 1
  'Erhöhe die Laufvariable für die Zahlen, damit nächste Zahl an nächsten Index gepackt wird
  temporäreZahl = ""
  'Leere temporäre Zahl, damit im nachhinein die nächste Zahl darin gespeichert werden kann
  charArrayZeichen(anzahlGespeicherterZeichen) = textBoxBerechnung.Text(i)
  'Füge Zeichen dem Zeichen-Array hinzu
  'Erhöhe Laufvariable für die Zeichen, damit nächstes Zeichen an nächsten Index gesetzt wird
  anzahlGespeicherterZeichen = anzahlGespeicherterZeichen + 1
  End If
  Next i

  intArrayZahlen(anzahlGespeicherterZahlen) = CDbl(temporäreZahl)
  'Füge die letzte Zahl ins Zahlen-Array hinzu
  '**Relevant, da bei der letzten Zahl die else-Bedingung nicht erreicht wird
End Function

Private Function berechneErgebnis() As Integer
'Rückgabewert int!
  Dim ergebnis As Integer
  ergebnis = intArrayZahlen(0)
  'Ergebnis nimmt die erste Zahl aus dem Array an
  '*Beispiel: 50 + 3  =>  Ergebnis = 50
  Dim i As Interior
  For i = 0 To Len(charArrayZeichen)
  'Durchlaufe das ZEICHEN-Array
  Select Case charArrayZeichen(i)
  'Überprüfe das jeweilige Zeichen
  Case "+"
  'Wenn Zeichen plus ist
  ergebnis = ergebnis + intArrayZahlen(i + 1)
  'Ergebnis plus nächste Zahl aus dem Array

  '*Beispiel =>  Ergebnis = 50 + 3 = 53
  Case "-"
  ergebnis = ergebnis - intArrayZahlen(i + 1)

  Case "*"
  ergebnis = ergebnis * intArrayZahlen(i + 1)

  Case "/"
  ergebnis = InlineAssignHelper(ergebnis, intArrayZahlen(i + 1))

  End Select
  Next i
  '*Gebe 53 zurück
End Function
```


Vermutlich etwas unübersichtlich, aber ich poste einfach mal alles.
Fehler bei denen ich nicht weiter komme sind in der Klasse (Function) speicherTextinArray als auch in berechneErgebnis.

Ist noch in der Ausprobierphase, daher auch mal was auskommentiert oder eventuell etwas überflüssiges dabei.
Hoffe jemand hat Ratschläge.

Grüße


----------



## Yaslaw (4. September 2015)

Als erstes lohnt es sich, den Code in Code-Tags zu setzen. Dann wird das ganze leserlich.

Und sag doch etwas über die Fehler aus. Was für Fehler? Gibts eine Fehlermeldung? Fehlerverhalten?

berechnenErgebnis hat Kompilierfehler
- intArrayZahlen ist nicht deklariert
- i ist als Interior und nicht als Integer oder Long.
- InlineAssignHelper ist unbekannt


----------



## SpiceLab (4. September 2015)

Yaslaw hat gesagt.:


> Als erstes lohnt es sich, den Code in Code-Tags zu setzen. Dann wird das ganze leserlich.


Siehe https://www.tutorials.de/help/bb-codes#codetag


----------

