Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Probleme beim erstellen eines Strings (https://www.delphipraxis.net/5235-probleme-beim-erstellen-eines-strings.html)

Taralos 28. Mai 2003 19:45


Probleme beim erstellen eines Strings
 
Hallo, habe mal wieder ein ähnliches Problem :)

Ich hatte mir mal einen Parser runtergeladen der mathematische Formeln umwandelt und berechnet.

Jetzt stehe ich vor folgendem Problem:
Ich lasse x bei -5 starten und habe die Funktion x^(0,5)
Diese Funktion ist ja aber erst für x >= 0 definiert. Wenn x kleiner ist kann er es nicht berechnen und es kommt eine Fehlermeldung.
Ich wollte es jetzt so machen, dass wenn es nicht funktioniert er x um 0.02 erhöht und das gleiche nochmal durchzieht, und zwar solange bis es schließlich klappt.

Dazu habe ich folgenden Quelltext geschrieben, der aber leider nicht funktioniert:
Code:
var s,t :string;
    x  : real;
    kommastellen : integer;
begin
x := -5;
y := 1;
z := 1;
Kommastellen := 2;
s := edit1.text;
While True do
          Begin
            Try
            t := Rechne(Kommastellen, s,x,y,z);
             Break;
            Except x := x +0.02; End;
          End;
Panel1.caption := t;
end;
Es soll also zuerst die Formel ausgelesen werden. Über die Funktion "rechne" wird diese umgewandelt und mit x=-5 berechnet. Da das ja nicht geht soll er x dann um 0.02 erhöhen und es wieder probieren. So lange bis es klappt. Danach soll er dann das erste Ergebnis ausgeben, also 0.
Aber das klappt nicht :(
Das Programm hängt sich auf, als ob es in einer Endlosschleife hängt...
Was habe ich falsch gemacht?

chris 28. Mai 2003 20:38

hi,

wenn du doch weist das es probleme gibt wenn x < 0, dann kannst du das doch direkt abfragen, wozu dann eine unnütze schleife?

Delphi-Quellcode:
if x >= 0 then begin
...
end
feddich.

was machst du mit ->
Zitat:

s := edit1.text;
?

evtl. kommt es ja auch dort zu einem fehler? es ist ja als string deklariert. hast du dort vielleicht ein strtoint() o.ä. vergessen?

Taralos 28. Mai 2003 21:04

Das ist ja nur ein Beispiel gewesen. Für mein Programm muss x immer von -5 bis 5 laufen.
Deshalb suche ich ja einen Weg es bei diesen speziellen Fällen auszuschließen, dass negative Werte verarbeitet werden.
Mit s := edit1.text; lese ich die mathematische Formel aus einem Edit-Feld aus und lasse diesen String durch die Funktion "rechne" verarbeiten. Das Ergebnis ist dann auch noch ein String.

Aber wie gesagt, ich finde in meinem Quelltext einfach keinen Fehler.
Wenn ich x am Anfang auf einen positiven Wert setze funktioniert es wunderbar... nur mit negativen Werten nicht.

Luckie 28. Mai 2003 21:07

Delphi-Quellcode:
while ... do
begin
  if x <= 0 then
    continue;
  Rechne(...);
  x := x +0.02;
end;
Ohne try-except oder sonst irgendwelchen Verrenkungen. :roll:

Taralos 28. Mai 2003 21:46

@Luckie: Aber was ist wenn ich nicht x^0,5 rechnen würde, sondern x^2
Dann würde dein Weg ja alle negativen Werte aussparen oder irre ich mich?

Luckie 28. Mai 2003 21:47

So habe ich das verstanden. Du hast doch gesagt, dass die Funktion für Werte kleiner Null nicht definiert ist.

Taralos 29. Mai 2003 16:02

Ja, das war aber nur eine Beispielfunktion, es sollte ja für jede Funktion gelten.

chris 29. Mai 2003 17:57

hi nochmal,

ich 'glaube' jetzt habe ich geschnallt was du meinst.

versuche es mal so:

Delphi-Quellcode:
var
  t: string;
  i: integer;

begin
  panel1.Caption := '';
  for i := -5 to 5 do
  try
    t := rechne(2, edit1.text, i, 1, 1);
    panel1.caption := panel1.caption + ' ' + t
  except
  end
end;


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