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.

198 Operazioni di I/O interattive<br />

viene eseguita al modo seguente. <strong>Il</strong> descrittore T5 causa un salto al quinto carattere del record<br />

corrente; il descrittore I4 viene poi associato alla variabile i il cui valore viene letto nel campo<br />

che va dal quinto all’ottavo carattere del record. <strong>Il</strong> descrittore TL4 indica che il campo relativo<br />

al dato successivo inizia a partire dalla quinta posizione del record corrente in quanto si ha<br />

p =8 e n =4. <strong>Il</strong> descrittore A7 viene poi associato alla variabile string il cui valore viene letto<br />

nel campo che va dal quinto all’undicesimo carattere del record. In questo modo i caratteri<br />

presenti sul record nelle posizioni dalla quinta all’ottava colonna vengono letti due volte e<br />

vengono interpretati nei due casi in modi completamente diversi. Se, ad esempio, il record letto<br />

è composto dalle successioni di caratteri:<br />

12342001/02ABCD<br />

i valori assegnati alle variabili i e string sono, rispettivamente, il numero intero 2001 e la<br />

stringa di caratteri 2001/02.<br />

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

4.6.1 Corrispondenza fra la lista di I/O e la lista di FORMAT<br />

Come è noto, mentre il programma esamina da sinistra a destra la lista delle variabili di I/O,<br />

contemporaneamente scansiona nello stesso verso la corrispondente istruzione FORMAT (sia essa<br />

esplicita o contestuale). Così, il primo descrittore di formato ripetibile incontrato all’interno<br />

dell’istruzione FORMAT viene associato al primo valore della lista di I/O, il secondo descrittore al<br />

secondo valore e così via. Naturalmente, il tipo di un descrittore di formato deve corrispondere<br />

al tipo di dato di ingresso o di uscita. Nel seguente esempio, il descrittore I3 è associato alla<br />

variabile intera Age, il descrittoreF10.2 alla variabile reale Salary, il descrittoreAalla variabile<br />

stringa State e, infine, il descrittore L2 alla variabile logica InState:<br />

CHARACTER(LEN=8) :: State = "Michigan" INTEGER :: Age<br />

= 30 REAL :: Salary = 32165.99 LOGICAL ::<br />

InState = .TRUE. ... WRITE(*,"(I4,F10.2,A,L2)")<br />

Age,Salary,State,InState<br />

Nel caso in cui le variabili nella lista di I/O non dovessero corrispondere nel tipo (o nell’ordine)<br />

ai corrispondenti descrittori di formato si verificherà un errore di run-time. Un caso del genere<br />

è rappresentato dal prossimo esempio ottenuto apportando una lieve (ma significativa) modifica<br />

al precedente frammento di programma:<br />

CHARACTER(LEN=8) :: State = "Michigan" INTEGER :: Age<br />

= 30 REAL :: Salary = 32165.99 LOGICAL ::<br />

InState = .TRUE. ... WRITE(*,"(I4,F10.2,A,L2)") Age, State, Salary,<br />

InState<br />

In questo caso, infatti, l’istruzione WRITE tenterà di stampare una variabile stringa con un<br />

descrittore valido per dati di tipo reale, ed un valore reale con il descrittore A valido esclusivamente<br />

per gli oggetti di tipo carattere. Si badi che errori di questo tipo sono abbastanza

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

Saved successfully!

Ooh no, something went wrong!