如何在 ADA 中转置矩阵?我试过了:
procedure transpose(A: in out matrix) is
B : matrix(1..A'Last(2),1..A'Last(1));
begin
for i in A'Range(1) loop
for j in A'Range(2) loop
B(j,i):= A(i,j);
end loop;
end loop;
A := B;
end transpose;
但当 A 不是方阵时它不起作用。 任何帮助将不胜感激。
最佳答案
作为一个过程,这永远不适用于非方阵,因为输出是与输入不同的约束类型。但是,您可以从合适的函数返回 B
。
function transpose(A: in matrix) return matrix is
B : matrix(A'Range(2),A'Range(1));
begin
for i in A'Range(1) loop
for j in A'Range(2) loop
B(j,i):= A(i,j);
end loop;
end loop;
return B;
end transpose;
为结果创建具有正确约束类型的矩阵的最简单方法是声明 block :
declare
Transposed : Matrix := Transpose(A);
begin
-- operations on the transposed matrix
end;
关于matrix - 转置矩阵ada,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32523654/