[VB] Tschenrechner, Rechenketten

undertaker1988

Lt. Junior Grade
Registriert
Nov. 2003
Beiträge
465
Hi ich hab einen Taschenrechner in VB programmiert und habe noch kleinigkeiten die verbessert werden müssten und zwar
1. Ich kann nur zwei Zahlen eingeben und keine Rechenketten wie "1+1+1+1+1+1+1"
2. Wenn ich "7/0" rechne stürzt er ab.
3. Wenn ich die Taste "Escape"auf der Tastertur drücke wäre es nett wenn er sich dann automatisch schließen würde.

Danke im vorraus

Code:
     'Dimensierung zweier Zahlen
Dim Zahl1 As Double
Dim Zahl2 As Double

    'Command Button: Zahl 0
Private Sub cmd_zahl0_Click()
    txt_ergebnis.Text = txt_ergebnis.Text + "0"
End Sub

    'Command Button: Zahl 1
Private Sub cmd_zahl1_Click()
    txt_ergebnis.Text = txt_ergebnis.Text + "1"
End Sub

    'Command Button: Zahl 2
Private Sub cmd_zahl2_Click()
    txt_ergebnis.Text = txt_ergebnis.Text + "2"
End Sub

    'Command Button: Zahl 3
Private Sub cmd_zahl3_Click()
    txt_ergebnis = txt_ergebnis + "3"
End Sub

    'Command Button: Zahl 4
Private Sub cmd_zahl4_Click()
    txt_ergebnis = txt_ergebnis + "4"
End Sub

    'Command Button: Zahl 5
Private Sub cmd_zahl5_Click()
    txt_ergebnis = txt_ergebnis + "5"
End Sub

    'Command Button: Zahl 6
Private Sub cmd_zahl6_Click()
    txt_ergebnis = txt_ergebnis + "6"
End Sub

    'Command Button: Zahl 7
Private Sub cmd_zahl7_Click()
    txt_ergebnis = txt_ergebnis + "7"
End Sub

    'Command Button: Zahl 8
Private Sub cmd_zahl8_Click()
    txt_ergebnis = txt_ergebnis + "8"
End Sub

    'Command Button: Zahl 9
Private Sub cmd_zahl9_Click()
    txt_ergebnis = txt_ergebnis + "9"
End Sub

    'Command Button: komplette Anzeige löschen
Private Sub cmd_loeschen_Click()
    txt_ergebnis.Text = ""
    txt_rechenzeichen.Text = ""
    Zahl1 = False
    Zahl2 = False
    cmd_komma.Enabled = True
End Sub

    'Command Button: letzte Eingabe löschen
Private Sub cmd_lE_loeschen_Click()
    txt_ergebnis.Text = ""
    cmd_komma.Enabled = True
End Sub

    'Command Button: Vorzeichen ändern
Private Sub cmd_plus_minus_Click()
    txt_ergebnis.Text = txt_ergebnis.Text * (-1)
End Sub

    'Command Button: Komma setzen
Private Sub cmd_komma_Click()
    txt_ergebnis.Text = txt_ergebnis.Text + ","
    cmd_komma.Enabled = False
End Sub
            
                                 'alle Rechnungen
                        
