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

5.8.5 Variabili stringa di caratteri come parametri formali<br />

Quando una stringa di caratteri viene utilizzata come argomento fittizio di una procedura la<br />

sua lunghezza viene dichiarata con un asterisco. Poiché la memoria non viene allocata per gli<br />

argomenti fittizi, non è necessario conoscere la lunghezza di un argomento stringa quando la<br />

procedura viene compilata. Ecco un tipico esempio di argomento fittizio stringa di caratteri:<br />

PROGRAM main<br />

CHARACTER(LEN=10) :: nome<br />

...<br />

CALL sub(nome)<br />

...<br />

CONTAINS<br />

SUBROUTINE sub(mia_stringa)<br />

CHARACTER(LEN=*), INTENT(IN) :: mia_stringa<br />

...<br />

END SUBROUTINE sub<br />

END PROGRAM main<br />

All’atto della chiamata di procedura, la lunghezza dell’argomento fittizio stringa sarà pari alla<br />

lunghezza dell’argomento effettivo che verrà passato dall’unità chiamante. Per conoscere la<br />

lunghezza dell’argomento durante l’esecuzione della subroutine è possibile usare la funzione intrinseca<br />

LEN. Ad esempio, la seguente subroutine visualizza la lunghezza dell’argomento stringa<br />

che riceve in input dall’unità chiamante:<br />

SUBROUTINE sub(mia_stringa)<br />

CHARACTER(LEN=*), INTENT(IN) :: mia_stringa<br />

WRITE(*,’(1X,A,I3)’) "Lunghezza della variabile = ", LEN(mia_stringa)<br />

...<br />

END SUBROUTINE sub<br />

Un parametro formale come mia_stringa viene detto stringa fittizia di lunghezza presunta<br />

(assumed-length character). Secondo un approccio molto meno flessibile sarebbe possibile anche<br />

dichiarare un argomento formale come una stringa fittizia di lunghezza esplicita (explicit-length<br />

character), come nel seguente esempio:<br />

PROGRAM main<br />

CHARACTER(LEN=10) :: nome<br />

...<br />

CALL sub(nome)<br />

...<br />

CONTAINS<br />

SUBROUTINE sub(stringa_fissa)<br />

CHARACTER(LEN=15), INTENT(IN) :: stringa_fissa<br />

...<br />

END SUBROUTINE sub<br />

END PROGRAM main

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

Saved successfully!

Ooh no, something went wrong!