1. -- 
  2. -- Jan & Uwe R. Zimmer, Australia, July 2011 
  3. -- 
  4.  
  5. package body Matrices is 
  6.  
  7.    function "*" (A, B : Matrix) return Matrix is 
  8.  
  9.       AB : Matrix; 
  10.  
  11.    begin 
  12.       for Row in Matrix'Range (1) loop 
  13.          for Col in Matrix'Range (2) loop 
  14.             declare 
  15.                Sum : Real := 0.0; 
  16.             begin 
  17.                for k in Matrix'Range (1) loop 
  18.                   Sum := Sum + (A (Row, k) * B (k, Col)); 
  19.                end loop; 
  20.                AB (Row, Col) := Sum; 
  21.             end; 
  22.          end loop; 
  23.       end loop; 
  24.       return AB; 
  25.    end "*"; 
  26.  
  27.    -- 
  28.    -- 
  29.    -- 
  30.  
  31.    function Transpose (M : Matrix) return Matrix is 
  32.  
  33.       M_T : Matrix; 
  34.  
  35.    begin 
  36.       for Row in Matrix'Range (1) loop 
  37.          for Col in Matrix'Range (2) loop 
  38.             M_T (Row, Col) := M (Col, Row); 
  39.          end loop; 
  40.       end loop; 
  41.       return M_T; 
  42.    end Transpose; 
  43.  
  44.    -- 
  45.  
  46. end Matrices;