转置矩阵ada

Aja*_*ama 2 transpose ada matrix

如何在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;
Run Code Online (Sandbox Code Playgroud)

但是当A不是方形矩阵时它不起作用.任何帮助,将不胜感激.

Bri*_*ond 7

作为一个过程,这对于非方形矩阵永远不会起作用,因为输出是与输入不同的约束类型.但是您可以从合适的功能返回 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;
Run Code Online (Sandbox Code Playgroud)

为结果创建右约束类型矩阵的最简单方法是声明块:

declare
   Transposed : Matrix := Transpose(A);
begin
   -- operations on the transposed matrix
end;
Run Code Online (Sandbox Code Playgroud)