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.

284 Unità di Programma<br />

IMPLICIT NONE<br />

REAL :: yval<br />

REAL, DIMENSION(2) :: xbounds, ybounds<br />

CONTAINS<br />

FUNCTION f(xval)<br />

REAL :: f<br />

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

r = ... ! Espressione che coinvolge xval e yval<br />

END FUNCTION f<br />

END MODULE func<br />

e, quindi, integrare su x per un particolare valore di y al modo seguente:<br />

FUNCTION fy(y)<br />

USE func<br />

IMPLICIT NONE<br />

REAL :: fy<br />

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

yval = y<br />

r = integrate(f,xbounds)<br />

END FUNCTION fy<br />

L’integrazione sull’intero rettangolo potrebbe, così, avvenire a mezzo dell’unica chiamata di<br />

procedura:<br />

volume = integrate(fy,ybounds)<br />

5.16 Procedure generiche<br />

Accade spesso che le operazioni eseguite da una procedura su un particolare tipo di dati possano<br />

essere eseguite in un modo formalmente analogo anche su tipi di dati differenti. Ad esempio, una<br />

procedura scritta per ordinare in senso crescente gli elementi di un array reale sarà formalmente<br />

identica ad una procedura che, invece, sia stata scritta per ordinare gli elementi di un array<br />

intero: l’unica differenza fra le due procedure sarà il tipo dei parametri formali. Per comodità,<br />

il <strong>Fortran</strong> <strong>90</strong>/<strong>95</strong> permette a due o più procedure di essere chiamate con lo stesso nome generico:<br />

quale delle due (o più) procedure verrà effettivamente invocata in una istruzione di chiamata<br />

dipenderà esclusivamente dal tipo (e/o dal rango) degli argomenti attuali. Questa proprietà è<br />

nota come polimorfismo.<br />

Una procedura generica è definita usando un generic interface block che specifichi il nome<br />

comune per tutte le procedure definite nel blocco. La forma generale di questo costrutto è la<br />

seguente:<br />

INTERFACE nome_generico<br />

corpo dell’interfaccia<br />

END INTERFACE

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

Saved successfully!

Ooh no, something went wrong!