Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit1;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
- Buttons;
- type
- { TForm1 }
- TForm1 = class(TForm)
- BitBtn1: TBitBtn;
- Button1: TButton;
- Button2: TButton;
- ComboBox1: TComboBox;
- ComboBox2: TComboBox;
- Edit1: TEdit;
- Edit2: TEdit;
- Edit3: TEdit;
- Edit4: TEdit;
- Edit5: TEdit;
- Edit6: TEdit;
- Label1: TLabel;
- Label10: TLabel;
- Label2: TLabel;
- Label3: TLabel;
- Label4: TLabel;
- Label5: TLabel;
- Label6: TLabel;
- Label7: TLabel;
- Label8: TLabel;
- Label9: TLabel;
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- private
- { private declarations }
- public
- { public declarations }
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.lfm}
- { TForm1 }
- Var a, b : Real; Kmax : Integer; m, k : Byte;
- Function f(x: Real; k1: Byte): Real;
- Begin
- Case k1 of
- 0: f := x * x - 4;
- 1: f := 3*x-4*ln(x)-5;
- End; end;
- Function fp (x, d: Real; k1: byte): Real; //First dif
- Begin
- fp := (f(x + d, k1) - f(x, k1)) / d;
- End;
- Function f2p (x, d:Real; k1:byte):Real; // Second dif
- Begin
- f2p:=(f(x + d, k1)+ f(x - d, k1)- 2 * f(x, k1)) / (d * d);
- End;
- Function MDP (a, b, Eps : Real; k1: byte; Var L : Integer ): Real;
- Var c, Fc : Real;
- Begin
- While ( b - a > Eps ) do
- Begin
- c := 0.5*(b - a) + a;
- L := L + 1; // counter of divisions[a, b]
- Fc := f(c, k1);
- If (Abs(Fc)< Eps) then // checking x*
- Begin
- MDP := c;
- Exit
- End;
- If F(a, k1) * Fc > 0 then a := c
- else b := c
- End;
- MDP := c; // end of MDP
- Exit end;
- Function MN (a, b, Eps : Real; k1: byte; Kmax: Integer; Var L : Integer): Real;
- Var x, Dx, D : Real;
- i : Integer;
- Begin
- Dx := 0.0; D := Eps / 100.0; x := b;
- If (f(x, k1) * f2p(x, D, k1) < 0) then x := a;
- If (f(x, k1) * f2p(x, d, k1) < 0) then
- ShowMessage('Для збіжність ітерацій не гарантована');
- For i:=1 to Kmax do
- Begin
- Dx := f(x, k1) / fp(x, D, k1); x := x - Dx;
- If (Abs(Dx) < Eps) then
- Begin
- MN := x;// Завершення роботи функції MN
- L := i;
- exit;
- end;
- end;
- ShowMessage('За задану кількість ітерацій кореня не знайдено'); exit;
- End;
- procedure TForm1.Button1Click(Sender: TObject);
- Var L : Integer; D, Eps : Real;
- Begin
- L := 0;
- // Перевірка правильності введення вхідних даних
- If Edit1.Text = '' then
- Begin
- ShowMessage ('Введіть число в Edit1');
- Exit; end;
- a := StrToFloat(Edit1.Text);
- If Edit2.Text = '' then
- Begin
- ShowMessage ('Введіть число в Edit2');
- Exit; end;
- b := StrToFloat(Edit2.Text);
- If Edit3.Text = '' then
- Begin
- ShowMessage ('Введіть число в Edit3');
- Exit; end;
- Eps := StrToFloat(Edit3.Text);
- If a > b then begin
- D := a; a := b; b := D; // Міняємо місцями a і b
- Edit1.Text := FloatToStr (a);
- Edit2.Text := FloatToStr (b); end;
- Case ComboBox1.ItemIndex of // Вибір методу :
- 0: m := 0; // метод ділення навпіл
- 1: Begin m := 1; D := Eps / 100.0;
- Label7.Visible := True; // Робимо видимим вікно для введення Kmax
- Edit4.Visible := True;
- End; end;
- Case ComboBox2.ItemIndex of// Вибір нелінійного рівняння
- 0: k := 0;
- 1: k := 1;
- end;
- If m = 0 then // Перевірка для МДН,
- If (F(a, k))* (F(b, k)) > 0 then // чи є корінь на інтервалі [a,b]
- Begin
- ShowMessage('Введіть правильний інтервал [a,b]!');
- Edit1.Clear;
- Edit2.Clear;
- Exit; end;
- If Abs(F(a, k)) < Eps then
- begin
- Edit5.Text := FloatToStr(a); Edit6.Text := IntToStr(L); exit;
- end;
- If Abs(F(b, k)) < Eps then
- begin
- Edit5.Text := FloatToStr(b);
- Edit6.Text := IntToStr(L);
- Exit end;
- Case m of
- 0: begin // Виклик методу ділення навпіл MDP
- Edit5.Text := FloatToStr (MDP(a, b, Eps, k, L));
- Edit6.Text := IntToStr (L);
- Label10.Caption := 'К-ть поділів ='; Exit end;
- 1: begin // Виклик методу Ньютона
- Kmax := StrToInt(Edit4.Text);
- Edit5.Text := FloatToStr (MN (a, b, Eps, k, Kmax, L));
- Edit6.Text := IntToStr (L);
- Label10.Caption := 'К-ть ітерац. ='; end;
- end;
- end;
- procedure TForm1.Button2Click(Sender: TObject);
- begin
- Edit1.Clear;
- Edit2.Clear;
- Edit3.Clear;
- Edit4.Clear;
- Edit5.Clear;
- Edit6.Clear;
- Case ComboBox1.ItemIndex of
- 0:begin
- Label7.Visible:=False;
- Edit4.Visible:=False;
- end;
- 1:begin
- Label7.Visible:=True;
- Edit4.Visible:=True;
- end;
- End;
- end;
- end.
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement