⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unitmain.pas

📁 deihli写的稀疏矩阵链表存储
💻 PAS
字号:
unit UnitMain;

interface

uses
  Windows, Messages, SysUtils,  Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Grids, StdCtrls, Spin, ComCtrls;

type
  TFormMain = class(TForm)
    PanelMng: TPanel;
    Button1: TButton;
    StringGridMatrix: TStringGrid;
    SpinEdit1: TSpinEdit;
    Label1: TLabel;
    StatusBar1: TStatusBar;
    Splitter1: TSplitter;
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure SpinEdit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }

    procedure ResetGrid;
  end;

var
  FormMain: TFormMain;

function precisesec( dt : TDateTime ) : string;

implementation

uses Sparxcpt, SparSolv;

{$R *.dfm}

procedure LoadLHS( const eq, vr : integer; const value : string );
 //   eq方程数相当于行, vr相当于列,value 值
var
  r : double;
begin
  if trim( value ) = '' then exit;
  try
    r := StrToFloat( value )//从表中传来的值
  except
    exit;
  end;

  AddLHS_A( eq, vr, r ); //
end;

procedure LoadRHS( const eq: integer; const value : string );  //
var
  r : double;
begin
  if trim( value ) = '' then exit;
  try
    r := StrToFloat( value )
  except
    exit;
  end;

  AddRHS_A( eq, r );    //eq是行或者列,r是数值保存到矩阵中
end;

procedure TFormMain.Button1Click(Sender: TObject);
var
  i, j : integer;
  t1 : TDateTime; //时间类
  originT,finishT:Dword; //delphi 的字符类
function GetTime:Dword;
begin
  result:=GettickCount;//是取系统加载以来的经历的时间(毫秒)
end;
begin
  ResetGrid;

  InitStrucA( StringGridMatrix.RowCount-1 );
  with StringGridMatrix do
  try
    // load data to SparSolv
    for j := 1 to RowCount-1 do begin
      LoadRHS( j, Cells[0,j] );//右边向量

      for i := 1 to ColCount-2 do
        LoadLHS( j, i, Cells[i, j] );//左边的矩阵
    end;

    t1 := Now;
    OriginT:=Gettime;
    Solve1A;
    FinishT:=Gettime;
    StatusBar1.Panels[1].Text := inttostr( FinishT - OriginT ) + ' ms'; //FinishT=OriginT?
//    StatusBar1.Panels[1].Text := precisesec( Now - t1 ) + ' s';

    for j := 1 to RowCount-1 do  //把结果装在结果栏里
      Cells[ ColCount-1, j ] := FloatToStr( GetAnswerF(j) ); //CELLS先列后行?
  finally
    ReleaseStruc;
  end;
end;

function precisesec( dt : TDateTime ) : string;    //及时间的函数
var
  Hour, Minute, Sec, MilSec : word;
  ss : double;
begin
  ss := trunc( dt ) * 24 * 60 * 60;
  DecodeTime( Dt, Hour, Minute, Sec, MilSec );
  ss := ss + Hour*3600 + Minute*60 + Sec + MilSec/1000;
  result := FloatToStr(ss);
end;

resourcestring
  rsRHS = 'RHS';
  rsResult = 'Result';

procedure TFormMain.ResetGrid;//窗体对象的函数
var
  i : integer;
begin
  with StringGridMatrix do begin
    RowCount := SpinEdit1.Value + 1;
    FixedRows := 1;
    FixedCols := 0;
    ColCount := RowCount + 1;

    Cells[ 0,0 ] := rsRHS;
    Cells[ ColCount-1,0 ] := rsResult;

    for i := 1 to ColCount-2 do
      Cells[ i, 0 ] := IntToStr(i);
  end;
end;

procedure TFormMain.FormShow(Sender: TObject);
begin
  ResetGrid;
end;

procedure TFormMain.SpinEdit1Change(Sender: TObject);
begin
  ResetGrid;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -