Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wertetafel einer beliebigen Funktion (https://www.delphipraxis.net/135361-wertetafel-einer-beliebigen-funktion.html)

Melli012345 9. Jun 2009 19:38


Wertetafel einer beliebigen Funktion
 
Folgende Aufgabe
Die Wertetafel einer beliebigen Funktion soll ausgegeben werden. Zur Wertetafel soll auch die Schrittweite wählbar sein.

Mein Programm funktioniert, wenn meine Funktion z.B. f(x) = 1 oder so heißt.
Aber sobald ich die Variable "x" in das Editfenster eingebe, kommt eine Fehlermeldung "x ist kein gültiger Fließkommawert"...
Bin nun schon seid ner Stunde am rumprobieren...daher sieht mein Quelltext mittlerweile auch bisschen komisch aus und es geht sicher viel einfacher.
Aber das Problem hab ich nicht bewältigt.
Weiß jemand, woran es liegt?

Delphi-Quellcode:
procedure TForm1.WertetafelClick(Sender: TObject);
 var
  x1, x2, x, h, y2: Real;
  x3, y3  : extended;
  y1 : string;
begin
 h := strtofloat(edit2.text);
 x2 := strtofloat(edit4.text);
 x1 := strtofloat(edit3.text);
 x := x1;
 listbox1.Items.add('    x        f(x)    ');
 y1 := edit1.text;
   y2 := strtofloat(y1);
  while x < x2 do
  begin
   x3 := round(x);
   y3 := round(y2);
   listbox1.Items.add(Format('%5.2f',[x3])+ ' ' + Format('%5.2f',[y3]));
   x := x+h;
  end;
end;

end.

dominikkv 9. Jun 2009 19:50

Re: Wertetafel einer beliebigen Funktion
 
Du gehst davon aus, dass der Benutzer in das Edit nur Zahlen eingibt. Er kann aber auch Buchstaben eingeben, und aus Buchstaben kann StrToFloat() keine Zahl machen, darum die Fehlermeldung.
Lösungen:

1) Den Fehler wenn er auftritt abfangen:
Delphi-Quellcode:
try
  h := strtofloat(edit2.text);
  x2 := strtofloat(edit4.text);
  x1 := strtofloat(edit3.text);  
except
  showmessage('Bitte nur Zahlen eingeben!');
end;
Das ist aber nicht empfehlenswert... besser ist:
Delphi-Quellcode:
if not TryStrToFloat(edit2.text, h) then
  showmessage('Bitte nur Zahlen eingeben!');
Und am besten ist dem Benutzer keine Falscheingaben zu erlauben:
Delphi-Quellcode:
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
  if not (key in ['0'..'9', ',', #8]) then
    key := #0;
end;

Namenloser 9. Jun 2009 19:56

Re: Wertetafel einer beliebigen Funktion
 
Zitat:

Zitat von Melli012345
Mein Programm funktioniert, wenn meine Funktion z.B. f(x) = 1 oder so heißt.
Aber sobald ich die Variable "x" in das Editfenster eingebe, kommt eine Fehlermeldung "x ist kein gültiger Fließkommawert"...

FloatToStr nimmt nur eine Zahl entgegen, keine Formeln. Was du brauchst, ist ein Mathe-Parser.

Melli012345 9. Jun 2009 20:01

Re: Wertetafel einer beliebigen Funktion
 
dankeschön für eure Antworten :-)

@NamenLozer: ah, genau^^hatte nämlich gegoogelt, da ist das auch als Lösungsweg angegeben worden..allerdings konnte ich nicht (für mich verständlich) sehen, wie ich den genau einsetze, denn ich hab noch nie damit gearbeitet...kannst du mir da weiterhelfen?

Namenloser 9. Jun 2009 20:24

Re: Wertetafel einer beliebigen Funktion
 
Zitat:

Zitat von Melli012345
wie ich den genau einsetze, denn ich hab noch nie damit gearbeitet...kannst du mir da weiterhelfen?

Es gibt nicht "den" Matheparser - es gibt viele verschiedene, für verschiedene Bedürfnisse. Das reicht dann von einer einzigen recht kurzen Funktion zu riesigen, hochkomplexen Bibliotheken. Für deine Zwecke sollte die eifnachste Variante reichen Aber über Google sollte sich schon was passendes finden lassen.

Ich habe selbst noch nie sowas gebraucht, aber wenn du ne konkrete Frage hast, helfe ich dir gern.

ULIK 10. Jun 2009 04:35

Re: Wertetafel einer beliebigen Funktion
 
Vieleicht hilft das weiter: Tutorial Funktionsparser

Uli


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