Taschenrechner

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von ChaosBernd.

    Taschenrechner

    Hallo zusammen,

    da ich für meinen Beruf in naher Zukunft die Grundlagen in VBA beherrschen muss, habe ich mich selber einmal ein wenig in das Thema eingearbeitet und mich an einem Taschenrechner probiert. Das Programm soll, vom Eingabeverhalten, so laufen wie ein normaler Taschenrechner, z.B.:

    Zahl wird eingetippt
    Plus wird gedrückt (Oder anderer Operator)
    Zahl wird eingetippt
    => Hier sollen jetzt zwei Varianten greifen: Bei Plus soll das Ergebnis von den beiden zahlen ausgegeben werden, genauso aber auch wenn man die Taste Gleich betätigt.
    => natürlich soll die Möglichkeit bestehen auch einfach weiter zu rechnen. (1+1+1+1+1....) Dabei soll bei Plus immer das aktuelle Ergebnis ausgegeben werden, wie bei einem Standard Taschenrechner.

    Problem ist dass er die falschen Ergebnisse ausliest, z.B.: 1+1+1 = 5

    Hier die Datei zum downloaden -> rapidshare.com/files/423782281/TaschenrechnerTest.xls

    Hier meine ersten Versuche, leider hapert es noch ein wenig. In meinem Beispiel soll erstmal nur Plus berücksichtigt werden, deswegen habe ich den Code der anderen Operatoren erstmal weggelassen:

    UserForm Code:

    VB.NET-Quellcode

    1. Option Explicit
    2. Public Zahl1 As Double, Ergebnis As Double, Ausgabe As Double
    3. Public Anzahl As Integer
    4. Public Rechenart As String
    5. Public test As Double
    6. 'Nummernfeld
    7. Private Sub cmd0_Click()
    8. Ergebnis = Ergebnis + 0
    9. txtErgebnis = txtErgebnis + "0"
    10. End Sub
    11. Private Sub cmd1_Click()
    12. Ergebnis = Ergebnis + 1
    13. txtErgebnis.Text = 1
    14. End Sub
    15. Private Sub cmd2_Click()
    16. Ergebnis = Ergebnis + 2
    17. txtErgebnis = txtErgebnis + "2"
    18. End Sub
    19. Private Sub cmd3_Click()
    20. Ergebnis = Ergebnis + 3
    21. txtErgebnis = txtErgebnis + "3"
    22. End Sub
    23. Private Sub cmd4_Click()
    24. Ergebnis = Ergebnis + 4
    25. txtErgebnis = txtErgebnis + "4"
    26. End Sub
    27. Private Sub cmd5_Click()
    28. Ergebnis = Ergebnis + 5
    29. txtErgebnis = txtErgebnis + "5"
    30. End Sub
    31. Private Sub cmd6_Click()
    32. Ergebnis = Ergebnis + 6
    33. txtErgebnis = txtErgebnis + "6"
    34. End Sub
    35. Private Sub cmd7_Click()
    36. Ergebnis = Ergebnis + 7
    37. txtErgebnis = txtErgebnis + "7"
    38. End Sub
    39. Private Sub cmd8_Click()
    40. Ergebnis = Ergebnis + 8
    41. txtErgebnis = txtErgebnis + "8"
    42. End Sub
    43. Private Sub cmd9_Click()
    44. Ergebnis = Ergebnis + 9
    45. txtErgebnis = txtErgebnis + "9"
    46. End Sub
    47. Private Sub cmdKomma_Click()
    48. txtErgebnis = txtErgebnis + ","
    49. End Sub
    50. 'Zuweisung der Rechenarten
    51. Private Sub cmdPlus_click()
    52. txtErgebnis.Text = ""
    53. Anzahl = Anzahl + 1
    54. Zahl1 = CDbl(Ergebnis)
    55. Rechenart = "addieren"
    56. If Anzahl > 1 Then
    57. txtErgebnis.Text = Ergebnis
    58. End If
    59. Ausrechnen Zahl1, Rechenart
    60. End Sub
    61. 'Rechenarten
    62. Private Sub Ausrechnen(Zahl As Double, Rechenart As String)
    63. Select Case Rechenart
    64. Case "addieren"
    65. Ergebnis = Ergebnis + Zahl
    66. Case "subtrahieren"
    67. Ausgabe = Zahl - Ergebnis
    68. Case "multiplizieren"
    69. Ausgabe = Zahl * Ergebnis
    70. Case "dividieren"
    71. Ausgabe = Zahl / Ergebnis
    72. Case "potenzieren"
    73. Ausgabe = Zahl ^ Ergebnis
    74. Case "wurzelziehen"
    75. Ausgabe = Zahl ^ (1 / Ergebnis)
    76. End Select
    77. test = Ergebnis
    78. End Sub
    79. 'Löschen
    80. Private Sub cmdClear_click()
    81. txtErgebnis.Text = ""
    82. Ausgabe = 0
    83. Ergebnis = 0
    84. Anzahl = 0
    85. Zahl1 = 0
    86. End Sub
    87. 'Rechnung
    88. Private Sub cmdGleich_click()
    89. txtErgebnis.Value = test
    90. Anzahl = 0
    91. End Sub
    92. Private Sub cmdEnde_Click()
    93. Unload Me
    94. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kayrodesign“ ()

    Wie kann ich Dir helfen, ohne "Rapids" kaufen zu müssen? X(
    Die Hilfe vom Forum erwartest Du ja auch kostenlos.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hö? Also wenn ich auf den Downloadlink klicke und dann "Langsamen Datentransfer" auswähle, dann kann ich die Datei problemlos runterladen. :huh:

    Habe mittlerweile aber einen komplett neuen Code aufgesetzt, sobald ich dort auch wieder das Problem stoßen sollte, melde ich mich.

    RodFromGermany schrieb:

    Wie kann ich Dir helfen, ohne "Rapids" kaufen zu müssen? X(
    Die Hilfe vom Forum erwartest Du ja auch kostenlos.

    Mein Post bezüglich des Auswählens von dem "langsamen Datentransfer" galt RodFromGermany. Auf Rapidshare, da wo meine Taschenrechner.xls hinterlegt ist, muss man auf "langsamer Datentransfer" klicken damit man die Datei runterladen kann!

    Mein "neuer Code" ist fast fertig, sofern das heute noch was wird poste ich ihn.
    Ich weiss nicht, ob man in VBA mit dem MS Script Object arbeiten kann. Wenn ja, würde dir dieses Control eine Funktion zur Verfügung stellen, um einen String direkt als Rechnung zu interpretieren.

    Btw. Wieso lädst du die Datei bei RapidShare hoch (No-Go)? Es gibt doch hier eine Dateianhangsfunktion...


    Gruss
    Pascal
    So, hier mein neuer Code. Allerdings gibt es auch hier wieder Problemchen, und zwar:

    - Das Gleichheitszeichen ist noch nicht implementiert -> Die Ergebnisse werden nur nach dem zweiten Betätigen des jeweiligen Operatorenbuttons ausgegeben. (Allerdings möchte ich das Ganze nicht mit einer komplett neuen Berechung lösen.)

    - Wenn ich beispielsweise den Plusbutton, nach der Eingabe der ersten Zahl und ohne eine zweite Zahl einzugeben, betätige, dann verändert sich das Ergebnis trotzdem mit jedem Klick.

    Die .xls Datei ist unten angehangen.

    VB.NET-Quellcode

    1. Option Explicit
    2. Public Zahl As Double
    3. Public Anzahl As Integer
    4. Public Merker As String
    5. Public Zahl1 As Double
    6. Public Zahl2 As Double
    7. Public Ergebnis As Double
    8. 'Nummernfeld
    9. Private Sub cmd0_Click()
    10. Zahl = 0
    11. txtErgebnis.Text = 0
    12. End Sub
    13. Private Sub cmd1_Click()
    14. Zahl = 1
    15. txtErgebnis.Text = 1
    16. End Sub
    17. Private Sub cmd2_Click()
    18. Zahl = 2
    19. txtErgebnis.Text = 2
    20. End Sub
    21. Private Sub cmd3_Click()
    22. Zahl = 3
    23. txtErgebnis.Text = 3
    24. End Sub
    25. Private Sub cmd4_Click()
    26. Zahl = 4
    27. txtErgebnis.Text = 4
    28. End Sub
    29. Private Sub cmd5_Click()
    30. Zahl = 5
    31. txtErgebnis.Text = 5
    32. End Sub
    33. Private Sub cmd6_Click()
    34. Zahl = 6
    35. txtErgebnis.Text = 6
    36. End Sub
    37. Private Sub cmd7_Click()
    38. Zahl = 7
    39. txtErgebnis.Text = 7
    40. End Sub
    41. Private Sub cmd8_Click()
    42. Zahl = 8
    43. txtErgebnis.Text = 8
    44. End Sub
    45. Private Sub cmd9_Click()
    46. Zahl = 9
    47. txtErgebnis.Text = 9
    48. End Sub
    49. Private Sub cmdKomma_Click()
    50. Zahl = ","
    51. txtErgebnis.Text = ","
    52. End Sub
    53. 'Zuweisung der Rechenarten
    54. Private Sub cmdPlus_click()
    55. 'Anzahl wird mit jedem Klick auf die 1 um einen erhöht!
    56. Anzahl = Anzahl + 1
    57. 'Rechenart addieren wird in die Varibale Merker geschrieben!
    58. Merker = "addieren"
    59. ' 1.Wenn Anzahl = 1 dann schiebe Zahl in Zahl1
    60. ' 2.Wenn Anzahl = 2 dann schiebe Zahl in Zahl2, übergebe Zahl1/Zahl2 an Ausrechnen
    61. ' 3.Wenn Anzahl > 3 dann schiebe Zahl und Ergebnis (aus Punkt 2) in Ausrechnen
    62. If Anzahl = 1 Then
    63. Zahl1 = Zahl
    64. ElseIf Anzahl = 2 Then
    65. Zahl2 = Zahl
    66. Ausrechnen Zahl1, Zahl2, Merker
    67. Merker = ""
    68. ElseIf Anzahl > 2 Then
    69. Ausrechnen Zahl, Ergebnis, Merker
    70. Merker = ""
    71. End If
    72. End Sub
    73. Private Sub cmdMinus_Click()
    74. Anzahl = Anzahl + 1
    75. Merker = "subtrahieren"
    76. If Anzahl = 1 Then
    77. Zahl1 = Zahl
    78. ElseIf Anzahl = 2 Then
    79. Zahl2 = Zahl
    80. Ausrechnen Zahl1, Zahl2, Merker
    81. Merker = ""
    82. ElseIf Anzahl > 2 Then
    83. Ausrechnen Ergebnis, Zahl, Merker
    84. Merker = ""
    85. End If
    86. End Sub
    87. Private Sub cmdMal_Click()
    88. Anzahl = Anzahl + 1
    89. Merker = "multiplizieren"
    90. If Anzahl = 1 Then
    91. Zahl1 = Zahl
    92. ElseIf Anzahl = 2 Then
    93. Zahl2 = Zahl
    94. Ausrechnen Zahl1, Zahl2, Merker
    95. Merker = ""
    96. ElseIf Anzahl > 2 Then
    97. Ausrechnen Ergebnis, Zahl, Merker
    98. Merker = ""
    99. End If
    100. End Sub
    101. Private Sub cmdGeteilt_Click()
    102. Anzahl = Anzahl + 1
    103. Merker = "dividieren"
    104. If Anzahl = 1 Then
    105. Zahl1 = Zahl
    106. ElseIf Anzahl = 2 Then
    107. Zahl2 = Zahl
    108. Ausrechnen Zahl1, Zahl2, Merker
    109. Merker = ""
    110. ElseIf Anzahl > 2 Then
    111. Ausrechnen Ergebnis, Zahl, Merker
    112. Merker = ""
    113. End If
    114. End Sub
    115. Private Sub cmdHoch_Click()
    116. Anzahl = Anzahl + 1
    117. Merker = "potenzieren"
    118. If Anzahl = 1 Then
    119. Zahl1 = Zahl
    120. ElseIf Anzahl = 2 Then
    121. Zahl2 = Zahl
    122. Ausrechnen Zahl1, Zahl2, Merker
    123. Merker = ""
    124. ElseIf Anzahl > 2 Then
    125. Ausrechnen Ergebnis, Zahl, Merker
    126. Merker = ""
    127. End If
    128. End Sub
    129. Private Sub cmdWurzel_Click()
    130. Anzahl = Anzahl + 1
    131. Merker = "radizieren"
    132. If Anzahl = 1 Then
    133. Zahl1 = Zahl
    134. ElseIf Anzahl = 2 Then
    135. Zahl2 = Zahl
    136. Ausrechnen Zahl1, Zahl2, Merker
    137. Merker = ""
    138. ElseIf Anzahl > 2 Then
    139. Ausrechnen Ergebnis, Zahl, Merker
    140. Merker = ""
    141. End If
    142. End Sub
    143. 'Rechenarten
    144. Private Sub Ausrechnen(Z1 As Double, Z2 As Double, Rechenart As String)
    145. Select Case Rechenart
    146. Case "addieren"
    147. Ergebnis = Z1 + Z2
    148. txtErgebnis.Text = Ergebnis
    149. Case "subtrahieren"
    150. Ergebnis = Z1 - Z2
    151. txtErgebnis.Text = Ergebnis
    152. Case "multiplizieren"
    153. Ergebnis = Z1 * Z2
    154. txtErgebnis.Text = Ergebnis
    155. Case "dividieren"
    156. Ergebnis = Z1 / Z2
    157. txtErgebnis.Text = Ergebnis
    158. Case "potenzieren"
    159. Ergebnis = Z1 ^ Z2
    160. txtErgebnis.Text = Ergebnis
    161. Case "radizieren"
    162. Z2 = 0
    163. Ergebnis = Z1 ^ (1 / 2)
    164. txtErgebnis.Text = Ergebnis
    165. End Select
    166. End Sub
    167. Private Sub cmdEnde_Click()
    168. Unload Me
    169. End Sub
    170. Private Sub cmdClear_Click()
    171. Zahl = 0
    172. Anzahl = 0
    173. Merker = ""
    174. Zahl1 = 0
    175. Zahl2 = 0
    176. Ergebnis = 0
    177. txtErgebnis.Text = ""
    178. End Sub
    Dateien
    In meinem Code gibt es keine Fehler an sich. Es sind Funktionen die der Rechner können soll, die ich aber so, ohne eure Hilfe, nicht realisieren kann.

    Bei einem Standard Taschenrechner ist der Ablauf wie folgt:

    Beispiel: 1+8-5

    1. Zahl "1" wird eingetippt
    2. "+" wird getippt
    3. Zahl "8" wird eingetippt
    4. Hier kommt der Knackpunkt: Das Ergebnis aus der Addition von "1" und "8" wird beim Anwählen von "-" ausgegeben.
    5. Die nächste Zahl, die eingegeben wird, wird von 9 abgezogen.
    Hinzu kommt dass man an jeder Stelle das Ergebnis auch mit "=" ausgeben kann.



    Bisher habe ich das Ganze so gelöst (Beispiel anhand von einer Addition):


    Nummernfeld:

    VB.NET-Quellcode

    1. Private Sub cmd1_Click()
    2. Zahl = 1
    3. txtErgebnis.Text = 1
    4. End Sub
    5. Private Sub cmd2_Click()
    6. Zahl = 2
    7. txtErgebnis.Text = 2
    8. End Sub
    9. Private Sub cmd3_Click()
    10. Zahl = 3
    11. txtErgebnis.Text = 3
    12. End Sub


    Operatoren:

    VB.NET-Quellcode

    1. Private Sub cmdPlus_click()
    2. 'Anzahl wird mit jedem Klick auf die 1 um einen erhöht!
    3. Anzahl = Anzahl + 1
    4. 'Rechenart addieren wird in die Varibale Merker geschrieben!
    5. Merker = "addieren"
    6. ' 1.Wenn Anzahl = 1 dann schiebe Zahl in Zahl1
    7. ' 2.Wenn Anzahl = 2 dann schiebe Zahl in Zahl2, übergebe Zahl1/Zahl2 an Ausrechnen
    8. ' 3.Wenn Anzahl > 3 dann schiebe Zahl und Ergebnis (aus Punkt 2) in Ausrechnen
    9. If Anzahl = 1 Then
    10. Zahl1 = Zahl
    11. ElseIf Anzahl = 2 Then
    12. Zahl2 = Zahl
    13. Ausrechnen Zahl1, Zahl2, Merker
    14. ElseIf Anzahl > 2 Then
    15. Ausrechnen Zahl, Ergebnis, Merker
    16. End If
    17. End Sub
    18. Private Sub cmdMinus_Click()
    19. Anzahl = Anzahl + 1
    20. Merker = "subtrahieren"
    21. If Anzahl = 1 Then
    22. Zahl1 = Zahl
    23. ElseIf Anzahl = 2 Then
    24. Zahl2 = Zahl
    25. Ausrechnen Zahl1, Zahl2, Merker
    26. ElseIf Anzahl > 2 Then
    27. Ausrechnen Ergebnis, Zahl, Merker
    28. End If
    29. End Sub


    Rechnung:

    VB.NET-Quellcode

    1. Private Sub Ausrechnen(Z1 As Double, Z2 As Double, Rechenart As String)
    2. Select Case Rechenart
    3. Case "addieren"
    4. Ergebnis = Z1 + Z2
    5. txtErgebnis.Text = Ergebnis
    6. Case "subtrahieren"
    7. Ergebnis = Z1 - Z2
    8. txtErgebnis.Text = Ergebnis
    9. Case "multiplizieren"
    10. Ergebnis = Z1 * Z2
    11. txtErgebnis.Text = Ergebnis
    12. Case "dividieren"
    13. Ergebnis = Z1 / Z2
    14. txtErgebnis.Text = Ergebnis
    15. Case "potenzieren"
    16. Ergebnis = Z1 ^ Z2
    17. txtErgebnis.Text = Ergebnis
    18. Case "radizieren"
    19. Z2 = 0
    20. Ergebnis = Z1 ^ (1 / 2)
    21. txtErgebnis.Text = Ergebnis
    22. End Select
    23. End Sub


    Mit dieser Version lässt sich z.B. problemlos addieren und mit jedem Klick auf den operator "+" wird das Ergebnis auch immer wieder korrekt ausgegeben, jedoch nur solange man beim addieren bleibt. Wechselt die Rechenart werden falsche Ergebnisse geliefert. Außerdem habe ich noch keine Vorstellung wie ich das mit dem Gleichheitszeichen implementieren soll.

    Wäre schön wenn ihr da mal drüber gucken würdet.

    Grüße & einen schönen Feierabend.
    Ich hoffe du denkst auch daran: wenn du deinen
    Taschenrechner so aufbaust, dass er, wenn du einen neuen
    Operator eintippst, auch zwischen Punkt und Strichrechnung
    unterscheiden muss.

    Ich persönlich ziehe ja Taschenrechner vor, bei denen ich
    mit Kursortasten noch Korrekturen vornehmen kann.

    Da es aber für dich eher eine Einstiegsübung vür VB sein soll,
    musst du dich halt an deine eigenen Vorgaben halten.

    Du brauchst also auch eine Wichtungsreihenfolge.
    Eventuell musst du auch noch Klammern eingeben können.
    Dann wird es aber schon ziemlich kompliziert, falls du
    das dann mittels Rekursion lösen willst.