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.

5.8 Argomenti delle Procedure 257<br />

Si noti come l’istruzione EXTERNAL non preveda i due punti (”::”). E’ bene osservare che un<br />

interface block non può essere usato per una procedura specificata in una istruzione EXTERNAL<br />

(e viceversa). Si ricordi, infine, che non è permesso in <strong>Fortran</strong> usare subroutine intrinseche<br />

come parametri attuali in una chiamata di procedura.<br />

Si riporta, a titolo di riepilogo, un ulteriore esempio che prevede l’impiego simultaneo<br />

dell’attributo INTRINSIC e dell’attributo e dell’istruzione EXTERNAL.<br />

REAL FUNCTION reciproc(reala)<br />

IMPLICIT NONE<br />

REAL, INTENT(IN) :: reala<br />

reciproc = 1/reala<br />

END FUNCTION reciproc<br />

SUBROUTINE add_nums(real1,real2,result)<br />

IMPLICIT NONE<br />

REAL, INTENT(IN) :: real1, real2<br />

REAL, INTENT(OUT) :: result<br />

result = real1+real2<br />

END SUBROUTINE add_nums<br />

SUBROUTINE do_math(arg1,arg2,math_fun,math_sub,result)<br />

IMPLICIT NONE<br />

! Parametri formali<br />

REAL, INTENT(IN) :: arg1, arg2 ! variabili argomento<br />

REAL, EXTERNAL :: math_fun ! funzione argomento<br />

EXTERNAL math_sub ! subroutine argomento<br />

REAL, INTENT(OUT) :: result ! variabile risultato<br />

! Variabili locali<br />

REAL :: temp1, temp2<br />

temp1 = math_fun(arg1)<br />

temp2 = math_fun(arg2)<br />

CALL math_sub(temp1,temp2,result)<br />

END SUBROUTINE<br />

PROGRAM proc_pass<br />

! Sezione dichiarativa<br />

IMPLICIT NONE<br />

REAL, EXTERNAL :: reciproc ! "Actual FUNCTION"<br />

REAL, INTRINSIC :: SIN ! "Actual INTRINSIC FUNCTION"<br />

EXTERNAL add_nums ! "Actual SUBROUTINE"<br />

! Dichiarazione di variabili<br />

REAL :: num1, num2, reciproc_ans, sin_ans<br />

! Sezione esecutiva<br />

READ*, num1, num2

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

Saved successfully!

Ooh no, something went wrong!