Private Sub cmd_gleich_Click()

    If txt_ergebnis = "" Then
                         Meldung = MsgBox("Bitte geben Sie zunächst eine Zahl ein.", vbInformation, "Eingabe-Fehler")
                         Else
                         Zahl2 = txt_ergebnis
                         txt_ergebnis = ""
    End If
    
               
                               
       'Plus - Rechnung
    If txt_rechenzeichen = "+" Then
       txt_ergebnis = CDbl(Zahl1) + CDbl(Zahl2)
   
    
       'Minus - Rechnung
    ElseIf txt_rechenzeichen = "-" Then
           txt_ergebnis = CDbl(Zahl1) - CDbl(Zahl2)
    
    
       'Multiplikations - Rechnung
    ElseIf txt_rechenzeichen = "*" Then
           txt_ergebnis = CDbl(Zahl1) * CDbl(Zahl2)
    
    
       'Divisions - Rechnung
    ElseIf txt_rechenzeichen = "/" Then
           txt_ergebnis = CDbl(Zahl1) / CDbl(Zahl2)
    
     
       'Hoch² - Rechnung
    ElseIf txt_rechenzeichen = "x²" Then
           txt_ergebnis = CDbl(Zahl1) * CDbl(Zahl1)
    
    
       'Wurzel - Rechnung
    ElseIf txt_rechenzeichen = "sqr" Then
           txt_ergebnis = Sqr(Zahl1)
    
    
       'Kehrwert - Rechnung
    ElseIf txt_rechenzeichen = "1/x" Then
           txt_ergebnis = 1 / CDbl(Zahl1)
           
       'Potenz - Rechnung
    ElseIf txt_rechenzeichen = "x^y" Then
           txt_ergebnis = CDbl(Zahl1) ^ CDbl(Zahl2)
       
    End If
End Sub
    
    'Command Button: Addition
Private Sub cmd_plus_Click()
    If txt_ergebnis = "" Then
                         Meldung = MsgBox("Bitte geben Sie zunächst eine Zahl ein.", vbInformation, "Eingabe-Fehler")
                         Else
                         Zahl1 = txt_ergebnis
                         txt_rechenzeichen = "+"
                         txt_ergebnis = ""
                         cmd_komma.Enabled = True
    End If
End Sub

    'Command Button: Subtraktion
Private Sub cmd_minus_Click()
    If txt_ergebnis = "" Then
                         Meldung = MsgBox("Bitte geben Sie zunächst eine Zahl ein.", vbInformation, "Eingabe-Fehler")
                        Else
                        Zahl1 = txt_ergebnis
                        txt_rechenzeichen = "-"
                        txt_ergebnis = ""
                        cmd_komma.Enabled = True
    End If
End Sub

    'Command Button: Multiplikation
Private Sub cmd_mal_Click()
    If txt_ergebnis = "" Then
                         Meldung = MsgBox("Bitte geben Sie zunächst eine Zahl ein.", vbInformation, "Eingabe-Fehler")
                         Else
                         Zahl1 = txt_ergebnis
                         txt_rechenzeichen = "*"
                         txt_ergebnis = ""
                         cmd_komma.Enabled = True
    End If
End Sub
    
    'Command Button: Division
Private Sub cmd_geteilt_Click()
    If txt_ergebnis = "" Then
                         Meldung = MsgBox("Bitte geben Sie zunächst eine Zahl ein.", vbInformation, "Eingabe-Fehler")
                         Else
                         Zahl1 = txt_ergebnis
                         txt_rechenzeichen = "/"
                         txt_ergebnis = ""
                         cmd_komma.Enabled = True
    End If
End Sub

    'Command Button: Hoch²
Private Sub cmd_hoch²_Click()
    If txt_ergebnis = "" Then
                         Meldung = MsgBox("Bitte geben Sie zunächst eine Zahl ein.", vbInformation, "Eingabe-Fehler")
                         Else
                         Zahl1 = txt_ergebnis
                         txt_rechenzeichen = "x²"
                         cmd_komma.Enabled = True
    End If
End Sub

    'Command Button: Wurzel
Private Sub cmd_wurzel_Click()
    If txt_ergebnis = "" Then
                         Meldung = MsgBox("Bitte geben Sie zunächst eine Zahl ein.", vbInformation, "Eingabe-Fehler")
                         Else
                         Zahl1 = txt_ergebnis
                         txt_rechenzeichen = "sqr"
                         cmd_komma.Enabled = True
    End If
End Sub

    'Command Button: Pi
Private Sub cmd_Pi_Click()
    txt_ergebnis = txt_ergebnis + "3,1415926535897932384626433832795"
