Einzelnen Beitrag anzeigen

Yahibanez

Registriert seit: 18. Jun 2006
3 Beiträge
 
#1

Gibt es eine Function die Funktionen mit Variablen rechnet?

  Alt 18. Jun 2006, 14:56
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
  Mit Zitat antworten Zitat