AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Gibt es eine Function die Funktionen mit Variablen rechnet?
Thema durchsuchen
Ansicht
Themen-Optionen

Gibt es eine Function die Funktionen mit Variablen rechnet?

Ein Thema von Yahibanez · begonnen am 18. Jun 2006 · letzter Beitrag vom 18. Jun 2006
Antwort Antwort
Yahibanez

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

Gibt es eine Function die Funktionen mit Variablen rechnet?

  Alt 18. Jun 2006, 13: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
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Gibt es eine Function die Funktionen mit Variablen rechn

  Alt 18. Jun 2006, 14:04
[dp]Mathe+Parser[/dp]
Markus Kinzler
  Mit Zitat antworten Zitat
Yahibanez

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

Re: Gibt es eine Function die Funktionen mit Variablen rechn

  Alt 18. Jun 2006, 14:11
D'oh...

hatte wirklich die falschen Suchwörter 'damn'.
Dankeschön )
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:16 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