!----- Ex8_6: INTERFACEの例 ----- PROGRAM main INTERFACE REAL FUNCTION trace(sqr) REAL, INTENT(IN) :: sqr(:,:) END FUNCTION END INTERFACE ! REAL, ALLOCATABLE :: a(:,:) INTEGER :: n, i PRINT*, '正方行列の行(または列)の数は?' READ*, n ALLOCATE( a(n,n) ) DO i = 1, n PRINT '(A, I2, A)', '第', i, '行の要素?' READ *, a(i, 1:n) END DO PRINT '(A, F7.4)', 'Trace = ', trace(a) END !----- Trace of a Square Matrix FUNCTION trace(x) RESULT(tr) REAL, INTENT(IN) :: x(:,:) REAL :: tr INTEGER :: n1, n2, i n1 = SIZE(x, 1); n2 = SIZE(x, 2) IF( n1 /= n2 ) THEN PRINT*,'正方行列ではありません。' ; RETURN ELSE tr = 0.0 DO i = 1, n1 tr = tr + x(i, i) END DO END IF END FUNCTION