Текст программы и результаты выполнения

Ниже представлен текст модуля unit1.pas Delphi-приложения:

unit Unit1;

interface

uses

Classes, SysUtils, Forms, Controls, Graphics,

Dialogs, Grids, StdCtrls,

TeEngine, Series, ExtCtrls, TeeProcs, Chart,

jpeg;

type

{ TForm1 }

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Chart1: TChart;

Chart1LineSeries1: TLineSeries;

Edit1: TEdit;

Edit10: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Edit6: TEdit;

Edit7: TEdit;

Edit8: TEdit;

Edit9: TEdit;

Label1: TLabel;

Label12: TLabel;

Label13: TLabel;

Label14: TLabel;

Label15: TLabel;

Label16: TLabel;

Label17: TLabel;

Label18: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label9: TLabel;

strngrd1: TStringGrid;

lbl1: TLabel;

edt1: TEdit;

LineSeries1Series1: TLineSeries;

LineSeries1Series2: TLineSeries;

LineSeries1Series3: TLineSeries;

img1: TImage;

img2: TImage;

txt1: TStaticText;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ private declarations }

public

{ public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Button2Click(Sender: TObject);

begin

Edit1.Clear;

Edit2.Clear;

Edit3.Clear;

Edit4.Clear;

Chart1LineSeries1.Clear;

end;

procedure TForm1.Button1Click(Sender: TObject);

Var

x, Ak, a, Da, Dx, Eps, d, c, Int: Extended;

n, i, j, Km, Err, e: Integer;

Procedure Tab(B, xn, dx, an, ak, da: Real; N: integer; var Err, e: integer); //Процедура табулирования функции

Var I, J: integer;

X, A: Real;

Function F(x, a, b:Real): Real; //Функция

Begin

if x > 0 then F:=x*(2*a+b)-exp(a)

else F:=(b*sqr(sin(a*x))*sin(a*x))/(sqrt(2*3.14)-b);

End;

Begin

a:=An;

j:=1;

strngrd1.ColCount:=n;

While a<=Ak do

Begin

x:=Xn;

strngrd1.Cells[0,j]:=FloatToStr(a);

strngrd1.RowCount:=j+1;

For i:=1 to n do

Begin

if j=1 then strngrd1.Cells[i,0]:=FloatToStrf(x, Ffexponent, 4, 2);

If (x > 0) or (b <> sqrt(2*3.14)) then

strngrd1.Cells[i,j]:=FloatToStrF(F(StrToFloat(strngrd1.Cells[i,0]), A, B), Ffexponent, 4, 2)

else

begin

strngrd1.Cells[i,j]:='Err';

end;

x:=x+dx;

End;

a:=a+da;

j:=j+1;

End;

End;

Procedure ProcErrorHappend(Er: Integer); //Процедура обработки ошибок

begin

case Er of

1: ShowMessage('Интеграл не найден за Km итераций');

2: ShowMessage('Погрешность Eps должна быть < 1');

4: ShowMessage('Знаменатель равен нулю')

end;

end;

procedure PrintChart(M: Integer); //Ïðîöåäóðà âûâîäà ãðàôèêà íà ýêðàí

var i, j, rc, e:integer;

begin

j:=4;

if (strngrd1.RowCount < j) then rc:=strngrd1.RowCount

else rc:=j;

j:=0;

while j < rc do

begin

Chart1.Series[j].Clear;

for i:=1 to M do

begin

if strngrd1.Cells[i,1] <> 'Err' Then

begin

if e=i then begin Chart1.Series[j].AddNull(); e:=0; end;

Chart1.Series[j].AddXY(StrToFloat(strngrd1.Cells[i,0]), StrToFloat(strngrd1.Cells[i,j+1]))

end

else

Chart1.Series[j].AddNull();

end;

j:=j+1;

end;

end;

Procedure Integral(var A, B, Eps, int: Extended; var Km, Er: Integer); //Процедура нахождения интеграла

var x, w, h, i1, i2: Real;

i, j, k: Integer;

function F4(x: Real): Real; //Интеграл

begin

F4:=exp(ln(abs(sin(exp(ln(abs(3*x))*(-1/3)))))*(-1));

end;

begin

j:=1;

Er:=1;

i1:=0;

k:=4;

while j<=Km do

begin

x:=A;

h:=((B-A)/k);

i2:=F4(A);

i:=1;

repeat

x:=x+h;

i2:=i2+F4(x); i:=i+1;

until i >= (k-1);

i2:=i2*h;

w:=abs(i1-i2);

if w >= Eps then

begin

i1:=i2; k:=2*k;

end;

if w < Eps then

begin

j:=Km;

Er:=0;

Int:=i2;

Edit5.text:=FloatToStrF(i2, fFExponent, 2, 2);

end;

j:=j+1;

end;

end;

begin

Eps:=StrToFloat(Edit8.text);

c:=StrToFloat(Edit6.text);

d:=StrToFloat(Edit7.text);

Km:=StrToInt(edt1.text);

Eps:=StrToFloat(Edit8.Text);

if Eps >= 1 then

begin

Err:=2;

ProcErrorHappend(Err);

Exit;

end;

BFind(c, d, Eps, Int, Km, Err); //Нахождение интеграла

if Err>0 then

begin

ProcErrorHappend(Err);

exit;

end;

//Ïподготовка к табулированию

Ak:=StrToFloat(Edit2.Text);

a:=StrToFloat(Edit1.text);

Da:=StrToFloat(Edit3.text);

Dx:=StrToFloat(Edit9.text);

x:=StrToFloat(Edit4.text);

n:=StrToInt(Edit10.text);

Tab(Int, x, dx, a, ak, da, n, err, e); //Табулирование функции

if Err <> 0 then

begin

ProcErrorHappend(Err);

exit;

end;

PrintChart(N);

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

Close;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

strngrd1.ColCount:=StrToInt(Edit10.Text)+1;

end;

begin

end.

Пример выполнения программы:

Текст программы и результаты выполнения - student2.ru

6. Набор тестов

Для тестирования правильности работы программы воспользуемся системой Wolfram-Alpha.

Пусть входные данные имеют следующие значения:

C=0,2; D= 0,56; Km=100; Eps=0,001;

An=-3; Ak=3; Da=2;

Xn=-39; Dx=0,05; N=1000;

Наши рекомендации