25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

6.5 Array allocabili 327<br />

!<br />

INTEGER,INTENT(IN) :: n<br />

REAL,INTENT(IN),DIMENSION(n,n) :: A<br />

END FUNCTION det<br />

END INTERFACE<br />

OPEN(UNIT=11,FILE=’matrix.dat’,STATUS=’OLD’,ACTION=’READ’)<br />

READ(11,*) n<br />

ALLOCATE(A(n,n),IOSTAT=stato)<br />

IF (stato==0) THEN<br />

READ(11,*) A<br />

CLOSE(11)<br />

! Calcolo del determinante e stampa del risultato<br />

WRITE(*,’(1X,A22,1X,G10.5)’) "<strong>Il</strong> determinante vale: ",det(n,A)<br />

ELSE<br />

WRITE(*,*) "L’allocazione della matrice e’ fallita"<br />

END IF<br />

END PROGRAM determinante<br />

!<br />

!----------------------------------------------------------<br />

!<br />

RECURSIVE FUNCTION det(n,A) RESULT(detA)<br />

! N.B.: Questa subroutine valuta il determinante della<br />

! matrice quadrata A(n,n) in maniera ricorsiva secondo<br />

! la regola di Laplace applicata alla prima riga<br />

!<br />

! Sezione dichiarativa<br />

REAL :: detA ! determinante di A (valore restituito dalla funzione)<br />

! Parametri formali<br />

IMPLICIT NONE<br />

INTEGER,INTENT(IN) :: n<br />

REAL,INTENT(IN),DIMENSION(n,n) :: A ! N.B.: array fittizio<br />

! Variabili locali<br />

INTEGER :: j<br />

REAL,DIMENSION(n-1,n-1) :: m ! N.B.:array automatico<br />

REAL :: detm ! determinante del generico minore<br />

! A e’ la matrice di cui valutare il determinante<br />

! m e’ il minore associato al generico elemento A(1,j)<br />

! Sezione esecutiva<br />

IF (n==1) THEN<br />

detA = A(1,1)<br />

ELSE<br />

detA = 0.0<br />

DO j=1,n

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!