Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 

Re: Term (Zeichenfolge 1+2*3) in Fließkommazahl

  Alt 19. Okt 2009, 19:16
Zitat von alzaimar:
... Oder ... oder ...
OK, das geht auch
hatte es nur so gelößt, damit man dann auch noch "mod" und Co. einfach nachrüsten kann
(wie hier unten die Klammern, beim Zerlegen, reingequetscht werden, braucht man nur 'a'..'z', 'A'..'Z' bei den Zahlen reinmachen und hat auch noch Wörter, wie Named-Operators, mit geparst )



Zitat:
2*+2
ja, das + und - wird doppelt ausgewertet
- einmal als Vorzeichen ganz am Anfang, da höchste Priorität
- und nochmal ganz am Ende als Operator, da niedrigste Priorität



nein, der kann noch keine Klammern

das hier sollte "nur" ein kleiner "einfacher" Anfang werden,
nicht so wie da http://www.delphipraxis.net/internal...t.php?t=159592

man müßte nur noch "(" und ")" beim Zerlegen mit beachten
Code:
For i := 1 to Length(S) do
  Case S[i] of
    ...
    '*', '/', '+', '-'[color=#ff0000], '(', ')'[/color]: Begin
und dann kommt unten als erste "höchstwertige" Auswertung dieses rein
Delphi-Quellcode:
For i := 0 to SL.Count - 3 do
  If (SL[i] = '(') and TryStrToFloat(SL[i + 1], a) and (SL[i + 2] = ')') Then Begin
    SL.Delete(i + 2);
    SL.Delete(i);
    Goto Loop;
  End;


[add]
hab aber wirklich eine Vereinfachung gefunden
If ((i = 0) or AnsiMatchText(SL[i - 1], ['*', '/', '+', '-'])) dieses war ja einfach nur für "ist Operator", was doch auch soviel wie "ist keine Zahl" heißt

also dieses sollte stattdessen auch gehn
If ((i = 0) or not TryStrToFloat(SL[i - 1], b))
[add]
hier noch mit Klammern und Div/Mod

und ja natürlich kann man da vieles noch optimieren und zusammenfassen, aber das kann auch jeder selber machen
Miniaturansicht angehängter Grafiken
taschenrechner_358.png  
Angehängte Dateien
Dateityp: 7z taschenrechner_839.7z (153,5 KB, 7x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat