AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Probleme beim erstellen eines Strings
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme beim erstellen eines Strings

Ein Thema von Taralos · begonnen am 28. Mai 2003 · letzter Beitrag vom 29. Mai 2003
Antwort Antwort
Taralos

Registriert seit: 28. Mär 2003
18 Beiträge
 
#1

Probleme beim erstellen eines Strings

  Alt 28. Mai 2003, 19:45
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?
  Mit Zitat antworten Zitat
chris

Registriert seit: 24. Mai 2003
Ort: Düsseldorf
196 Beiträge
 
Delphi 2009 Professional
 
#2
  Alt 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?
Chris
D2009.4 | Vista SP2 x32
  Mit Zitat antworten Zitat
Taralos

Registriert seit: 28. Mär 2003
18 Beiträge
 
#3
  Alt 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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4
  Alt 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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Taralos

Registriert seit: 28. Mär 2003
18 Beiträge
 
#5
  Alt 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?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6
  Alt 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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Taralos

Registriert seit: 28. Mär 2003
18 Beiträge
 
#7
  Alt 29. Mai 2003, 16:02
Ja, das war aber nur eine Beispielfunktion, es sollte ja für jede Funktion gelten.
  Mit Zitat antworten Zitat
chris

Registriert seit: 24. Mai 2003
Ort: Düsseldorf
196 Beiträge
 
Delphi 2009 Professional
 
#8
  Alt 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;
Chris
D2009.4 | Vista SP2 x32
  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 15:10 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