Hallo zusammen!
Ich habe hier ein Problem! (Wer hätte das gedacht?)
Folgendes:
Ich habe mir vorgenommenm, ein Programm zu schreiben, dass y für die Funktion x hoch 3 - x*6 berechnet, und zwar in 0.1-er Schritten. Das Intervall, von dem die Werte genommen werden, kann man selber eingeben.
Das war auch soweit kein Problem, aber als ich dann eine Vorzeichenanalyse(wann geht die Funktion von - nach + oder umgekehrt) noch zusätzlich mit eingebaut habe, bekam ich zwar Funktionswerte zurück, diese Werte waren zwar von der Anzahl richtig, aber um ca. 1,5 Zahlenwerte verschoben...
Ich hab alles mögliche Versucht, zusätzlicher Timer, sleep, usw... aber der Fehler besteht weiterhin...
Zur Veranschaulichung habe ich ein Bild mit angehängt...
Mein Code:
Delphi-Quellcode:
var
Form1: TForm1;
fx,zahler,k,x,y,z,i,A,B: Extended;
implementation
{$R *.DFM}
procedure Tform1.Graphrechnen;
begin
memo2.lines.text:= '';
a := strtofloat(edit2.text); // Intervallanfangswert = A
b:= strtofloat(edit3.text); // Intervallendungswert = B
x := A;
memo2.Lines.add( 'Berechnung von x für das Intervall '+ floattostr (a) + ' bis ' + floattostr (b));
repeat
fx:=power(x,3) - (6 * x); // Berechnung der Funktion x hoch 3 - x*6
fx:= RoundToPointPosition(fx, 5); // Wert wird gerundet
x := RoundToPointPosition(x, 3); // Wert wird gerundet
VZW; // Vorzeichenwechselanalyse
memo2.lines.add(floattostr (fx) + ' für ' + floattostr(x));
X:= x +(0.1); // x wird um 0,1 vergrößert...
until x > B; // es wird solange die Funktion berechnet, bis x gleich dem Intervallendungswert ist
exit;
end;
procedure Tform1.VZW; // Vorzeichenwechselanalyse
begin
if memo1.lines.text='' then
memo1.lines.add('Berechnung von x für das Intervall '+ floattostr (a) + ' bis ' + floattostr (b));
k := x -0.1; // zur Berechnung wird der vorherige Wert genommen...
y:= power(k,3) - (6 * k);
z:= fx-y; //... um mit der Differenz ausrechnen zu können, ob der Graph im Negativen, bzw. Positiven ist
if z > 0 then //Das nicht bei jedem z > 0 die Schleife ausgefürt wird...
begin
if zahler = 1 then // ...ist ein Schutz eingebaut
exit;
zahler := +1;
memo1.Lines.add('Vorzeichenwechsel +/- bei '+ floattostr(x));
end;
if z < 0 then
begin
if zahler = -1 then
exit;
zahler := -1;
memo1.Lines.add('Vorzeichenwechsel -/+ bei '+ floattostr(x));
end;
end;
function RoundToPointPosition(Number : Extended; PointPos : Byte): Extended;
begin
Result := StrToFloat(FloatToStrF(Number, ffNumber, 10, PointPos));
end;
end.
Ich hoffe ihr könnt mir helfen.
Vielen Dank
[edit=Luckie]Delphi-Tags. Mfg, Luckie[/edit]