Показать сообщение отдельно
  #3  
Старый 14.05.2012, 20:57
qpmr qpmr вне форума
Прохожий
 
Регистрация: 12.12.2011
Сообщения: 27
Репутация: 10
По умолчанию

не пойму , какие переменные нужно писать в модуле под var и procedure , а какие оставить в var в программе
сделал так , но теперь не считает обратную , а просто копирует исходную .
Код:
unit Main;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    StringGrid1: TStringGrid;
    Label1: TLabel;
    SpinEdit1: TSpinEdit;
    Button1: TButton;
    Button2: TButton;
    StringGrid2: TStringGrid;
    Splitter1: TSplitter;
    Button3: TButton;
    procedure Button3Click(Sender: TObject);
    procedure SpinEdit1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  kol: integer;
  b:mat;obr:vek;

implementation

{$R *.dfm}



procedure TForm1.Button3Click(Sender: TObject);
begin
 exit;
end;

procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
 kol:= SpinEdit1.Value;
 StringGrid1.ColCount:= kol;
 StringGrid1.RowCount:= kol;
 StringGrid2.ColCount:= kol;
 StringGrid2.RowCount:= kol;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i, j: integer;
begin
 randomize;
 for i:= 0 to kol - 1 do
  for j:= 0 to kol - 1 do
    StringGrid1.Cells[i, j]:= IntToStr(random(100) - 50);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 kol:= 1;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i, j: integer;
    i1, j1: integer;
begin
 i1:= 1;
 j1:= 1;
 try
  for i:= 0 to kol - 1 do
    for j:= 0 to kol - 1 do
    begin
      i1:= i;
      j1:= j;
      obr[i, j]:= StrToFloat(StringGrid1.Cells[j, i]);
    end;
 except
  ShowMessage('Ошибка при вводе числа в столбце ' + IntToStr(j1 + 1) + ' строке ' + IntToStr(i1 + 1) + '!');
  exit;
 end;

 Obratis(b,obr,kol,i,j);
 for i:= 0 to kol - 1 do
  for j:= 0 to kol - 1 do
    StringGrid2.Cells[i, j]:= FloatToStr(Round(1000*obr[j, i])/1000);
end;

end.
Код:
unit Unit1;// текст модуля

interface
 type
 mat=array[0..30, 0..30] of real ;
 vek=array[0..30, 0..30] of real;
 procedure Obratis(b:mat;obr:vek;kol,i,j:integer);
implementation
procedure Obratis;
 var k:integer;
begin
 for k:=0 to kol - 1 do
 begin
      for i:=0 to kol - 1 do
       for j:=0 to kol - 1 do
       begin
            if (i=k) and (j=k) then
               b[i,j] := 1/obr[i,j];
               if (i=k) and (j<>k) then
                  b[i,j] := -obr[i,j]/obr[k,k];
               if (i<>k) and (j=k) then
                  b[i,j] := obr[i,k]/obr[k,k];
               if (i<>k) and (j<>k) then
                  b[i,j] := obr[i,j] - obr[k,j] * obr[i,k]/obr[k,k];
       end;
      for i:= 0 to kol - 1 do
       for j:= 0 to kol - 1 do obr[i, j]:= b[i, j];
 end;
end;
end.
Ответить с цитированием