Formel-Ausrechner

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

simi

Betreff: Formel-Ausrechner

BeitragDi, Jul 06, 2004 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

hatte mal vor langer Zeit dieses kleine Programm geschriebn, das eine Formel ausrechnet. Es unterstützt aber nicht die Punkt-vor-Strichrechnung-Regel.
Vielleicht kanns ja jemand brauchen.

Code: [AUSKLAPPEN]

Type ZahlT
   Field Typ
   Field Wert
End Type

Global Search,Weiter


Print Formel("(5*8) + 10 - (13 * (4/2))-(2/2)")

Function Formel(Formel$)
Formel = Formel + " "
   For x = 1 To Len(Formel)
      Zeichen$ = Mid(Formel,x,1)
      ;Schauen für Operanden und Klammern
      Select Zeichen$
      Case "+"
         z.ZahlT = New ZahlT
         Z\Typ = 1:z\Wert = 0
      Case "-"
         z.ZahlT = New ZahlT
         Z\Typ = 1:z\Wert = 1
      Case "*"
         z.ZahlT = New ZahlT
         Z\Typ = 1:z\Wert = 2
      Case "/"
         z.ZahlT = New ZahlT
         Z\Typ = 1:z\Wert = 3
      Case "("
         z.ZahlT = New ZahlT
         Z\Typ = 2;:z\Wert = 0
      Case ")"
         z.ZahlT = New ZahlT
         Z\Typ = 3;:z\Wert = 0
      End Select
      ;Schauen für Zahl
      If Instr("0123456789",Zeichen$) >= 1 Then
         Zahl$ = Zahl$ + Zeichen$
         If Instr("0123456789",Mid(Formel,x+1,1)) = 0 Then
            z.ZahlT = New ZahlT
            Z\Typ = 4:z\Wert = Int(Zahl$)
            Zahl$ = ""
         End If
      End If
   Next
   Return Ausrechnen()
End Function



Function Ausrechnen()
   For z.ZahlT = Each ZahlT
      If Search Then z.ZahlT = Object.ZahlT(Weiter):Search = 0:Goto Forward
      If z\Typ = 2 Then
         Search = 1
         Weiter = Handle(z.ZahlT)
         z\Wert = Ausrechnen()
         z\Typ = 4
      End If
      If z\Typ = 3 Then
         Search = 1
         weiter = Handle(z.ZahlT)
         Return Ergebnis
      End If
      If z\Typ = 1 Then Operator = z\Wert
      If z\Typ = 4 Then
         Select Operator
         Case 0
            Ergebnis = Ergebnis + z\Wert
         Case 1
            Ergebnis = Ergebnis - z\Wert
         Case 2
            Ergebnis = Ergebnis * z\Wert
         Case 3
            Ergebnis = Ergebnis / z\Wert
         End Select
      End If
      .Forward
   Next
   Return Ergebnis
End Function


cu simi
  • Zuletzt bearbeitet von simi am Mi, Jun 07, 2006 20:40, insgesamt einmal bearbeitet

ChrisAttack

BeitragDi, Jul 06, 2004 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, aber warum nicht
ergebnis = (5*8) + 10 - (13 * (4/2))-(2/2)
?!? Confused
B3D
MSVC++
DX9SDK
 

Kekskiller

BeitragDi, Jul 06, 2004 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil man solche Ausrechenmöglichkeiten zum Beispiel
für Taschenrechner benötigt.

DC

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragMi, Jul 07, 2004 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich mich nicht ganz stark irre, hat ST mal sowas gemacht und das hatte wirklich alles drauf. Klammer Zeug und so auch.
Core i5 4670K | 4 x 3,40 GHZ | 16 GB Ram | GeForce GTX 960 | HTC Vive | Win 10 Pro
www.UnrealSoftware.de | www.StrandedOnline.de | www.CS2D.com |
www.CarnageContest.com | www.Stranded3.com

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group