![]() |
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:
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.
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; Aber das klappt nicht :( Das Programm hängt sich auf, als ob es in einer Endlosschleife hängt... Was habe ich falsch gemacht? |
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:
feddich.
if x >= 0 then begin
... end was machst du mit -> Zitat:
evtl. kommt es ja auch dort zu einem fehler? es ist ja als string deklariert. hast du dort vielleicht ein strtoint() o.ä. vergessen? |
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. |
Delphi-Quellcode:
Ohne try-except oder sonst irgendwelchen Verrenkungen. :roll:
while ... do
begin if x <= 0 then continue; Rechne(...); x := x +0.02; end; |
@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? |
So habe ich das verstanden. Du hast doch gesagt, dass die Funktion für Werte kleiner Null nicht definiert ist.
|
Ja, das war aber nur eine Beispielfunktion, es sollte ja für jede Funktion gelten.
|
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 15:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz