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.

4.6 Alcune considerazioni sulle istruzioni di I/O formattate 199<br />

subdoli in quanto tipicamente non vengono rilevati in fase di compilazione ma si manifestano<br />

solo durante l’esecuzione del programma, provocando una inevitabile interruzione del run<br />

all’atto dell’esecuzione dell’istruzione ”incriminata”.<br />

Se un descrittore di formato è associato a un fattore di ripetizione r, il descrittore sarà<br />

utilizzato il numero di volte specificato dal fattore di ripetizione, prima che venga utilizzato il<br />

successivo descrittore. Nel seguente esempio il descrittore I3 è associato alle variabili i, j e k<br />

mentre il descrittore F7.3 è associato alla sola variabile x:<br />

INTEGER :: i,j,k REAL :: x ... WRITE(*,"(1X,3(I4),F7.3)")<br />

i,j,k,x<br />

Se un gruppo di descrittori di formato racchiusi fra parentesi è associato a un fattore di ripetizione<br />

r, l’intero gruppo sarà utilizzato il numero di volte specificato dal fattore di ripetizione,<br />

prima che venga utilizzato il successivo descrittore. Ogni descrittore all’interno del gruppo sarà<br />

utilizzato ordinatamente da sinistra a destra durante ogni iterazione. Nel seguente esempio,<br />

il descrittore F7.3 viene associato alla variabile x; poi viene utilizzato due volte il gruppo di<br />

descrittori (I3,L2) e, quindi, I3 viene associato alla variabile i, L2 alla variabile y, di nuovo<br />

I3 alla variabile j e L2 alla variabile cond2. Infine A10 viene associato alla variabile str.<br />

INTEGER :: i, j REAL :: x LOGICAL<br />

:: cond1, cond2 CHARACTER(LEN=10) :: str ...<br />

WRITE(*,"(1X,F7.3,2(I3,L2),A10)") x,i,cond1,j,cond2,str<br />

4.6.2 Lista di I/O più corta della lista di descrittori di formato<br />

Se il numero di variabili della lista di I/O è minore del numero di descrittori di formato,<br />

l’applicazione del formato termina al primo descrittore che non può essere associato ad una<br />

variabile. In altre parole, una volta che tutte le variabili della lista di I/O sono state processate,<br />

l’istruzione di I/O si conclude e tutti i descrittori di formato inutilizzati vengono semplicemente<br />

ignorati. Così, ad esempio, la seguente istruzione di scrittura:<br />

INTEGER :: a = 1, b = 2, c = 4 CHARACTER(LEN=20) :: FMT =<br />

"(2I5,I3,F7.3,A10)" ... WRITE(*,FMT) a, b, c<br />

si caratterizza per la presenza di tre variabili di uscita e di cinque descrittori di formato. Ebbene,<br />

quando la lista di variabili di uscita è stata processata, il contenuto del buffer viene inviato al<br />

dispositivo di uscita e gli ultimi tre descrittori vengono del tutto ignorati. La scansione della<br />

lista diFORMAT si arresterà, pertanto, al descrittoreF7.3 che è il primo descrittore non associato<br />

ad una variabile.<br />

4.6.3 Lista di I/O più lunga della lista di descrittori di formato<br />

Se il numero di variabili della lista di I/O è maggiore del numero di descrittori di formato, il<br />

programma trasmette [risp: acquisisce] il contenuto corrente del buffer di output [risp: di input]

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

Saved successfully!

Ooh no, something went wrong!