matrixszorzas.ads
generic
type index is (<>);
type elem is private;
ZERO : IN elem;
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(1) loop
for j in res'range(2) loop
tmp := ZERO;
kb := b'first(1);
for ka in a'range(2) loop
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(1) loop
for j in m'range(2) loop
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