String-Rechen-Funktion
Übersicht

![]() |
CardonicBetreff: String-Rechen-Funktion |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab die String-Rechen-Funktion im BiltzBasic Codearchiv gsehen und festgestellt, dass es sowas im BlitzMax Codearchiv noch nicht gibt.
Daher schadet es sicher nicht, wenn ich meine Funktion, die ich für meinen geplanten Funktionsplotter programmiert habe, hier poste. Bis jetz ist möglich: Addieren Subtrahieren Multiplizieren Dividieren Potenzieren Quadratwurzel (mit a^(1/x) lässt sich auch die xte wurzel ausrechnen) Fakultät Sinus Cosinus Tangens Neue Funktionen lassen sich relativ einfach einbauen ... Code: [AUSKLAPPEN] Function Calculate:Double(Term:String)
Local Array:String[] =["!", "^", "sqr", "sin", "cos", "tan", "*", "/", "+", "¬"] Local Amount:Int = Array.Length - 1 Local Position:Int Local Length:Int Local Before:String Local After:String Local Bracket:String Local Result:String Local I:Int Local J:Int Term = Term.ToLower() Term = Term.Replace(" ", "") While Term.Contains("--") Or Term.Contains("+-") Term = Term.Replace("--", "+") Term = Term.Replace("+-", "-") Wend Term = Term.Replace("-", "¬") Term = Term.Replace("sqr¬", "sqr-") Term = Term.Replace("sin¬", "sin-") Term = Term.Replace("cos¬", "cos-") Term = Term.Replace("tan¬", "tan-") ' Klammern While Term.Contains("(") ' Länge des Terms Length = Term.Length ' Klammer suchen For Position = 0 To Length If Mid(Term, Length - Position, 1) = "(" Then I = Length - Position J = Term.Find(")", I) Exit End If Next ' Klammer ausrechnen und ersetzen Bracket = Term[I..J] Term = Term.Replace("(" + Bracket + ")", Calculate(Bracket)) Term = Term.Replace("--", "+") Term = Term.Replace("+-", "-") Wend ' Funktionen und Operationen For I = 0 To Amount Repeat ' Funktion oder Operator suchen Position = Term.Find(Array[I] ) If Position < 0 Then Exit ' Länge des Terms Length = Term.Length ' Zahl davor Before = "" J = Position - 1 While J >= 0 If Term[J] >= 48 And Term[J] <= 57 Or Term[J] = 46 Then Before = Chr(Term[J] ) + Before J:-1 Else If Term[J] = 45 Then Before = "-" + Before Exit Else Exit End If Wend ' Zahl danach After = "" J = Position + Array[I].Length While J < Length If Term[J] >= 48 And Term[J] <= 57 Or Term[J] = 46 Then After = After + Chr(Term[J] ) J:+1 Else If After = "" And Term[J] = 45 Then After = "-" J:+1 Else Exit End If Wend ' Ergebnis Select Array[I] Case "+" Result = Double(Before) + Double(After) Case "¬" Result = Double(Before) - Double(After) Case "*" Result = Double(Before) * Double(After) Case "/" Result = Double(Before) / Double(After) Case "^" Result = Double(Before) ^ Double(After) Case "!" Result = Factorial(Double(Before)) After = "" Case "sqr" Result = Sqr(Double(After)) Before = "" Case "sin" Result = Sin(Double(After) * 180 / Pi) Before = "" Case "cos" Result = Cos(Double(After) * 180 / Pi) Before = "" Case "tan" Result = Tan(Double(After) * 180 / Pi) Before = "" End Select If Result.Contains("e-") Then Result = 0 'Ergebnis ersetzen Term = Term.Replace(Before + Array[I] + After, Result) Term = Term.Replace("--", "+") Term = Term.Replace("+-", "-") Forever Next Return Double(Term) End Function Function Factorial:Double(N:Double) If N < 0 Then Return 0 If N = 0 Then Return 1 Return (N * Factorial(N - 1)) End Function Falls ihr Fehler findet; bitte hier melden, danke mfg Cardonic |
||
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oh, toll, danke. Kann man immer mal wieder gebrauchen ![]() Hab bislang noch keine Fehler gefunden |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group