Parameterübergabe an Funktionen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Torfkopp
Beiträge: 7
Registriert: Mo 27. Feb 2023, 07:09

Parameterübergabe an Funktionen

Beitrag von Torfkopp »

ICH NU WIEDER.....aber Ihr seht, ich lern schnell....(Zunge rausstreck für die, die wohl dachten, ich wäre ein TROLL) :D

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....

Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Re: Parameterübergabe an Funktionen

Beitrag von Frank Ranis »

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
www.flz-vortex.de

Benutzeravatar
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

Beitrag von corpsman »

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:

Code: Alles auswählen


uses umathsolver; 

Procedure TForm1.Button1Click(Sender:Tobject);
begin
  ResultEdit.text := EvalString(QuelleEdit.text);
end;

Das Ergebnis wäre also wieder ein String.
--
Just try it

charlytango
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

Beitrag von charlytango »

Torfkopp hat geschrieben:
Do 2. Mär 2023, 05:01
Weil, letztendlich, müsste ja der COMPILER aus einem "+" ein Rechenoperator + machen.......geht das überhaupt ...???
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

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Parameterübergabe an Funktionen

Beitrag von wp_xyz »

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.

Antworten