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 255<br />

nel caso in cui il parametro formale sia una function, la dichiarazione del tipo della funzione<br />

dovrà includere l’attributo EXTERNAL, al modo seguente:<br />

tipo, EXTERNAL :: nome_function<br />

Questa dichiarazione serve a specificare che il parametro formale è il nome di una funzione e non<br />

il nome di una variabile. Anche il corrispondente argomento attuale dovrà essere dichiarato,<br />

nell’unità di programma chiamante, con l’attributo EXTERNAL o, se è il nome di una funzione<br />

intrinseca, con l’attributo INTRINSIC:<br />

tipo, EXTERNAL :: nome_function<br />

tipo, INTRINSIC :: nome_function_intrinseca<br />

Le seguenti dichiarazioni forniscono un esempio di quanto detto:<br />

INTEGER, EXTERNAL :: func<br />

REAL, INTRINSIC :: sin<br />

Si noti che non tutte le funzioni intrinseche possono essere passate come parametri attuali in<br />

una chiamata di procedura. In particolare è illegale l’uso delle funzioni di conversione di tipo<br />

(REAL, DBLE, ...).<br />

<strong>Il</strong> seguente codice di calcolo mostra un esempio di funzione di modulo usata come parametro<br />

attuale in una chiamata di procedura. Lo scopo del programma è quello di valutare l’integrale<br />

della suddetta funzione, f(x), fra due estremi a e b con il metodo del trapezio secondo un<br />

approccio di tipo iterativo.<br />

MODULE function_mod<br />

IMPLICIT NONE<br />

CONTAINS<br />

FUNCTION f(x) RESULT(f_result)<br />

IMPLICIT NONE<br />

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

REAL :: f_result<br />

f_result = EXP(-x**2) ! Funzione integranda<br />

END FUNCTION f<br />

END MODULE function_mod<br />

MODULE integral_mod<br />

IMPLICIT NONE<br />

CONTAINS<br />

RECURSIVE FUNCTION integral(f,a,b,epsilon) RESULT(integral_result)<br />

IMPLICIT NONE<br />

REAL, INTENT (IN) :: a, b, epsilon<br />

REAL :: integral_result, f<br />

EXTERNAL f<br />

REAL :: h, mid

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

Saved successfully!

Ooh no, something went wrong!