有一个带有程序的模块。MultXSq函数的工作方式很奇怪。在程序内部,它保存了最终矩阵的值\u200b\u200bin,里面有一个输出,一切都很好。但是在请求输出这个带有结果的矩阵时,会返回一个带有零的矩阵。
程序
uses UnitArray.
UnitArray in 'UnitArray.pas';
var
masX1: TMatrix;
masX2: TMatrix;
masXRez: TMatrix;
begin
AddRandomData(masX1);
AddRandomData(masX2);
print(masX1);
writeln;
print(masX2);
MultXSq(masX1, masX2, masXRez); //умножение матриц, внутри процедуры матрица Z (третья) содержит значения
writeln;
print(masXRez); //уже пусто???
end.
模块
unit UnitArray;
interface
Const N = 3;
M = 3;
Type TVector = array[1..N] of integer;
TMatrix = array[1..M] of TVector;
Procedure AddRandomData(var X:TMatrix);
Procedure Print(const X:TMatrix);
Procedure MultXSq(var X:TMatrix; Y:TMatrix; Z:TMatrix);
implementation
procedure Print(const X:Tmatrix); //вывод матрицы на экран
var i,j:integer;
begin
for i := 1 to M do
begin
for j := 1 to N do
write(X[i,j]:3);
writeln;
end;
end;
procedure AddRandomData(var X:TMatrix); //рандомим значения матрицы
var i,j:integer;
begin
// randomize;
for i := 1 to M do
for j := 1 to N do
X[i,j] := random(10);
end;
Procedure MultXSq(var X:TMatrix; Y:TMatrix; Z:TMatrix);
var i,j,j2,sum: integer;
begin
writeln;
sum := 0;
for i := 1 to M do
begin
for j2 := 1 to M do
begin
for j := 1 to M do
sum := sum + X[i,j] * Y[j,j2];
Z[i,j2] := sum; //сохраняем значение
sum := 0;
end;
end;
writeln(Z); //вот тут выводится матрица нормально
end;
initialization
finalization
end.
好吧,您发送一份副本:
通过引用传递所有参数: