![]() |
|
|
|
|
#1
|
|||
|
|||
|
Есть код программы ,не получается оформить в виде процедуры помещенной в библиотечный модуль ..
Код:
unit obra; // код модуля
interface
type
kol= integer;
obr=array[0..10, 0..10] of real;
b= array[0..10, 0..10] of real;
procedure _obra(z:obr;r:b;kol:integer);
implementation
procedure _obra(z:obr;r:b;kol:integer);
var k, i, j: 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
z[i,j] := 1/r[i,j];
if (i=k) and (j<>k) then
z[i,j] := -r[i,j]/r[k,k];
if (i<>k) and (j=k) then
z[i,j] := r[i,k]/r[k,k];
if (i<>k) and (j<>k) then
z[i,j] := r[i,j] - r[k,j] * r[i,k]/r[k,k];
end;
for i:= 0 to kol - 1 do
for j:= 0 to kol - 1 do r[i, j]:= z[i, j];
end;
end;
end.Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls, Grids,Obra;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
StringGrid1: TStringGrid;
Button1: TButton;
BitBtn1: TBitBtn;
Button2: TButton;
StringGrid2: TStringGrid;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i, j,kol: integer;
i1, j1: integer;
begin
i1:= 1;
j1:= 1;
for i:= 0 to kol - 1 do
for j:= 0 to kol - 1 do
begin
i1:= i;
j1:= j;
_obra(z,r,kol);
z[i, j]:= StrToFloat(StringGrid1.Cells[j, i]);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var i,j,n,d:integer;
begin
d:=strtoint(edit1.Text);
stringgrid1.RowCount:=d+1;
stringgrid1.ColCount:=d+1;
stringgrid1.cells[0,0]:='A';
for i:=1 to d do
stringgrid1.cells[i,0]:='i='+inttostr(i);
for j:=1 to d do
stringgrid1.cells[0,j]:='j='+inttostr(j);
end;
procedure TForm1.Button2Click(Sender: TObject);
var i,j,n:integer;
begin
n:=strtoint(edit1.text);
randomize;
for i:=1 to n do
for j:=1 to n do
stringgrid1.Cells[i,j]:=inttostr(random(10));
end;
end.
Последний раз редактировалось qpmr, 04.05.2012 в 09:04. |
|
#2
|
||||
|
||||
|
Что конкретно не получается?
|
|
#3
|
|||
|
|||
|
не пойму , какие переменные нужно писать в модуле под 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.Последний раз редактировалось qpmr, 14.05.2012 в 21:15. |
|
#4
|
||||
|
||||
|
Это что такое?
Цитата:
|
|
#5
|
|||
|
|||
|
не знал как еще задействовать массив vek ..
|
|
#6
|
||||
|
||||
|
dll с экспортируемой функцией _obra
подключить юнит Header к приложению (прописать его в uses), в приложении убрать использование unit1 З.Ы. текст из первого поста ТС, что в вызове значат _obra(z,r,kol); не разбирался Последний раз редактировалось cotseec, 15.05.2012 в 23:35. |