Registriert seit: 9. Feb 2005
Ort: Prenzlau
9 Beiträge
|
Re: Sekantenverfahren programmieren
9. Feb 2005, 15:27
Zur Delphi Version: Delphi 7.0 Personal
Zur Frage:
Wir wollten es kurz und schmerzlos fragen.
Zu unserem Zustand:
Wir haben bereits die Funktion erfolgreich eingelesen, zwei Punkte berechnet und die Sekante dazwischen zum Schnittpunkt mit der x-Achse gebracht. (Im Quelltext bis zur While-Schleife).
Wir scheitern an der Berechnung der Nullstelle (Ab while-Schleife.)
Delphi-Quellcode:
var
Form1: TForm1;
var a,s,c,x,y,o,p : real;
n,f,z:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
f:=f+3;
stringgrid1.Cells[f-1,0]:=edit2.text;
stringgrid1.cells[f,0]:=edit1.text;
stringgrid1.cells[f-2,0]:=edit3.text;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
f:=-1;
n:=strtoint(edit1.Text);
stringgrid1.colcount:=3*n+3;
label5.Visible:=false;
edit4.Visible:=false;
edit5.Visible:=false;
label6.Visible:=false;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
label5.Visible:=true;
edit4.Visible:=true;
edit5.Visible:=true;
label6.Visible:=true;
end;
procedure TForm1.Button4Click(Sender: TObject);
var i,g: integer;
begin
a:=strtofloat(edit4.text);
z:=strtoint(edit5.text);
edit4.Visible:=false;
label5.visible:=false;
edit5.Visible:=false;
label6.Visible:=false;
g:=0;
y:=0;
o:=0;
x:=0;
for i:= 1 to n+1 do
begin
g:=g+3;
if stringgrid1.cells[g-3,0]<>'-' then
begin
o:=power(z,(strtoint(stringgrid1.cells[g-1,0])))*(strtoint(stringgrid1.cells[g-2,0]));
y:=power(a,(strtoint(stringgrid1.cells[g-1,0])))*(strtoint(stringgrid1.cells[g-2,0]));
end
else
begin
o:=-power(z,(strtoint(stringgrid1.cells[g-1,0])))*(strtoint(stringgrid1.cells[g-2,0]));
y:=-power(a,(strtoint(stringgrid1.cells[g-1,0])))*(strtoint(stringgrid1.cells[g-2,0]));
end;
p:=p+o;
x:=x+y;
end;
label7.caption:=floattostr(x);
label8.caption:=floattostr(p);
while abs(x)>1/10 do
begin
s:=z-((p*a-p*z)/(x-p));
a:=s;
g:=0;
y:=0;
for i:= 1 to n-1 do
begin
g:=g+3;
if stringgrid1.cells[g-3,0]<>'-' then
y:=power(a,(strtoint(stringgrid1.cells[g-1,0])))*(strtoint(stringgrid1.cells[g-2,0]))
else
y:=-power(a,(strtoint(stringgrid1.cells[g-1,0])))*(strtoint(stringgrid1.cells[g-2,0]));
end;
x:=x+y;
showmessage(floattostr(s));
end;
label10.Caption:=floattostr(x);
label9.Caption:=floattostr(s);
end;
end.
Helft uns , wir sehen nicht mehr durch.
|
|
Zitat
|