Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа по информатике Дещиц В.К. АТПз-...doc
Скачиваний:
8
Добавлен:
15.08.2019
Размер:
1.62 Mб
Скачать

Приложения Приложение 1.

Листинг программы:

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, ExtCtrls, TeEngine, Series, TeeProcs, Chart, jpeg;

type

TForm1 = class(TForm)

Label1: TLabel;

StaticText1: TStaticText;

StaticText2: TStaticText;

StaticText3: TStaticText;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Button1: TButton;

Button2: TButton;

Chart1: TChart;

Series1: TBarSeries;

Chart2: TChart;

Button4: TButton;

Series2: TLineSeries;

Image1: TImage;

Edit4: TEdit;

StaticText4: TStaticText;

Memo1: TMemo;

Memo2: TMemo;

Image2: TImage;

Edit5: TEdit;

Label2: TLabel;

Label3: TLabel;

Edit6: TEdit;

StaticText5: TStaticText;

Button3: TButton;

Label4: TLabel;

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

j,n:Integer;

a,b,h,s,M,Int,x,dx,e,p:real;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);

begin

close

end;

procedure TForm1.Button1Click(Sender: TObject);

function f(x:real):real;

begin

f:=sqrt(x)+sqr(ln(x))+x*x*x-exp(1/10*(ln(x)))+1;

end;

begin

Series1.Clear;

M:=1.136;//Максимальное значение модуля 4 производной

//считывание значений a, b, n

a:=StrToFloat(Edit1.Text);

b:=StrToFloat(Edit2.Text);

n:=StrToInt(Edit3.Text);

//Проверка введенных данных

if (b < a) then begin

MessageBox(Application.Handle,'Неверно заданы границы вычислений',

'Ошибка!',mb_IconError);

exit

end;

h:=(b-a)/n;

Int:=f(a)+f(b);

Edit4.Text:=FloatToStr(h);//вывод значения приращения

Series1.AddXY(a,Int*h/3); //вывод на график значения интеграла в точке а

for j:=1 to n-1 do begin

x:=a+j*h;

if odd(j)=true then Int:=Int+4*f(x)

else Int:=Int+2*f(x);

Series1.AddXY(x,Int*h/3); //вывод на график значения Int

end;

Int:=Int*h/3;

e:=(b-a)*sqr(h*h)*M/180;

Memo2.Lines.Add('Количество разбиений='+FloatToStrf(n,fffixed,14,0));

Memo2.Lines.Add('По методу Симпсона='+FloatToStrf(Int,fffixed,14,7));

Memo2.Lines.Add('Погрешность='+FloatToStrF(e,fffixed,14,7));

end;

procedure TForm1.Button4Click(Sender: TObject);

function f(x:real):real;

begin

f:=sqr(x)+sqr(ln(x))+x*x*x-exp(1/10*ln(x))+1;

end;

begin

Series2.Clear;

begin

//проверки на корректность заданных значений

if (Edit1.Text = '') or (Edit2.Text = '') or (Edit3.Text = '') then

begin

MessageBox(Application.Handle,'Заданы не все значения',

'Ошибка!',mb_IconError);

exit

end;

memo1.Clear;

//ввод значений для вычисления производной

a:=StrToFloat(Edit1.Text);

b:=StrToFloat(Edit2.Text);

n:=StrToInt(Edit3.Text);

dx:=StrToFloat(Edit6.Text);

h:=(b-a)/n;

if (b < a) then

begin

MessageBox(Application.Handle,'Неверно заданы границы вычислений',

'Ошибка!',mb_IconError);

exit

end;

if ((b-a)<h) then

begin

MessageBox(Application.Handle,'Некорректно задано значение шага вычислений',

'Ошибка!',mb_IconError);

exit

end;

x:=a;

while x<=b+h/2 do begin

p:=(f(x+dx)-f(x))/dx;

//Вывод в таблицу

Memo1.Lines.Add('x='+FloatToStrF(x,fffixed,8,3)+' F''(x)='+FloatToStrF(p,fffixed,14,7));

//Построение графика производной по таблице

Series2.AddXY(x,p);

x:=x+h;

end;

end;

end;

end.

43