Помогите исправить программу
Помогите пожалуйста исправить программу
1.)2 ошибки выделены в коде (floating point division by zero ),но исправить не получается
2.)то,что под Button3-не работает совсем(не ошибок не выводи,ничего.пустота)
Заранее огромное спасибо.
PHP код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Chart, Series, ExtCtrls, math, TeeProcs, TeEngine, TeeFunci;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Button2: TButton;
Edit3: TEdit;
Button3: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
pi=3.1415;
var
Form1: TForm1;
x,max,y:real;
t: tchart;
implementation
{$R *.dfm}
function f(x:real):real;
begin
f:=(x*x)*(sin(power(x,1/3))-3);
end;
function d(x:real):real;
begin
d:=(1/3)*(power(x,4/3))*(cos(power(x,1/3)))+(2*x)*(sin(power(x,1/3))-3);
end;
function d1(x:real):real;
begin
d1:=(-(1/81))*((16*sin(power(x,1/3))*(power(x,5/3))+56*(power(x,4/3))*cos(power(x,1/3))-sin(power(x,1/3))*(power(x,7/3))+12*(power(x,2))*cos(power(x,1/3)))/(power(x,3)));
end;
function f1(x:real):real;
begin
f1:=(-1)-(1*x)-(0.1*x*x)+(1*x*x*x)+(1*x*x*x*x)+(1*x*x*x*x*x);
end;
function f2(t,x:real):real;
begin
f2:=t*sin(t*t+x*t);
end;
procedure TForm1.Button1Click(Sender: TObject);
var n,i:integer;
a,b:real;
e,h,x1,x2,s,s1,p,pr:real;
begin
t.Free;
t:= TChart.Create(Form1);
t.Parent := Form1;
t.AddSeries(TlineSeries.Create(t));
t.AddSeries(TlineSeries.Create(t));
x:=0;
max:=d(x);
while x<=2 do
begin
y:=d(x);
if y>max then max:=y;
x:=x+0.000001;
end;
N:=1;
e:=0.000001;
a:=pi/4;
b:=pi/2;
s:=0;
s1:=0;
for i := 1 to N do
begin
h:=(b-a);
x1:=a+i*h;
x2:=x1-0.5*h;
s:=s+f(x2)*h;
end;
repeat
s:=s1;
s1:=0;
N:=N*2;
h:=h/2;
for i := 1 to N do
begin
x1:=a+i*h;
x2:=x1-0.5*h;
s1:=s1+f(x2)*h;
end;
p:=((h*h*(b-a))/24)*max;
pr:=(s1-s)/(3);
t.Series[0].AddXY(ln(h),ln(abs(pr)),'');
t.Series[1].AddXY(ln(h),ln(abs(p)),''); //floating point division by zero
until abs(p)<e;
edit1.Text:=floattostr(abs(s1));
end;
procedure TForm1.Button2Click(Sender: TObject);
var n,i:integer;
a,b:real;
e,s,s1,h,p,x1,x2,pr:real;
begin
t.Free;
t:= TChart.Create(Form1);
t.Parent := Form1;
t.AddSeries(TlineSeries.Create(t));
t.AddSeries(TlineSeries.Create(t));
a:=pi/4;
b:=pi/2;
N:=1;
e:=0.000001;
s:=0;
s1:=0;
h:=(b-a)/N;
for i := 1 to N do
begin
x1:=a+(i-1)*h;
x2:=a+i*h;
s:=s+((f(x1)+f(x2))*h)/2;
end;
repeat
s:=s1;
s1:=0;
N:=N*2;
h:=(b-a)/N;
for i := 1 to N do
begin
x1:=a+(i-1)*h;
x2:=a+i*h;
s1:=s1+(f(x1)+f(x2))*h*0.5;
end;
pr:=(s1-s)/(3);
p:=((h*h*(b-a))/12)*max;
t.Series[0].AddXY(ln(h),ln(abs(pr)),'');
t.Series[1].AddXY(ln(h),ln(abs(p)),'');//floating point division by zero
until abs(p)<e;
edit2.Text:=floattostr(abs(s1));
end;
procedure TForm1.Button3Click(Sender: TObject);
var i,N:integer;
a,b:real;
e,h,s,s1,p,n2,pr:real;
begin
t.Free;
t:= TChart.Create(Form1);
t.Parent := Form1;
t.AddSeries(TlineSeries.Create(t));
t.AddSeries(TlineSeries.Create(t));
x:=0;
max:=d1(x);
while x<=2 do
begin
y:=d1(x);
if y>max then max:=y;
x:=x+0.000001;
end;
N:=2;
e:=0.000001;
a:=pi/4;
b:=pi/2;
h:=(b-a)/N;
for i:=1 to trunc(n) do
s:=s+((f(a+((2*i)-2)*h)+4*f(a+((2*i)-1)*h)+f(a+(2*i)*h))*h)/3;
repeat
h:=(b-a)/n;
n2:=n/2;
s:=s1;
s1:=0;
for i:=1 to (n div 2) do
s1:=s1+((f(a+((2*i)-2)*h)+4*f(a+((2*i)-1)*h)+f(a+(2*i)*h))*h)/3;
n:=n*2;
pr:=(s1-s)/(15);
p:=((h*h*h*h*(b-a))/180)*max;
t.Series[0].AddXY(ln(h),ln(abs(pr)),'');
t.Series[1].AddXY(ln(h),ln(abs(p)),'');
until abs(p)<e;
edit3.Text:=floattostr(abs(s1));
end;
end.
|