Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Einfach mathe-Formeln in Delphi berechnen lassen (https://www.delphipraxis.net/131406-einfach-mathe-formeln-delphi-berechnen-lassen.html)

Errraddicator 24. Mär 2009 14:53


Einfach mathe-Formeln in Delphi berechnen lassen
 
Hiho,

hab da ma ne kleine Frage, weil ich in dieser Hinsicht bisher noch nix gemacht hab und jetzt son bissel wie der Ochs vorm Berg stehe. :D

Ich habe also ein Programm das Daten in einer Art Baumstruktur hinterlegt hat.
Jeder Knoten kann dabei eine Formel beinhalten, in denen dann sinngemäß steht "Knoten A - Knoten C".
Das Ganze hab ich per Programm so umgewandelt, dass dort jetzt auch Werte drin stehen in einer fertigen mathemathischen Formel, also "5 - 10" (5 = Wert von Knoten A, 10 = Wert von Knoten C).

Nur:
Wie kann ich Delphi jetzt verklickern mir "5 - 10" zu rechnen, ohne dass ich das mühsam selbst über schleifen programmieren muss?
Gibt es da eine Funktion für, die mir dann entsprechend nen Extended-Wert zurück gibt?


Danke im Voraus

cu Patrick

guidok 24. Mär 2009 15:04

Re: Einfach mathe-Formeln in Delphi berechnen lassen
 
Zitat:

Zitat von Errraddicator
Gibt es da eine Funktion für, die mir dann entsprechend nen Extended-Wert zurück gibt?

Nicht das ich wüsste.



Du brauchst einen mathematischen Parser. Schau mal über die Suchfunktion hier im Forum.


Sollten es nur so einfache Formeln sein (Zwei Werte und eine Operation), dann kannst du das evtl. leicht selbst zerlegen und entsprechend berechnen. Du müsstest ja nur die beiden Werte links und rechts von der Operation in zwei Variablen schreiben und z.B. mit einer "case Operator of" Anweisung entsprechend verknüpfen.

TheFrog 24. Mär 2009 16:04

Re: Einfach mathe-Formeln in Delphi berechnen lassen
 
Hallo Patrick,

ich habe mit folgender Komponente ganz gute Erfahrungen gemacht:

http://www.sadmansoftware.com/delphi/freeware/expeval.htm

Hans.

TheFrog 24. Mär 2009 16:05

Re: Einfach mathe-Formeln in Delphi berechnen lassen
 
Uups, sorry, falscher Link:

sadmansoftware

Hans

Errraddicator 25. Mär 2009 08:52

Re: Einfach mathe-Formeln in Delphi berechnen lassen
 
Danke für die Antworten!

Hab mir jetzt selber ma sone Funktion dafür geschrieben und die scheint - laut ersten Tests - auch zu funktionieren.
Klammern usw. kann sie zwar nich, aber das brauch ich auch erst ma nich. *G*

@Frog
Drittkomponenten versuche ich so weit es geht zu meiden, weil grade bei so kleineren Sachen wie dem hier, möchte ich schon gerne selbst irgendwie die Hand darüber behalten was da so passiert und was nicht.
Alleine schon im Sinne der Fehlerbehebung.
(Sprich: entweder mit Borland-Hausmitteln realisieren oder halt selber programmieren).

Ausserdem war/is das ma ne ganz nette Übung, wenn man sowas in der Art vorher noch nich gemacht hat, aber trotzdem Danke! :)

SimStar001 25. Mär 2009 10:27

Re: Einfach mathe-Formeln in Delphi berechnen lassen
 
wie wärs damit:

Delphi-Quellcode:
function GetFunktionsWert(Funktion : string;Variable : string; FunktionsWert : extended) : extended;
var position_zeichen : integer;
    text2, text3, tex6 : string;
begin
  Funktion := trim(Funktion);
  text2 := copy(Funktion,1,2);
  text3 := copy(Funktion,1,3);
  text6 := copy(Funktion,1,6);

  if pos('+',Funktion) > 0 then
    begin
    result := GetFunktionsWert(copy(Funktion,1,pos('+',Funktion) - 1) + GetFunktionsWert(copy(Funktion,pos('+',Funktion) + 1,length(Funktion));
    exit;
    end;
 
  if pos('-',Funktion) > 0 then
    begin
    result := GetFunktionsWert(copy(Funktion,1,pos('-',Funktion) - 1) - GetFunktionsWert(copy(Funktion,pos('-',Funktion) + 1,length(Funktion));
    exit;
    end;

  if pos('*',Funktion) > 0 then
    begin
    result := GetFunktionsWert(copy(Funktion,1,pos('*',Funktion) - 1) * GetFunktionsWert(copy(Funktion,pos('*',Funktion) + 1,length(Funktion));
    exit;
    end;

  if pos('/',Funktion) > 0 then
    begin
    result := GetFunktionsWert(copy(Funktion,1,pos('/',Funktion) - 1) / GetFunktionsWert(copy(Funktion,pos('/',Funktion) + 1,length(Funktion));
    exit;
    end;

  if text3 = 'sin' then
    begin
    result := sin(GetFunktionsWert(copy(Funktion,4,length(Funktion)));
    exit;
    end;

  if Funktion = Variable then
    result := FunktionsWert
      else
        result := strtofloat(Funktion);

end;

Diese Funktion, sehr viel Komplexer verwende ich in meinem Funktionsplotter. DU kannst hier noch alle möglichen Sachen einbinden, Klammern usw.. Musst halt nur alles entgegen den Rechenregeln Punkt vor STrich usw. schreiben, da die funktion rekursiv ist.

fall du ne komplette fertige DLL haben möchtest, kannst dich bei mir einfach per Mail melden!

LG Marco

TheFrog 25. Mär 2009 10:46

Re: Einfach mathe-Formeln in Delphi berechnen lassen
 
Hallo Patrick,

wenn Du keine Drittkomponenten verwenden willst, dann wäre folgender Algorithmus vielleicht ganz interessant:

umgekehrte polnische Notation

Damit wäre auch die Klammersetzung erschlagen.

Dazu sollte es sicher irgendwelche Beispiel-Implementierungen geben.

Hans

guidok 25. Mär 2009 12:37

Re: Einfach mathe-Formeln in Delphi berechnen lassen
 
Zitat:

Zitat von TheFrog
Hallo Patrick,

wenn Du keine Drittkomponenten verwenden willst, dann wäre folgender Algorithmus vielleicht ganz interessant:

umgekehrte polnische Notation

Damit wäre auch die Klammersetzung erschlagen.

Dazu sollte es sicher irgendwelche Beispiel-Implementierungen geben.

Hans

Das halte ich für eine gute Idee!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:33 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