matrixszorzas.ads

generic    
   type index is (<>); 
   type elem is private
   ZERO : IN elem;   --ez kell a matrixszorzashoz, hogy a segedvaltozot ki tudjuk nullazni 
   type Matrix is array(index range <>, index range <>) of elem; 
   with function "+"(a,b : elem) return elem is <>; 
   with function "*"(a,b : elem) return elem is <>; 
function matrixszorzas(a, b : Matrix) return Matrix; 

matrixszorzas.adb

function matrixszorzas(a, b : Matrix) return Matrix is 
      
   res : matrix(a'range(1),b'range(2)); 
   tmp : elem; 
   kb : index; 
       
begin 
   for i in res'range(1loop 
      for j in res'range(2loop 
         tmp := ZERO; 
         kb := b'first(1); 
         for ka in a'range(2loop 
            tmp := tmp + a(i,ka) * b(kb,j); 
            kb := index'succ(kb); 
         end loop
         res(i,j) := tmp; 
      end loop
   end loop
       
   return res; 
end matrixszorzas; 

matrixmain.ads

with ada.text_io, matrixszorzas; 
use ada.text_io; 
 
procedure matrixmain is 
   type matrix is array(integer range <>, integer range <>) of integer; 
   function "*" is new matrixszorzas(integer, integer, 0,matrix); 
    
   procedure put_matrix(m : matrix) is 
   begin 
      for i in m'range(1loop 
         for j in m'range(2loop 
            put(integer'image(m(i,j)) & " "); 
         end loop
         new_line; 
      end loop
   end
   x : matrix(1..3,1..5) := ( (1,0,0,0,0), (0,2,0,0,0), (0,0,1,0,1) ); 
   y : matrix(3..7,3..5) := ( (2,2,2), (3,3,3), (4,4,4), (5,5,5), (6,6,6) ); 
   z : matrix := x * y; 
 
begin 
   put_matrix(z); 
end matrixmain;
 
 
VISSZA