Aloha leutz!
Ich wollte fragen ob es in Delphi eine Function gibt, der eine Funktion MIT Variablen (also z.B: 4x^3+3x^2+2x+1 o.ä.) ausrechnet.
Hab die Delphi-Hilfe durchforstet bis zum abwinken, aber leider nichts passendes gefunden... vllt weil ich nicht die richtigen Stichwörter benutzt habe?
Naja, jedenfalls habe ich nichts gefunden. Habe auch hier im Forum nachgeguckt ob es evtl schon einen passenden Eintrag gibt, aber leider auch keinen gefunden...
Naja, trotzdem halt immer noch die Frage ob es so eine Funktion gibt (wobei ich das ehrlich gesagt bezweifle).
Da ich diese Funktion aber relativ dringend brauche, hab ich versucht selber eine solche Funktion zu schreiben.
Sie funktioniert auch, allerdings nur wenn Variablen vor jeder Strich-Rechnung vorkommen (d.h. 20+x z.B. wird falsch ausgerechnet.).
Auch Klammern und Brüche kann sie noch nicht berücksichtigen... hat jemand einen idee wie ich z.B. eine zweite Funktion für die Klammern integrieren könnten und wie die auszusehen hat?
hier meine bisherige Funktion:
Delphi-Quellcode:
function TForm1.formel_extract_use(const formel:String; x:real):real;
var
klammern,next_strich,x_potenz,x_multiplikator,i,e:integer;
ergebnis,temp,temp2: real;
without_x : boolean;
klammer_formel: string;
ohne_klammer: string;
begin
if not (formel[length(formel)] = '.') then formel := formel + '.';
x_potenz := 0;
x_multiplikator := 0;
ergebnis := 0;
next_strich := 0;
klammern := 0;
for i := 1 to length(formel) do
begin
if (formel[i] = '+') or (formel[i] = '-') or (formel[i] = '.') then
begin
x_potenz := 0;
if (formel[i-2] = '^') then
begin
x_potenz := StrToInt(formel[i-1 - klammern]);
if not (i - 4 - klammern = next_strich) then
begin
x_multiplikator := 0;
for e := next_strich + 1 to i - 4 - klammern do
begin
x_multiplikator := x_multiplikator * 10;
x_multiplikator := x_multiplikator + (StrToInt(formel[e]));
end;
end;
end
else if (formel[i-1 - klammern] = 'x') then
begin
if not (i - 2 - klammern= next_strich) then
begin
x_multiplikator := 0;
for e := next_strich + 1 - klammern to i - 2 - klammern do
begin
x_multiplikator := x_multiplikator * 10;
x_multiplikator := x_multiplikator + (StrToInt(formel[e]));
end;
end;
end
else
begin
x_multiplikator := 0;
without_x := true;
temp := 0;
for e := next_strich + 1 to i - 1 - klammern do
begin
temp := temp * 10;
temp := temp + (StrToInt(formel[e]));
end;
end;
if not without_x then temp := x;
temp2 := 1;
if not (x_potenz = 0) then for e := 1 to x_potenz - 1 do
begin
temp2 := temp2 + 1;
temp := temp * x;
end;
if (x_multiplikator = 0) then x_multiplikator := 1;
if (next_strich = 0) then ergebnis := x_multiplikator*temp
else if (formel[next_strich] = '+') then ergebnis := ergebnis + x_multiplikator*temp
else if (formel[next_strich] = '-') then ergebnis := ergebnis - x_multiplikator*temp;
next_strich := i;
end
end;
formel_extract_use := ergebnis;
end;
die Formel wird über ein TEdit als String verwendet, X ebenfalls.
Dem Formel-String wird zuvor noch ein '.' hintendran gesetzt, damit die Funktion den letzten Teil der Formel auch noch auswertet.
Wäre schön wenn mir jemand helfen könnte.
MFG Yahibanez