End Sub

    'Command Button: Kehrwert
Private Sub cmd_kehrwert_Click()
    If txt_ergebnis = "" Then
                         Meldung = MsgBox("Bitte geben Sie zunächst eine Zahl ein.", vbInformation, "Eingabe-Fehler")
                         Else
                         Zahl1 = txt_ergebnis
                         txt_rechenzeichen = "1/x"
                         txt_ergebnis = ""
                         cmd_komma.Enabled = True
    End If
End Sub

    'Command Button: Prozent
Private Sub cmd_prozent_Click()
    If txt_ergebnis = "" Then
                         Meldung = MsgBox("Bitte geben Sie zunächst eine Zahl ein.", vbInformation, "Eingabe-Fehler")
                         Else
                         Zahl1 = txt_ergebnis
                         txt_ergebnis = Zahl1 * Zahl2 / 100
                         cmd_komma.Enabled = True
    End If
End Sub

    'Command Button: Potenz
Private Sub cmd_potenz_Click()
    If txt_ergebnis = "" Then
                         Meldung = MsgBox("Bitte geben Sie zunächst eine Zahl ein", vbInformation, "Eingabe-Fehler")
                         Else
                         Zahl1 = txt_ergebnis
                         txt_rechenzeichen = "x^y"
                         txt_ergebnis = ""
                         cmd_komma.Enabled = True
    End If
End Sub
 
7/0 geht nicht zu rechnen, das kann kein Taschenrechner, probier das mal bei calc

so kannst du es abfangen
Code:
Private Sub Form_Load()
On Error GoTo errhandler
lng = 7 / 0

Exit Sub
errhandler:
Select Case Err.Number
    Case 11
        Resume Next
    Case Else
        MsgBox Err.Description
End Select
End Sub

das mit dem Esc machst du am einfachsten so:

Button außerhalb des sichtbaren bereichs legen
Cancel auf True
und im Click Event des Buttons das hier
Code:
Private Sub Command1_Click()
Unload Me
End Sub
 
Zuletzt bearbeitet:
Das man 7/0 nicht rechnen kann ist mir klar, aber wenn man das eintippt dann stürzt er ab und stattdessen sollte lieber eine Fehlermeldung kommen.
 
kannst auch bei Division und Kehrwertereignis prüfen ob Zähler 2 bzw. 1 Null ist und selbst ne Fehlermeldung schreiben aber was machen mußt Du

wie wärs mit ner 3. Variable (und vielleicht ne Bedningung als 4.) als Zwischenergebnis und um die Funktion ne Schleife rum ziehst?
 
Zum Thema Rechenkette würde ich folgendes Prinzip vorschlagen:

Dim Zahlen() as double
Dim Rechenzeichen() as string

Sagen wir die Rechnung stünde in Text1

mit left(), bzw mid() eine Schleife programmieren, die Zeichen für Zeichen den Inhalt von Text1 durchgeht. Sobald IsNumeric(Zeichen)=FALSE ergibt ist es dein Rechenzeichen. Also hast du sowohl die zahl als auch das Rechenzeichen. Alles ab in ein Array und von dort aus weitersuchen bis Rechenzeichen...usw bis die Zeichenkette durchgelaufen ist.

Dann mit einer case Anweisung nach Rechnezeichen getrennt Ergebnisse ausrechnen, in Variable Teilergebnis speichern und mit nächstem Rechenzeichen + Operanden fortfahren bis alle Elemente des Arrays durchlaufen sind.

Fehlt noch die Wertigkeit der Rechenzeichen, das solltest du anschließend einpflegen.

Achja, wenn du die Buttons als Steuerelementfeld (also mit Index) benutzt kannst du dir die vielen Abfragen sparen.

...Command_Ziffern_Click(Index as Integer)
text1.text=text1.text & index
 
Zuletzt bearbeitet:
Zurück
Oben