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.

6.3 Array fittizi di forma presunta 315<br />

dell’esempio precedente sono array automatici. A questa classe di array sarà dedicato uno dei<br />

prossimi paragrafi.<br />

Un aspetto importante da osservare è che, quando degli array di forma esplicita vengono<br />

”passati” in istruzioni di chiamata di procedura, non è necessario che i limiti degli array<br />

corrispondenti nelle liste dei parametri attuali e formali coincidano perfettamente, essendo necessario<br />

unicamente una coincidenza delle estensioni lungo ciascuna dimensione. Ad esempio,<br />

considerata la seguente subroutine:<br />

SUBROUTINE explicit(a,b,m,n)<br />

IMPLICIT NONE<br />

INTEGER, INTENT(IN) :: m, n<br />

REAL, DIMENSION(m,n*n+1), INTENT(INOUT) :: a<br />

REAL, DIMENSION(-n:n,m,INT(m/n)), INTENT(OUT) :: b<br />

...<br />

END SUBROUTINE explicit<br />

il seguente frammento di procedura chiamante è perfettamente valido:<br />

REAL, DIMENSION(15,50) :: p<br />

REAL, DIMENSION(15,15,2) :: q<br />

...<br />

CALL explicit(p,q,15,7)<br />

sebbene soltanto il primo array, p, coincida in estensione e limiti (1:15 e 1:50) con il parametro<br />

formale a, mentre per quanto riguarda il secondo array, q, oltre alle estensioni coincidono<br />

soltanto i limiti delle ultime due dimensioni.<br />

Una delle maggiori difficoltà associate all’uso di array di forma esplicita in chiamate di<br />

procedura è rappresentato dalla necessità di fornire informazioni necessarie alla valutazione dei<br />

limiti degli array; tipicamente ciò viene fatto, come visto, incrementando la lista dei parametri<br />

formali. Una soluzione più efficace ed elegante è quella di utilizzare array di forma presunta,<br />

come sarà spiegato nel prossimo paragrafo.<br />

6.3 Array fittizi di forma presunta<br />

Un array fittizio di forma presunta (assumed shape array) è un particolare array la cui forma<br />

non è nota in fase di compilazione, bensì gli viene attribuita a mezzo di una istruzione di<br />

chiamata di procedura.<br />

Quando un array di forma presunta viene dichiarato, ciascuna dimensione viene specificata<br />

come:<br />

[limite_inferiore]:<br />

in cui il limite_inferiore vale uno per default.<br />

Gli assumed shape array rendono possibile il trasferimento di array tra diverse unità di programma<br />

senza la necessità di doverne passare, nella lista degli argomenti, anche le dimensioni.

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

Saved successfully!

Ooh no, something went wrong!