Professional Documents
Culture Documents
ФЕІ-11 Вовк Андрій лабораторна робота №5
ФЕІ-11 Вовк Андрій лабораторна робота №5
Лабораторна робота №5
з курсу «Алгоритмізація та програмування»
«Віконний проект методів розв’язання нелінійних рівнянь»
Виконав:
Ст. ФЕІ-11
Вовк Андрій
Перевірив:
Хвищун Іван Олександрович
Львів 2022
Звіт
Мета: Опанувати методику створення адаптивного розширювального віконного
інтерфейсу для багатократного розв’язання набору однотипних задач, із використанням
декількох чисельних методів. У проекті є можливість додавання інших нелінійних рівнянь і
нових методів їхнього розв’язання. Здійснюється контроль за правильністю вхідних даних і
адаптивне налаштування інтерфейсу на вхідні дані та вихідні результати кожного методу.
Проект є навчальним
Текст програми
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm5 = class(TForm)
CB1: TComboBox;
CB2: TComboBox;
Label1: TLabel;
L02: TLabel;
L1: TLabel;
L2: TLabel;
L3: TLabel;
L4: TLabel;
L5: TLabel;
L6: TLabel;
E1: TEdit;
E2: TEdit;
E3: TEdit;
E4: TEdit;
E5: TEdit;
E6: TEdit;
B1: TButton;
B2: TButton;
procedure B1Click(Sender: TObject);
procedure B2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
implementation
{$R *.dfm}
{ 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;
2: f := x * x * x + 6;
End;
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; // лічильник кількості поділів інтервалу [a, b]
Fc := f(c, k1);
If (Abs(Fc)< Eps) then // перевірка, чи точка с не є поблизу кореня x*
Begin
MDP := c;
Exit
End;
If F(a, k1) * Fc > 0 then a := c
else b := c
End;
MDP := c; // завершення роботи функції 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;
Var L : integer;
Eps, D: real;
procedure TForm5.B1Click(Sender: TObject);
Begin
L := 0;
// Перевірка правильності введення вхідних даних
If E1.Text = '' then
Begin
ShowMessage ('Введіть число в Edit1');
Exit;
end;
a := StrToFloat(E1.Text);
If E2.Text = '' then
Begin
ShowMessage ('Введіть число в Edit2');
Exit;
end;
b := StrToFloat(E2.Text);
If E3.Text = '' then
Begin
ShowMessage ('Введіть число в Edit3');
Exit;
end;
Eps := StrToFloat(E3.Text);
If a > b then
begin
D := a; a := b; b := D; // міняємо місцями a і b
E1.Text := FloatToStr (a);
E2.Text := FloatToStr (b);
end;
end.
Тестування