program mdet real*8 GETDET real*8,allocatable::A(:,:) write(6,*)'dimension:' read(5,*)N allocate(A(N,N)) do 1 i=1,N write(6,*)'Line ',i,':' 1 read(5,*)(A(i,j),j=1,N) write(6,*)'Determinant:',GETDET(A,N) end REAL*8 FUNCTION GETDET(A,N) IMPLICIT none integer*4 N,I,J,K logical DETEXISTS real*8 A(N,N),M,TEMP,L real*8, allocatable::ELEM(:,:) allocate(ELEM(N,N)) DO 1 I=1,N DO 1 J=1,N 1 ELEM(I,J)=A(I,J) DETEXISTS=.TRUE. L=1.0d0 DO 2 K=1,N-1 IF(DABS(ELEM(K,K)).LE.1.0D-20)THEN DETEXISTS=.FALSE. DO 3 I=K+1,N IF(ELEM(I,K).NE.0.0d0)THEN DO 4 J=1,N TEMP=ELEM(I,J) ELEM(I,J)=ELEM(K,J) 4 ELEM(K,J)=TEMP DETEXISTS=.TRUE. L=-L EXIT ENDIF 3 CONTINUE IF (DETEXISTS.EQV..FALSE.)THEN GETDET = 0.0d0 RETURN ENDIF ENDIF DO 2 J=K+1,N M=ELEM(J,K)/ELEM(K,K) DO 2 I=K+1,N 2 ELEM(J,I)=ELEM(J,I)-M*ELEM(K,I) GETDET =L DO 5 I=1,N 5 GETDET=GETDET*ELEM(I,I) RETURN END