! interfaceの例 PROGRAM main IMPLICIT NONE INTEGER :: n, i, j REAL, ALLOCATABLE :: a(:,:) INTERFACE FUNCTION trace( x ) RESULT( tr ) IMPLICIT NONE REAL, INTENT(IN) :: x(:,:) ! 形状引継ぎ配列ですよ。 REAL :: tr END FUNCTION END INTERFACE PRINT '(1X, A)', '正方行列の行(または列)の数は?' READ *, n ALLOCATE( a(1:n,1:n) ) DO i = 1, n PRINT '(1X, A, I2, A)', '第', i, ' 行の要素?' DO j = 1, n PRINT '(1X, 2X, A, I2, A)', '第', j, ' 列の要素?' READ *, a(i,j) END DO END DO PRINT '(1X,A,F7.4)', 'trace = ', trace( a ) END PROGRAM main ! trace of a square matrix FUNCTION trace( x ) RESULT( tr ) IMPLICIT NONE INTEGER :: n1, n2, i REAL, INTENT(IN) :: x(:,:) ! 2次元配列であることだけ宣言する REAL :: tr n1 = size( x, 1 ) n2 = size( x, 2 ) IF ( n1 /= n2 ) THEN PRINT '(1X, A)', '正方行列ではありません。' return ELSE tr = 0E0 DO i = 1, n1 tr = tr + x(i,i) END DO END IF END FUNCTION trace