_Azazel_ » 17 ноя 2010, 14:47
Согласно постановке задачи, требуется в Delphi посчитать значение определенного интеграла методом Симпсона,прямоугольников и трапеций, а значение и номер каждой итерации вывести в StringGrid.
Вот программа.
Код: Выделить всё
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Buttons, ExtCtrls;
type
TForm2 = class(TForm)
RadioGroup1: TRadioGroup;
Edit1: TEdit;
Label1: TLabel;
StringGrid1: TStringGrid;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
var
c,f, x, y, a, b, y2, fh,K,s,s1,fa,fb: Extended;
pryam, trapec: Extended;
shag,i:Extended;
n:integer;
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
a:=2;
b:=3;
pryam:=0;
n:=strtoint(Edit1.text);
x:=a;
shag:=(y-x)/n;
i:=0;
while (x<b) do
begin
pryam:=pryam+shag*(x*(sqrt(1+3*sqr(x))));
x:=x+shag;
i:=i+1;
end;
end;
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
a:=2;
b:=3;
trapec:=0;
n:=strtoint(Edit1.text);
x:=a;
shag:=(y-x)/n;
f:=x*(sqrt(1+3*sqr(x)));
fh:=(x+shag)*(sqrt(1+3*sqr(x+shag)));
i:=0;
while (x<b) do
begin
trapec:=trapec+shag*(f+(fh/2));
x:=x+shag;
i:=i+1;
end;
end;
procedure TForm2.BitBtn3Click(Sender: TObject);
var
m:integer;
j:integer;
begin
a:=2;
b:=3;
trapec:=0;
n:=strtoint(Edit1.text);
c:=1;
s:=0;
f:=x*(sqrt(1+3*sqr(x)));
fa:=a*(sqrt(1+3*sqr(a)));
fb:=b*(sqrt(1+3*sqr(b)));
shag:=(b-a)/n;
m:=n-1;
for j:=1 to m do
begin
x:=x+shag;
s:=s+(3+c)*f;
c:=-c;
end;
s1:=fa+fb;
s:=shag*(s1+s)/3;
end;
end.
При запуске почему-то происходит переполнение. Помогите пожалуйста с этим разобраться.(И что сделать со StringGrid тоже)
Согласно постановке задачи, требуется в Delphi посчитать значение определенного интеграла методом Симпсона,прямоугольников и трапеций, а значение и номер каждой итерации вывести в StringGrid.
Вот программа.
[code]unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Buttons, ExtCtrls;
type
TForm2 = class(TForm)
RadioGroup1: TRadioGroup;
Edit1: TEdit;
Label1: TLabel;
StringGrid1: TStringGrid;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
var
c,f, x, y, a, b, y2, fh,K,s,s1,fa,fb: Extended;
pryam, trapec: Extended;
shag,i:Extended;
n:integer;
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
a:=2;
b:=3;
pryam:=0;
n:=strtoint(Edit1.text);
x:=a;
shag:=(y-x)/n;
i:=0;
while (x<b) do
begin
pryam:=pryam+shag*(x*(sqrt(1+3*sqr(x))));
x:=x+shag;
i:=i+1;
end;
end;
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
a:=2;
b:=3;
trapec:=0;
n:=strtoint(Edit1.text);
x:=a;
shag:=(y-x)/n;
f:=x*(sqrt(1+3*sqr(x)));
fh:=(x+shag)*(sqrt(1+3*sqr(x+shag)));
i:=0;
while (x<b) do
begin
trapec:=trapec+shag*(f+(fh/2));
x:=x+shag;
i:=i+1;
end;
end;
procedure TForm2.BitBtn3Click(Sender: TObject);
var
m:integer;
j:integer;
begin
a:=2;
b:=3;
trapec:=0;
n:=strtoint(Edit1.text);
c:=1;
s:=0;
f:=x*(sqrt(1+3*sqr(x)));
fa:=a*(sqrt(1+3*sqr(a)));
fb:=b*(sqrt(1+3*sqr(b)));
shag:=(b-a)/n;
m:=n-1;
for j:=1 to m do
begin
x:=x+shag;
s:=s+(3+c)*f;
c:=-c;
end;
s1:=fa+fb;
s:=shag*(s1+s)/3;
end;
end.[/code]
При запуске почему-то происходит переполнение. Помогите пожалуйста с этим разобраться.(И что сделать со StringGrid тоже)