Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 6

Львівський національний університет імені Івана Франка

Факультет: електроніки та комп’ютерних технологій

Лабораторна робота №6
з курсу «Алгоритмізація та програмування»
«Розв’язування систем лінійних алгебричних рівнянь»

Виконав:
Ст. ФЕІ-11
Вовк Андрій

Перевірив:
Хвищун Іван Олександрович

Львів 2022
Звіт
Мета: Створити інтерфейс проекту згідно з методикою, яку описано вище;
написати процедуру методу Крамера, у якій обчислення значення кожного з
визначників здійснюється функцією, яку необхідно написати окремо;
під’єднати процедуру до проекту; протестувати роботу програми на системах
рівнянь порядку (3*3)

Текст програми
interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils,
System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.StdCtrls;

type
Matr = Array[1..5,1..5] of Real;
Vec = Array[1..5] of Real;
TForm6 = class(TForm)
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Button1: TButton;
Label4: TLabel;
Button2: TButton;
Button3: TButton;
StringGrid1: TStringGrid;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form6: TForm6;

implementation

{$R *.dfm}

Function Det(var A: Matr):real;


begin
Det:=
a[1,1]*a[2,2]*a[3,3]+a[1,2]*a[2,3]*a[3,1]+a[2,1]*a[3,2]*a[1,3]-
a[3,1]*a[2,2]*a[1,3]-a[3,2]*a[2,3]*a[1,1]-a[2,1]*a[1,2]*a[3,3];
end;

procedure kramer(var vuz,vx,vy,vz:real;a:matr;b,x:vec);


var vuzx,vuzy,vuzz,a1,a2,a3:real;
i: Integer;
begin
vuz:=det(a);

if vuz=0 then
begin
showmessage('Метод Крамера не передбачений для
виродженої матриці');
end;

for i := 1 to 3 do
begin
a1:=a[1,i];
a2:=a[2,i];
a3:=a[3,i];
a[1,i]:=b[1];
a[2,i]:=b[2];
a[3,i]:=b[3];
if i=1 then
begin
vuzx:=det(a);
vx:=vuzx/vuz;
end;
if i=2 then
begin
vuzy:=det(a);
vy:=vuzy/vuz;
end;
if i=3 then
begin
vuzz:=det(a);
vz:=vuzz/vuz;
end;
a[1,i]:=a1;
a[2,i]:=a2;
a[3,i]:=a3;
End;
end;

procedure TForm6.Button1Click(Sender: TObject);


begin
Var N : Integer;
Begin
N := StrToInt(Edit1.Text);
n:=strtoint(edit1.text);
StringGrid1.ColCount:=n;
StringGrid2.ColCount:=1;
StringGrid3.ColCount:=1;
StringGrid1.RowCount:=n;
StringGrid2.RowCount:=n;
StringGrid3.RowCount:=n;
end;
end;
procedure TForm6.Button2Click(Sender: TObject);
begin
Var A : Matr;
var b, x : Vec;
var i,j, N: Integer;
var vzn,vx,vy,vz:real;

begin
N := StrToInt(Edit1.Text);
For i:=1 to N do
For j:=1 to N do
Begin
a[i,j] := StrToFloat(StringGrid1.Cells[j - 1,i - 1]);
b[j] := StrToFloat(StringGrid2.Cells[0,j - 1]);
End;
kramer(vzn,vx,vy,vz,a,b,x);
StringGrid3.Cells[0,0]:=FloatToStr(vx);
StringGrid3.Cells[0,1]:=FloatToStr(vy);
StringGrid3.Cells[0,2]:=FloatToStr(vz);
end;
end;

procedure TForm6.Button3Click(Sender: TObject);


begin
Close
end;

end.
Тестування

You might also like