ICH NU WIEDER.....aber Ihr seht, ich lern schnell....(Zunge rausstreck für die, die wohl dachten, ich wäre ein TROLL)
Folgendes Problemchen :
Ich übergebe , bspw in einem TEdit.Text : "1+4*3-SIN(45)"
Ist ja nen STRING, den ich einer Funktion übergeben kann...
Gibt es eine einfache Möglichkeit, DIESEN STRING zu konvertieren, damit die Funktion liefert :
Result := 1+4*3 - SIN(45)
Oder müsste ich dazu den String auf CHAR Ebene zerpflücken und jedes einzelne CHAR irgendwie kummulieren....?
Frage wäre dann : Wie wandelt man "String Operatoren" (+, *, -) in akzeptable ECHTZEIToperatoren um...??
Ich glaube "StrtoOperator" gibt es nicht......loool
Weil, letztendlich, müsste ja der COMPILER aus einem "+" ein Rechenoperator + machen.......geht das überhaupt ...???
Spontaner Gedanke wäre : Direkt in den Speicherplatz der Funktion die Werte zu manipulieren....Gütiger Himmel.....
Erinnert mich an "PEEK" und "POKE" aus alten Basic Zeiten.....Das muss auch einfacher gehen...Man kann dafür doch ned im Stack rumfusseln müssen....
Parameterübergabe an Funktionen
-
- Beiträge: 201
- Registriert: Do 24. Jan 2013, 21:22
Re: Parameterübergabe an Funktionen
Hallo Torfkopp ,
dazu brauchst Du einen Mathe-Parser.
Google mal nach 'math parser pascal delphi'
Habe auf die Schnelle das hier gefunden
https://www.delphipraxis.net/140346-ter ... azahl.html
und
https://kilchb.de/parser.php
Wenn Du fertig bist , dann stell das Ergebnis bitte allen zur Verfügung.
Gruß
Frank
dazu brauchst Du einen Mathe-Parser.
Google mal nach 'math parser pascal delphi'
Habe auf die Schnelle das hier gefunden
https://www.delphipraxis.net/140346-ter ... azahl.html
und
https://kilchb.de/parser.php
Wenn Du fertig bist , dann stell das Ergebnis bitte allen zur Verfügung.
Gruß
Frank
www.flz-vortex.de
- corpsman
- Lazarusforum e. V.
- Beiträge: 1498
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Parameterübergabe an Funktionen
Ich hab mal nen Mathesolver geschrieben, der könnte das.
Und finden kannst du den z.B. hier ( https://github.com/PascalCorpsman/CCM/b ... solver.pas )
Mit dem sähe dein Code dann so aus:
Das Ergebnis wäre also wieder ein String.
Und finden kannst du den z.B. hier ( https://github.com/PascalCorpsman/CCM/b ... solver.pas )
Mit dem sähe dein Code dann so aus:
Code: Alles auswählen
uses umathsolver;
Procedure TForm1.Button1Click(Sender:Tobject);
begin
ResultEdit.text := EvalString(QuelleEdit.text);
end;
--
Just try it
Just try it
-
- Beiträge: 843
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: Parameterübergabe an Funktionen
Natürlich geht das und der COMPILER macht das auch.
Du hast zu dem Zeitpunkt in dem du deinen Text in eine Rechnoperation umwandeln willst aber gar keinen Zugriff auf den Compiler. Lazarus/FPC und im übrigen auch Delphi ist ein Compiler und kein Interpreter.
Die ausführbare Datei kann nur was du ihr beibringst.
Deswegen brauchst du dazu irgend eine Funktionalität wie die von Corpsman vorgeschlagene
Re: Parameterübergabe an Funktionen
Für den Formelparser gibt es auch eine eingebaute Lösung: Unit fpexprpars, die sich im FPC-Verzeichnis packages/fcl-base/src befindet. Für die Anwendung gibt es eine Anleitung im wiki: https://wiki.lazarus.freepascal.org/How ... sionParser. Ein Vorteil gegenüber anderen Lösungen ist, dass man selbst-definierte Funktionen einbauen kann; du könntest damit realisieren, dass die sin-Funktion den Winkel in Grad nimmt und nicht im Bogenmaß wie sonst überall.
Neben fpexprpars gibt es noch das Package "symbolic" (Verzeichnis packages/symbolic/src), mit dem ich aber selbst noch nicht gearbeitet habe.
Neben fpexprpars gibt es noch das Package "symbolic" (Verzeichnis packages/symbolic/src), mit dem ich aber selbst noch nicht gearbeitet habe.