so hier mein programm... wenn ihr verbesserungsvorschläge habt:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart;
type
TForm1 = class(TForm)
Series1: TFastLineSeries;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
TChart: TChart;
Button4: TButton;
Button5: TButton;
Series2: TFastLineSeries;
Series3: TFastLineSeries;
Series4: TFastLineSeries;
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure showx(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure links(Sender: TObject);
function XtoY(x: real): real;
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
e,b: boolean;
links,rechts,x,y,x0: real;
xlinks,ylinks,xrechts,yrechts : real;
implementation
{$R *.dfm}
// Y aus X berechnen
function TForm1.XtoY(x: real): real;
var a,b,c,d : real;
begin
a:=StrToFloat (Edit1.text);
b:=StrToFloat (Edit2.text);
c:=StrToFloat (Edit3.text);
d:=StrToFloat (Edit4.text);
result:=(a*x*x*x)+(b*x*x)+(c*x)+d;
end;
// Programm beenden
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;
// Graph zeichnen
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,d :real;
i: integer;
begin
a:=StrToFloat (Edit1.text);
b:=StrToFloat (Edit2.text);
c:=StrToFloat (Edit3.text);
d:=StrToFloat (Edit4.text);
i:=0;
series1.clear;
while i<=12000 do
begin
x:=(i-6000)/1000;
y:=(a*x*x*x)+(b*x*x)+(c*x)+d;
series1.addxy(x,y);
i:=i+1;
end;
label4.Visible:=true;
edit5.Visible:=true;
e:=false;
end;
// Zurücksetzen
procedure TForm1.Button2Click(Sender: TObject);
begin
series1.clear;
series2.clear;
series3.Clear;
series4.Clear;
Edit1.text:='3';
Edit2.text:='4';
Edit3.text:='-3';
Edit4.text:='-1';
label4.Visible:=false;
label5.Visible:=false;
label6.Visible:=false;
label7.Visible:=false;
label8.Visible:=false;
edit5.Visible:=false;
edit6.Visible:=false;
edit7.Visible:=false;
edit8.Visible:=false;
edit9.Visible:=false;
button4.Visible:=false;
button5.Visible:=false;
e:=true;
end;
// x bei Mausbewegung anzeigen
procedure TForm1.showx(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
x1: real;
xstr: string;
begin
x1:=round(-(412-x)/60.5*100);
xstr:=FloatToStr(x1/100);
Edit5.text:=xstr;
end;
// Grenzen auswählen
procedure TForm1.links(Sender: TObject);
begin
if e=false then
begin
if b=true then
begin
label5.visible:=true;
edit6.visible:=true;
edit6.Text:=edit5.Text;
b:=false;
end
else
begin
label6.visible:=true;
edit9.Visible:=true;
edit9.Text:=edit5.Text;
xlinks:=StrToFloat(edit6.text);
xrechts:=StrToFloat(edit9.text);
ylinks:=XtoY(xlinks);
yrechts:=XtoY(xrechts);
if ((yrechts>0) AND (ylinks<0)) OR ((yrechts<0) AND (ylinks>0)) then
begin
button4.Visible:=true;
button4.Enabled:=true;
end
else
begin
button4.Visible:=true;
button4.Enabled:=false;
end;
b:=true;
end;
end;
end;
// "Berechnen"
procedure TForm1.Button4Click(Sender: TObject);
begin
button4.enabled:=false;
e:=true;
label7.Visible:=true;
edit7.Visible:=true;
button5.Visible:=true;
series2.addxy(xlinks,10);
series2.addxy(xlinks,-10);
series3.addxy(xrechts,10);
series3.addxy(xrechts,-10);
series4.addxy(xlinks,ylinks);
series4.addxy(xrechts,yrechts);
x0:=xlinks-(ylinks*((xrechts-xlinks)/(yrechts-ylinks)));
edit7.Text:=FloatToStr(round(x0*1000000)/1000000);
end;
// "Weiter"
procedure TForm1.Button5Click(Sender: TObject);
var x_ : real;
begin
x_:=x0;
edit8.Visible:=true;
label8.Visible:=true;
series2.clear;
series3.clear;
series4.clear;
if (XtoY(x0)*XtoY(xlinks))<0 then
begin
series2.addxy(xlinks,10);
series2.addxy(xlinks,-10);
series3.addxy(x0,10);
series3.addxy(x0,-10);
series4.addxy(xlinks,ylinks);
series4.addxy(x0,XtoY(x0));
x0:=xlinks-(ylinks*((x0-xlinks)/(XtoY(x0)-ylinks)));
end
else
begin
series2.addxy(xrechts,10);
series2.addxy(xrechts,-10);
series3.addxy(x0,10);
series3.addxy(x0,-10);
series4.addxy(xrechts,yrechts);
series4.AddXY(x0,XtoY(x0));
x0:=x0-(XtoY(x0)*((xrechts-x0)/(yrechts-XtoY(x0))));
end;
edit7.Text:=FloatToStr(round(x0*1000000)/1000000);
edit8.Text:=FloatToStr(round((x_-x0)*1000000)/1000000);
end;
// main-prog
begin
b:=true;
e:=true;
end.