关于参数的问题(100分)

  • 主题发起人 主题发起人 Bkhswrp
  • 开始时间 开始时间
B

Bkhswrp

Unregistered / Unconfirmed
GUEST, unregistred user!
我想编一个过程,功能是实现两个矩阵的相乘,在C语言中很好实现,二维指针就行了
,但是我不知道在Delphi中如何实现?
 
用动态数据和行列数参数

procedure MatricMulti(var A,B,C:array of array of float;m,n:integer);

A,B 要相第乘的矩阵。
m:行数
n:列数

C:是矩阵,乘的结果。
 
我照着这个方法试了一下,编译的时候出现这样的问题:
“[Error] Unit1.pas(14): Identifier expected but 'ARRAY' found”
好像二维数组不能作为行参
 
试试函数的返回值为二维数组
 
Type TMultiArray=array of array of double;

procedure MatricMulti(var A,B,C:TMultiArray;m,n:integer);

 
我实现过,用动态数组,
不过现在没有源码,不急的话,过两天贴上来
容易搞错的就是,使用动态数组时要先分配内存


 
//声明:
type TMat=array of array of real;
procedure MatricMulti(var A,B,C:TMat;m,n:integer);

//实现
procedure MatricMulti(var A,B,C:TMat;m,n:integer);
var
i,j,k:integer;
t:real;
begin
for i:=0 to m-1 do for j:=0 to m-1 do
begin
t:=0;
for k:=0 to n-1 do t:=t+A[i,k]*B[k,j];
c[i,j]:=t;
end;
end;

//调用
procedure TForm1.Button3Click(Sender: TObject);
var
x,y,z:TMat;
m,n,i,j:integer;
s:string;
begin
setlength(x,2,3);
setlength(y,3,2);
setlength(z,2,2);
m:=2;
n:=3;
for i:=0 to m-1 do for j:=0 to n-1 do
begin
x[i,j]:=i+1;
y[j,i]:=j+1;
end;
MatricMulti(x,y,z,m,n);

s:='Matrix Z:';
for i:=0 to m-1 do
begin
s:=s+#13#10;
for j:=0 to m-1 do
begin
s:=s+format(' %5.0f',[z[i,j]]);
end;
end;
showmessage(s);
//A: 1 1 1 b: 1 1 c: 6 6
// 2 2 2 2 2 12 12
// 3 3
end;
 
多人接受答案了。
 
后退
顶部