Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Трубников / Курсовая работа Дембовская Н.В. 5к. 1гр..docx
Скачиваний:
55
Добавлен:
30.05.2015
Размер:
1.63 Mб
Скачать

Приложение 2.

Текст программы, реализующей метод последовательного перебора.

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, ExtCtrls, jpeg, ComCtrls, TeeProcs, TeEngine, Chart,

Series;

type

TForm1 = class(TForm)

GroupBox1: TGroupBox;

Label1: TLabel;

Image1: TImage;

Label2: TLabel;

Edit1: TEdit;

Label3: TLabel;

Edit2: TEdit;

Label4: TLabel;

Edit3: TEdit;

Label5: TLabel;

Edit4: TEdit;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Button1: TButton;

GroupBox2: TGroupBox;

Memo1: TMemo;

PageControl1: TPageControl;

TabSheet2: TTabSheet;

Chart1: TChart;

Series1: TLineSeries;

Series2: TLineSeries;

Series3: TLineSeries;

Series4: TLineSeries;

Series5: TLineSeries;

Series6: TLineSeries;

procedure Edit4Change(Sender: TObject);

procedure Edit3Change(Sender: TObject);

procedure Edit1Change(Sender: TObject);

procedure Edit2Change(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

a,b,c,d,e,h,j,n,Fmin,Jx,fuct:real; L,i,nn,k,m,x:integer;

u:array[1..1000] of real;

Ju:array[1..1000] of real;

F:array[1..1000] of real;

Kmin:string;

implementation

{$R *.dfm}

procedure TForm1.Edit4Change(Sender: TObject);

begin

if (length(Edit4.Text) = 0) then

begin

label9.Visible:=true;

end

else

begin

label9.Visible:=false;

end;

end; //выводит восклицательный знак если в поле не задано значение

procedure TForm1.Edit3Change(Sender: TObject);

begin

if (length(Edit3.Text) = 0) then

begin

Label8.Visible:=true;

end

else

begin

Label8.Visible:=false;

end;

end; //выводит восклицательный знак если в поле не задано значение

procedure TForm1.Edit1Change(Sender: TObject);

begin

if (Length(Edit1.Text) = 0) or (Length(Edit2.Text) = 0) or (Length(Edit1.Text) = 0) and (Length(Edit2.Text) = 0) then

begin

Label7.Visible:=true;

end

else

begin

Label7.Visible:=false;

end;

end; //выводит восклицательный знак если в поле не задано значение

procedure TForm1.Edit2Change(Sender: TObject);

begin

if (Length(Edit1.Text) = 0) or (Length(Edit2.Text) = 0) or (Length(Edit1.Text) = 0) and (Length(Edit2.Text) = 0) then

begin

Label7.Visible:=true;

end

else

begin

Label7.Visible:=false;

end;

end; //выводит восклицательный знак если в поле не задано значение

procedure TForm1.FormShow(Sender: TObject);

begin

if (Length(Edit1.Text) = 0) or (Length(Edit2.Text) = 0) or (Length(Edit1.Text) = 0) and (Length(Edit2.Text) = 0) then

begin

Label7.Visible:=true;

end

else

begin

Label7.Visible:=false;

end;

if (length(Edit3.Text) = 0) then

begin

Label8.Visible:=true;

end

else

begin

Label8.Visible:=false;

end;

if (length(Edit4.Text) = 0) then

begin

label9.Visible:=true;

end

else

begin

label9.Visible:=false;

end;

end; //выводит восклицательный знак если в поле не задано значение при открытии формы

procedure TForm1.Button1Click(Sender: TObject);

begin

//=========Очистка поля мемо1 и очистка графика=============//

Memo1.Clear;

Form1.Chart1.Series[0].Clear;

Form1.Chart1.Series[1].Clear;

Form1.Chart1.Series[2].Clear;

Form1.Chart1.Series[3].Clear;

Form1.Chart1.Series[4].Clear;

Form1.Chart1.Series[5].Clear;

//==========Проверка на введеные данные в поля=============//

if (Label7.Visible=true) or (Label8.Visible=true) or (Label9.Visible=true) then

begin

MessageBox(handle, 'Извините вы что-то забыли ввести!!', 'Ошибка данных!!', 0);

end

else

begin

//==================Значения с формы======//

// отрезок

a:=StrToFloat(Edit1.Text); // отрезок от а {c формы значение от}

b:=StrToFloat(Edit2.Text); // отрезок до б {с формы значение до}

// искомая погрешность

e:=StrToFloat(Edit3.Text); // значение искомой погрешности.

// Константа Липшица

L:=StrToInt(Edit4.Text); //Значение константы Липшица.

//===============Построение графика по формуле============//

for x:=-10 to 10 do

begin

Jx:=sqr(x)+2*x;

form1.Chart1.Series[0].AddXY(x,Jx);

form1.Chart1.Series[1].AddXY(x,0);

form1.Chart1.Series[2].AddXY(0,x);

form1.Chart1.Series[3].AddXY(a,x);

form1.Chart1.Series[4].AddXY(b,x);

form1.Chart1.Series[5].AddXY(x,L);

end;

//==================Начало================//

d:=(2*e)/L; // первое значение для шага разбития

c:=b-a; // второе значение для шага раазбития

//Шаг разбития

if d>c then

begin

h:=c; //если первоезначение больше второго то минимум равен второму значению

end

else

begin

h:=d; //иначе обратная процедура, минимум равен первому

end; // шаг разбития

//значение n отрезков

n:=(abs(a)+abs(b))/h; // кол-во отрезков

nn:=StrToInt(FloatToStr(n));

//==================Пред шаговая================//

u[1]:=a+(h/2); //первое значение u1

///////////////////////////////////////////////////

Ju[1]:=sqr(u[1])+2*u[1]; //J(u1) по формеле c формы

///////////////////////////////////////////////////

Fmin:=Ju[1]; // функция, для нахождения следующей точки разбиения

///////////////////////////////////////////////////

//==================Шаги================//

// Заполняет Fmin из F[1..n] и Ju[i]

for i:=2 to nn do

begin

if u[i-1]<(b-(h/2)) then

begin

u[i]:=u[i-1]+h+((Ju[i-1]-Fmin)/L);

Ju[i]:=sqr(u[i])+2*(u[i]);

for k:=1 to i do

begin

if Fmin>=Ju[k] then

begin

Fmin:=Ju[k];

end

else

begin

Fmin:=Fmin;

end;

end;

end // Шаги и их заполнением и выполнение

else

begin

u[nn]:=u[nn-1]+h+((Ju[nn-1]-Fmin)/L);

if u[nn]>b then

begin

Fmin:=b;

end

else

begin

Fmin:=u[nn];

end;

end;

end;

//проверка минимума в минимальном значении

F[1]:=u[1];

for i:=1 to nn do

begin

if Fmin = Ju[i] then

begin

if F[1] > u[i] then

begin

F[1]:=F[1];

end

else

begin

F[1]:=u[i];

end;

end;

end;

//вывод результата на форму в поле мемо1

Memo1.Lines.Add('Минимум функции : '+FloatToStr(Fmin));

Memo1.Lines.Add('Значение функции в минимуме: '+FloatToStr(F[1]));

Memo1.Lines.Add('Данные, полученные в ходе решения поставленной задачи,'+#13+'являются не точными и предполагают наличие погрешности связанной с выбором e и L');

end;

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if key in ['a'..'z','A'..'Z','а'..'я','А'..'Я' ,'ё',' ','.','+','*','/','=',')','(','&','^','%','$','#','@','!',';',':','?','"','[',']','{','}','\','|','/','_','<','>','¦','№'] then key:=#0;

end; //защита от ввода букв

end.

62

Соседние файлы в папке Трубников