25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

248 Unità di Programma<br />

In questo esempio, nel caso in cui l’argomento opzionale c sia presente, la funzione PRESENT<br />

fornirà valore .TRUE. e potrà essere calcolato il reciproco di c. In caso contrario, l’operazione<br />

di assegnazione permetterà di evitare una probabile divisione per zero che provocherebbe<br />

l’inevitabile interruzione del programma.<br />

Oltre all’attributo OPTIONAL, è possibile fare anche fare uso dell’istruzione OPTIONAL, la cui<br />

sintassi è:<br />

tipo :: parametri_formali<br />

OPTIONAL [::] parametri_formali_”opzionali”<br />

(si noti l’uso facoltativo dei due punti). Un esempio di utilizzo dell’istruzione OPTIONAL è fornito<br />

dalla seguente subroutine:<br />

SUBROUTINE somma(a,b,c,d,sum)<br />

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

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

OPTIONAL :: c<br />

IF (PRESENT(c)) THEN<br />

sum = a+b+c+d<br />

ELSE<br />

sum = a+b+d<br />

END IF<br />

END SUBROUTINE<br />

Nel caso in cui il parametro opzionale sia uno degli argomenti di una procedura esterna è<br />

necessario che l’interfaccia sia esplicita nel’unità chiamante. Così, ad esempio, data la funzione<br />

esterna:<br />

FUNCTION series(x,lower,upper)<br />

IMPLICIT NONE<br />

INTEGER :: i,istart,upper<br />

REAL :: series,x<br />

INTEGER, OPTIONAL :: lower<br />

IF (PRESENT(lower)) THEN<br />

istart = lower<br />

ELSE<br />

istart = 1<br />

END IF<br />

series = 0.0<br />

DO i = istart, upper<br />

series = series + x**i<br />

END DO<br />

END FUNCTION series<br />

che valuta la sommatoria m<br />

i=n xi , l’unità chiamante dovrà, evidentemente, contenere il seguente<br />

interface block:

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

Saved successfully!

Ooh no, something went wrong!