Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРАКТИКУМ_4.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.68 Mб
Скачать

Interface

uses

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

Dialogs,Unit7, StdCtrls,Unit2,Unit3, ExtCtrls, jpeg;

type

TForm1 = class(TForm)

Button1: TButton;

Memo1: TMemo;

Button2: TButton;

ComboBox1: TComboBox;

ComboBox2: TComboBox;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Image2: tImage;

Image1: tImage;

Image3: tImage;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure ComboBox1Change(Sender: TObject);

procedure ComboBox2Change(Sender: TObject);

procedure Edit1Change(Sender: TObject);

procedure Edit2Change(Sender: TObject);

procedure Edit3Change(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

// описание глобальных переменных

Var Form1: tForm1;

a,b,eps:real; // левая, правая граница, точность

key,key1:byte; // ключи выбора метода решения и уравнения

rez_stroka:string[40]; //результирующие строки для вывода результата

rez_stroka1:string[40]; // в окно компонента memo1

code_operation:integer; //код завершения операции по преобразованию

//строки в число

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

Form7.Visible:=True;

Form7.Show;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

memo1.Lines.Clear;

if key1=0 then

begin

case key of

0: horda(a,b,eps,f1);

1: horda(a,b,eps,f2);

2: horda(a,b,eps,f3);

3: horda(a,b,eps,f11);

4: horda(a,b,eps,f22);

5: horda(a,b,eps,f33);

end;

rez_stroka:=floattostr(kor);

rez_stroka1:=inttostr(key+1);

memo1.Lines.Add('Корень '+ rez_stroka1 + '-го равнения y='+rez_stroka);

end

else

begin

case key of

0: polovina(a,b,eps,f1);

1: polovina(a,b,eps,f2);

2: polovina(a,b,eps,f3);

3: polovina(a,b,eps,f11);

4: polovina(a,b,eps,f22);

5: polovina(a,b,eps,f33);

end;

rez_stroka:=floattostr(kor1);

rez_stroka1:=inttostr(key+1);

memo1.Lines.Add('Корень '+ rez_stroka1 + '-го равнения y='+rez_stroka);

end;

end;

procedure TForm1.ComboBox1Change(Sender: TObject);

begin

key:=combobox1.ItemIndex;

end;

procedure TForm1.ComboBox2Change(Sender: TObject);

begin

key1:=combobox2.ItemIndex;

end;

procedure TForm1.Edit1Change(Sender: TObject);

begin

VAL(edit1.Text,a,code_operation);

str(a:5:2,rez_stroka);

memo1.Lines.Add(rez_stroka);

end;

procedure TForm1.Edit2Change(Sender: TObject);

begin

VAL(edit2.Text,b,code_operation);

str(b:5:2,rez_stroka);

memo1.Lines.Add(rez_stroka);

end;

procedure TForm1.Edit3Change(Sender: TObject);

begin

VAL(edit3.Text,eps,code_operation);

str(eps:5:3,rez_stroka);

memo1.Lines.Add(rez_stroka);

end;

end.

Модуль вычисления корней уравнения методом хорды Unit 2 имеет следующий вид:

unit Unit2;

interface

uses Math;

type func=function(x:real):real;

var kor:real;

function f1(x:real):real;

function f2(x:real):real;

function f3(x:real):real;

procedure horda(a,b,eps:real; uravn:func; var kor:real);

implementation

function f1;

begin

f1:=sqr(x);

end;

function f2;

begin

f2:=sin(x);

end;

function f3;

begin

f3:=power(x,3)-3*sqr(x)-3*x+10;

end;

procedure horda;

var kors:real;

begin

kor:=a-uravn(a)*(b-a)/(uravn(b)-uravn(a));

repeat

kors:=kor;

if uravn(a)*uravn(kors)<0 then b:=kors

else a:=kors;

kor:=a-uravn(a)*(b-a)/(uravn(b)-uravn(a));

until abs(kor-kors)<eps;

end;

end.

Интерфейс позволяет сравнить работу различных методов отыскания корней уравнения (либо различных методов интегрирования) с точки зрения точности полу-чаемых значений при решении одного и того же уравнения.