program assign3_2
use quadratic
implicit none
integer :: i
integer,parameter :: n=2,m=1
real :: a(n,n),b(m,n),d(m,m),e,quad1
a=reshape((/1,3,2,5/),(/n,n/))
b=reshape((/5,11/),(/m,n/))
print*,'A matrix & B'
do i=1,n
print*,a(i,:),b(m,i)
enddo
d=matmul(matmul(b,a),transpose(b))
print*,'Matmul =',d
e=quad1(a,b,n,m)
print*,'External function :',e
e=quad2(a,b,n,m)
print*,'Internal function :',e
e=quad(a,b,n,m)
print*,'Module :',e
contains
function quad2(a,b,n,m) result(c)
integer :: n,m
real :: c,a(n,n),b(m,n),f(m,m)
f=matmul(matmul(b,a),transpose(b))
c=f(m,m)
end function
end program assign3_2
function quad1(a,b,n,m) result(c)
integer :: n,m
real :: c,f(m,m),a(n,n),b(m,n)
f=matmul(matmul(b,a),transpose(b))
c=f(m,m)
end function