ФЕІ-11 Вовк Андрій лабораторна робота №7

You might also like

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

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

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

Лабораторна робота №7
з курсу «Алгоритмізація та програмування»
«Розв’язування СЛАР методом Гаусса»

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

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

Львів 2022
Звіт
Мета: створити інтерфейс проекту “Розв’язання СЛАР методом Гауса” згідно
з методикою, яку описано у Лабораторній роботі 6.; вивчити алгоритм
методу Гауса; навчитись писати програми на основі блок-схем. Написати
процедуру методу Гауса, згідно з алгоритмом, який наведено вище;
під’єднати процедуру до проекту; протестувати роботу програми на системах
рівнянь різних порядків.

Текст програми
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;
TForm7 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Button1: TButton;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form7: TForm7;

implementation

{$R *.dfm}

Procedure GAUSS (A: Matr; B: Vec; N: Integer; Var X: Vec);


Var i, j, k: Integer;
R: Real;
Begin
If N = 1 then
If Abs (A[1, 1]) < 1E-7 then
Begin
Writeln ('Система є виродженою');
ReadLn;
Halt
End else
Begin
X[1] := B[1] / A[1, 1];
Exit
End;
For i := 1 to N - 1 do
Begin
k := i;
R := Abs (A[i, i]);
For j := i + 1 to N do
If Abs (A[j, i]) >= R then
Begin
k := j;
R := Abs (A[j, i])
End;
If R <= 1E-7 then
Begin
Write ('Система є виродженою');
ReadLn;
Halt
End;
// Якщо діагональний елемент не найбільший – переставляємо рядки
If k <> i then
Begin
R := B[k];
B[k] := B[i];
B[i] := R;
For j:=i to N do
Begin
R := A[k, j];
A[k, j] := A[i, j];
A[i, j] := R
End
End;
R := A[i, i];
B[i] := B[i] / R;
For j:=1 to N do
A[i, j] := A[i, j] / R;
For k := i+1 to N do
Begin
R := A[k, i];
B[k] := B[k] - R * B[i];
A[k, i] := 0;
For j := i + 1 to N do
A[k, j] := A[k, j] - R * A[i, j];
End;
End;
If Abs (A[N, N]) <= 1E-7 then
Begin
Write ('Система є виродженою');
ReadLn;
Halt
End;
// --------Зворотний хiд -----------
X[N] := B[N] / A[N, N];
For i := N - 1 downto 1 do
Begin
R := B[i];
For j := i + 1 to N do
R := R - A[i, j] * X[j];
X[i]:= R
End
End;

procedure TForm7.Button1Click(Sender: TObject);


var n:integer;
begin
n:=strtoint(edit1.text);
StringGrid1.ColCount:=n;
StringGrid2.ColCount:=1;
StringGrid3.ColCount:=1;
StringGrid1.RowCount:=n;
StringGrid2.RowCount:=n;
StringGrid3.RowCount:=n;
end;

procedure TForm7.Button2Click(Sender: TObject);

Var A : Matr;
var b,x: Vec;
var i,j,n: Integer;

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;

gauss (a,b,n,x);
for i := 1 to n do
begin
stringgrid3.Cells[0,i-1]:=floattostr(x[i]);
end;
end;

procedure TForm7.Button3Click(Sender: TObject);


begin
close
end;
end.

Тестування

You might also like