>
implementation
uses InRazmUnit, InMassUnit;
{$ R *. dfm}
function TMainForm.VS_Det (InMass: TVS_MassData): Real;
var
Temp, A: TVS_MassData;
Cols, Rows, Count: Word;
i, j, k: Integer;
begin
Result: = 1;// Результат функції за замовчуванням
If InMass.N <> InMass.M Then Exit;// якщо матриця не квадратна - йдемо, бо рішення методом діагоналі
Count: = InMass.M;// Отримали розмірність вихідного масиву
SetLength (A.Mass, Count, Count) ;//Встановили размер матриці
SetLength (Temp.Mass, 1, Count);// Встановили розмір мартицей
AssignMass (InMass, A);// Під тимчасовий масив заносимо дані з вихідного, щоб не псувати вихідний масив
// Пошук і рішення
for i: = 0 to Count - 2 do {Початок перетворення до верхньому трикутного вигляду}
begin
for j: = i to Count - 1 do {* Пошук}
begin {* нульових}
Rows: = 0; {* рядків}
Cols: = 0; {* і}
for k: = i to Count - 1 do {* стовпців}
begin {* в}
Rows: = Rows + Ord (A.Mass [j, k] = 0); {* матриці}
Cols: = Cols + Ord (A.Mass [k, j] = 0); {*}
end; {for k: = i to Count - 1 do} {*}
if Rows + Cols = 0 then {*}
Break; {*}
if (Cols = Count - i) or (Rows = Count - i) then {*}
begin {*}
Result: = 0; {*}
Exit {*}
end {if (Cols = Count - i) or (Rows = Count - i) then}
end; {for j: = i to Count - 1 do} {*}
if A.Mass [i, i] = 0 then
for j: = i + 1 to Count - 1 do
if A.Mass [j, i] <> 0 then
begin
Result: =-Result; {* Міняємо рядок}
Temp.Mass [0]: = A.Mass [i]; {* на рядок з}
A.Mass [i]: = A.Mass [j]; {* першим}
A.Mass [j]: = Temp.Mass [0]; {* ненульовим}
Break {* елементом}
end;
for j: = i + 1 to Count - 1 do
if A.Mass [j, i] <> 0 then p> begin
for k: = i + 1 to Count - 1 do
A.Mass [j, k]: = A.Mass [j, k] - A.Mass [i, k] * A.Mass [j, i]/A.Mass [i, i];
A.Mass [j, i]: = 0
end
end; {Кінець перетворення}
for i: = 0 to Count - 1 do {Визначник як твір}
Result: = Result * A.Mass [i, i]; {елементів на головної діагоналі}
end;
procedure TMainForm.InputMassAClick (Sender: TObject);
begin
If InRazmForm = Nil Then Application.CreateForm (TInRazmForm, InRazmForm);
With InRazmForm do
Begin
Caption: = 'Введення розмірності ряду А';
Hint: = Caption;//
ShowHint: = True;// Дозволяємо швидкі підказки
lbPrompt1.Caption : = 'Розмірність N';
// Налагодження еелементов введення для розмірності масиву по рядкам - М
sedtRazmA.MinValue: = 1;// Встановили мінімальну знаеченіе для введення-перемикача
sedtRazmA.MaxValue: = MaxN;// Встановили максимальне значення дл...