AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Kompilierender Matheparser
Thema durchsuchen
Ansicht
Themen-Optionen

Kompilierender Matheparser

Ein Thema von Dax · begonnen am 26. Mai 2005 · letzter Beitrag vom 24. Aug 2006
Antwort Antwort
Seite 8 von 14   « Erste     678 910     Letzte »    
Dax
Huhu DP!

Ich hab (mal wieder ) einen Matheparser geschrieben, aber diesmal einen besonderen. Mit diesem kann man Ausdrücke nicht nur Parsen, sondern auch noch kompilieren (Habs mal duchgetestet, ist schneller als Delphieigene Kompilate)

Ich stells einfach mal so hier rein, zum Doks-schreiben ist es einfach zu.. heiß.. und das Interface erklärt sich eh fast von selbst, und mit den Comments in den Units und den Units selbst kommt man auch gut über die Runden. Hoffe ich

read you,
Dax

[edit] da waren ein paar Fehler, verzeiht [/edit]
nocheinedit: Wieder ein paar Fehler ausgebügelt
Angehängte Dateien
Dateityp: zip excqparser_207.zip (16,1 KB, 524x aufgerufen)
Dateityp: zip realdemo_442.zip (11,1 KB, 399x aufgerufen)
Dateityp: zip ecqpdemo-exe_649.zip (244,6 KB, 484x aufgerufen)
 
Dust Signs
 
#71
  Alt 29. Mai 2005, 21:10
Zitat von Nicodius:
sry schnell ne frage(ich hab jetzt nicht alels durchgelesen)

was sind imaginäre Werte? ... also nur vorgestellte werte - was hat dass für nen sinn(weil auch immer kommt ()i
Die Imaginäre Einheit ist definiert als
Code:
i^2 = -1
; also unter uns gesagt ist i die Wurzel aus minus 1; ist nicht korrekt so, aber so lässt sich's leicht verstehen. Wenn du mehr dazu wissen willst, such einfach mal bei Google:

[google]Gauss'sche Zahlenebene[/google]
Bei Google suchenImaginäre Einheit
[google]Resonanz+Schwingkreis+Formel[/google]

Dust Signs
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

 
Delphi 5 Standard
 
#72
  Alt 29. Mai 2005, 21:24
Zitat von Dax:
Edit2: Fehler beseitigt, neue Version
So langsam wirds Merkwürdigerweise gibts massive Probleme, wenn PreSolve false ist. Da knallt selbst

Delphi-Quellcode:
  Parser:=TExCQParser.Create;
  Parser.SolveMode:=smVM;
  Parser.PreSolve:=false;

  Parser.RegisterVariable('Range');

  Parser.SetVariable('Range',[10]);

  Parser.Parse('1*2');

  ShowMessage(FloatToStr(Parser.Solve.X));
  Parser.Free;
Schreibt man es statt dessen in Klammern: (1*2) dann klappt es.

Hier scheint es also ein generelles Problem zu geben, wenn PreSolve false ist. Da ich den Variablen erst später einen Wert zuweise, aber die Formeln schon bei Programmstart kompiliere, bin ich auf PreSolve false angewiesen
Christian Reich
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

 
Delphi 7 Enterprise
 
#73
  Alt 29. Mai 2005, 22:19
Zitat von jim_raynor:
Da ich den Variablen erst später einen Wert zuweise, aber die Formeln schon bei Programmstart kompiliere, bin ich auf PreSolve false angewiesen
Der Sinn eines Presolver ist es, konstante Teile eines Ausdrucks vorauszuberechnen und als einen einzigen konstanten Wert zu verbraten. Variablen bleiben variabel - daher kann man imho auch bei der Registrierung angeben ob eine Variable als Konstante (der Presolver verwurstets mit), oder als echte Variable angesehen werden soll, die der Presolver bestehen lässt.
Ich denke mal Dax hat das so eingebaut

\\edit: Er macht also im Grunde aus "(x*2)+(sin(pi/2)*2)" --> "x*2+2"
Fabian K.
  Mit Zitat antworten Zitat
Robert_G
 
#74
  Alt 29. Mai 2005, 22:52
Ich kam zwar noch nicht zum Testen. Aber der Code gefällt mir, wirklich hübsch geschrieben.
Das wollte ich nur mal loswerden...

btw: Nach all dem
Zitat:
Hi jim...
Zitat:
danke jim
... irgendwie lag mir da ein "He's dead, Jim" auf der Zunge.
  Mit Zitat antworten Zitat
Dax
 
#75
  Alt 30. Mai 2005, 07:23
Zitat von jim_raynor:
Zitat von Dax:
Edit2: Fehler beseitigt, neue Version
So langsam wirds Merkwürdigerweise gibts massive Probleme, wenn PreSolve false ist. Da knallt selbst

=schnipp=

Schreibt man es statt dessen in Klammern: (1*2) dann klappt es.

Hier scheint es also ein generelles Problem zu geben, wenn PreSolve false ist. Da ich den Variablen erst später einen Wert zuweise, aber die Formeln schon bei Programmstart kompiliere, bin ich auf PreSolve false angewiesen
Das deutet alles auf ein Problem mit dem Serialisierer hin Sobald ich Zeit habe beziehungse wieder zuhause bin, sehe ich mir das mal an

PS:
Zitat von Robert_G:
... irgendwie lag mir da ein "He's dead, Jim" auf der Zunge.
Nein, noch lebt der Parser

read you,
Dax
  Mit Zitat antworten Zitat
Dust Signs
 
#76
  Alt 30. Mai 2005, 09:24
Zitat von Dax:
PS:
Zitat von Robert_G:
... irgendwie lag mir da ein "He's dead, Jim" auf der Zunge.
Nein, noch lebt der Parser
Und Jim?

Dust Signs
  Mit Zitat antworten Zitat
Dax
 
#77
  Alt 30. Mai 2005, 14:12
Huhu

Also, hab den Fehler gefunden und korrigiert, danke

Delphi-Quellcode:
procedure ThisThread.NewVersion;
begin
  WriteLn('Korrigierte Version ist oben ;-)');
end;
ThisThread.NewVersion;

Zitat von Dust Signs:
Und Jim?

Dust Signs
Wenn er weiter Fehler findet, wird es ihn so schnell nicht treffen

read you,
Dax
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

 
Delphi 2006 Professional
 
#78
  Alt 30. Mai 2005, 16:25
weisst du, was genial wäre? wenn der parser gleichungen (bzw. eine seite einer gleichung) lösen (bzw. vereinfachen) könnte.

nur als kleine anregung
Lukas Erlacher
  Mit Zitat antworten Zitat
Dax
 
#79
  Alt 30. Mai 2005, 16:30
Sag mal ein konkretes Beispiel, dann überleg ichs mir

read you,
Dax
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

 
Delphi 2006 Professional
 
#80
  Alt 30. Mai 2005, 16:59
(aus der heutigen mathe-hausafgabe, was aber REIN GAR NICHTS zur sache tut )

(lg(x))² - lg(4x-4) = 0

jetzt eben entweder komplett nach x auflösen, so dass zum schluss L={x;y} dasteht oder die linke seite so weit wie möglich vereinfachen.
Lukas Erlacher
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 8 von 14   « Erste     678 910     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz