unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
const
Rang = 5;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Button2: TButton;
StringGrid2: TStringGrid;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
AMatrica = array[1..Rang,1..Rang] of Integer;
var
Form1: TForm1;
Matrica : AMatrica;
{Массив ActiveCols будем использовать для обозначения "вычеркнутых" колонок}
ActiveCols : array[1..Rang] of Boolean = (true,true,true,true,true);
function Determinant(FirstRow : Integer ) : Integer;
implementation
{$R *.dfm}
{FirstRow указывает на первую строку массива, с которой начинается
матрица, рассматриваемая на текущем шаге. Строки вычеркиваем последовательно}
function Determinant(FirstRow : Integer) : Integer;
var
i : Integer;
Odd : Boolean;
begin
Result:=0;
Odd:=true;
for i:=1 to Rang do // пробегаем по всем элементам текущей строки
begin
if NOT ActiveCols[i] then Continue; // если колонка вычеркнута, то пропускаем
if FirstRow = Rang
then
begin
Result:=Matrica[FirstRow,i];
Exit;
end;
ActiveCols[i]:=false;
if Odd
then
Result:=Result+Matrica[FirstRow,i]*Determinant(FirstRow+1)
else
Result:=Result-Matrica[FirstRow,i]*Determinant(FirstRow+1);
ActiveCols[i]:=true; // восстанавливаем вычеркнутый стобец
Odd:=NOT Odd; // меняем четность
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:= IntToStr(Determinant(1));
end;
procedure TForm1.Button2Click(Sender: TObject);
var
s :TStringlist;
i, posy, posx: Integer;
Str:String;
nxn: array of array of integer;
begin
with TOpenDialog.Create(Owner) do
begin
DefaultExt:='.txt';
Filter:= 'файлы проекта|*.txt';
if not Execute then exit;
s:=TStringList.Create;
S.LoadFromFile(FileName);
For posy := 1 to S.Count do
begin
posx := 0;
Str := '';
For i := 1 to Length(S.Strings[posy-1]) do
begin
if S.Strings[posy-1][i] <> ' ' then
Str := Str + S.Strings[posy-1][i]
else
begin
StringGrid2.Cells[posx, posy-1] := Str;
Matrica[posx+1,posy]:= StrToInt(Str);
Str := '';
inc(posx);
end;
end;
end;
S.Free;
end;
With StringGrid2 do begin
colCount:=posx;
RowCount:=posy;
For i:=0 to posx-1 do
ColWidths[i]:=Trunc(Width/posx);
end;
SetLength(nxn,Rang,Rang);
end;
end.