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.

252 Unità di Programma<br />

ma di solito non c’è alcuna ragione per preferire questa tecnica così ”rigida” alla più versatile<br />

modalità basata sull’uso delle stringhe di lunghezza presunta, tanto più che l’uso delle stringhe<br />

fittizie di lunghezza esplicita presenta l’ulteriore limitazione che la lunghezza della stringa<br />

(esplicitamente definita) deve essere necessariamente maggiore o uguale di quella della stringa<br />

effettiva.<br />

5.8.6 Tipi di dati derivati come argomenti di procedure<br />

Gli argomenti di una procedura possono essere variabili di un tipo di dati derivato purché la<br />

visibilità di questo tipo di dati sia non ambigua all’atto della chiamata di procedura. Ciò può<br />

avvenire in uno dei seguenti modi:<br />

• La procedura è interna all’unità di programma chiamante in cui il tipo di dati è definito.<br />

• <strong>Il</strong> tipo di dati derivato è definito in un modulo che sia accessibile alla procedura chiamata.<br />

L’esempio seguente mostra un utilizzo di dati di tipo derivato come argomento di una procedura.<br />

L’esempio, inoltre, mostra un esempio di utilizzo comparato di procedure interne e di modulo:<br />

MODULE miomodulo<br />

! Sezione dichiarativa<br />

IMPLICIT NONE<br />

TYPE :: new<br />

CHARACTER(LEN=3) :: str<br />

INTEGER :: j, k<br />

END TYPE new<br />

! Inizializzazione di x a mezzo di costruttore:<br />

TYPE(new) :: x=new("abc",1234,5678)<br />

! Sezione "interna"<br />

CONTAINS<br />

SUBROUTINE sub_mod_1() ! sottoprogramma di modulo<br />

! start subroutine sub_mod_1<br />

CALL sub_int()<br />

RETURN<br />

CONTAINS<br />

SUBROUTINE sub_int() ! sottoprogramma interno<br />

! start subroutine sub_int_1<br />

CALL sub_mod_2(x)<br />

RETURN<br />

END SUBROUTINE sub_int<br />

END SUBROUTINE sub_mod_1<br />

SUBROUTINE sub_mod_2(x) ! sottoprogramma di modulo<br />

TYPE(new), INTENT (IN OUT) :: x<br />

INTEGER :: int1, int2<br />

! start subroutine sub_mod_2

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

Saved successfully!

Ooh no, something went wrong!