Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет по УИРС.doc
Скачиваний:
6
Добавлен:
19.03.2015
Размер:
373.25 Кб
Скачать

Приложение

Исходный код программы:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, ExtCtrls;

type

TForm1 = class(TForm)

GroupBox1: TGroupBox;

ComboBox1: TComboBox;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

GroupBox2: TGroupBox;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Edit4: TEdit;

Edit5: TEdit;

Edit6: TEdit;

Label9: TLabel;

Edit7: TEdit;

Edit8: TEdit;

Label10: TLabel;

Edit9: TEdit;

Label5: TLabel;

Edit10: TEdit;

Label11: TLabel;

Image1: TImage;

BitBtn1: TBitBtn;

procedure Inicialization;

procedure BitBtn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

Dy,Dz,R0,Rmax:integer;

implementation

{$R *.dfm}

procedure TForm1.Inicialization;

begin

Dy:=StrToInt(Edit1.Text);

Dz:=StrToInt(Edit2.Text);

R0:=StrToInt(Edit3.Text);

Rmax:=StrToInt(ComboBox1.Text);

end;

function Pow(chislo, stepen:real):real;

var per:real;

b:integer;

a:string;

begin

Per:= Abs(chislo);

a:=FloatToStr(stepen);

b:=length(a);

a:=a[length(a)];

b:=StrToInt(a);

b:=b mod 2;

if (chislo=0) and (stepen<>0) then Pow:=0

else if (chislo<0) and (b=1)

then Pow:=(-1)*Exp((stepen)*Ln(per))

else Pow:=Exp((stepen)*Ln(per));

end;

function gamma(z:real):real;

var i,fact:integer;

tmp1,tmp2:real;

begin

if Frac(z)=0

then begin

fact:= 1;

for i:=2 to round(z) do fact:= fact * i;

gamma:=fact;

end

else begin

tmp1:= sqrt(2*PI/z);

tmp2:= z + 1.0/(12 * z - 1.0/(10*z));

tmp2:= pow(tmp2/Exp(1),z);

gamma:= tmp1*tmp2;

end;

end;

function f(t,k:real):real;

var i,n:integer;

h,r,rez:real;

x,y,l:real;

begin

i:=0; h:=Frac(k);

if k > int(k) then n:=Round(int(k))+1

else n:=Round(int(k));

rez:=1;

for i:=1 to n do begin

r:=i-1+h;

rez:=rez+pow(-1,int(r)+1)*((pow(t/2,2*r))/pow(gamma(r),2));

end;

f:=Exp(-t)*rez;

end;

function Simpson(t1,t2,k: real): real;

var

h,s0,s,eps: real;

n,i:integer;

begin

eps:=0.00001;

n:=100;

s:=0;

repeat

h:=(t2-t1)/n; s0:=s;

s:=f(t1,k)+f(t2,k);

for i:=1 to n-1 do

s:=s+2*(1+i mod 2)*f(t1+i*h,k);

s:=s*h/3;

until abs(s-s0) <= eps;

Simpson:=s;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

var a1,a2,k,T0,T,Integ,P1_0:real;

begin

Inicialization;

a1:=Dy/Dz;

a2:=Dy/R0;

k:=abs((1-a1*a1)/(1+a1*a1+2*a2*a2));

T0:=StrToFloat(Edit8.Text);

T:=(1+a1*a1+2*a2*a2)/(4*Dy*Dy)*Rmax*Rmax;

Integ:=Simpson(T0,T,k);

P1_0:=(4*Dy*Dz*R0*R0)/((Dy*Dy+Dz*Dz)*R0*R0+2*Dy*Dy*Dz*Dz);

P1_0:=P1_0*Integ;

Edit4.Text:=FloatToStr(a1);

Edit5.Text:=FloatToStr(a2);

Edit6.Text:=FloatToStr(k);

Edit7.Text:=FloatToStr(T);

Edit9.Text:=FloatToStr(Integ);

Edit10.Text:=FloatToStr(P1_0);

end;

end.

Приложение 1

function gamma(z:real):real;

var i,fact:integer;

tmp1,tmp2:real;

begin

if Frac(z)=0

then begin

fact:= 1;

for i:=2 to round(z) do fact:= fact * i;

gamma:=fact;

end

else begin

tmp1:= sqrt(2*PI/z);

tmp2:= z + 1.0/(12 * z - 1.0/(10*z));

tmp2:= pow(tmp2/Exp(1),z);

gamma:= tmp1*tmp2;

end;

end;

Приложение 2

function Simpson(t1,t2,k: real): real;

var

h,s0,s,eps: real;

n,i:integer;

begin

eps:=0.00001;

n:=100;

s:=0;

repeat

h:=(t2-t1)/n; s0:=s;

s:=f(t1,k)+f(t2,k);

for i:=1 to n-1 do

s:=s+2*(1+i mod 2)*f(t1+i*h,k);

s:=s*h/3;

until abs(s-s0) <= eps;

Simpson:=s;

end;