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.

178 Operazioni di I/O interattive<br />

consente di inserire, attraverso il dispositivo di ingresso standard (ad esempio la tastiera), tre<br />

valori numerici (uno intero e due reali) che verranno interpretati secondo quanto specificato<br />

dalla istruzione FORMAT ed assegnati ordinatamente alle variabili m, x e y. Così, se ad esempio,<br />

i dati forniti dall’utente rappresentassero la seguente linea (o record) di ingresso:<br />

11, 3.14, 2.71<br />

allora l’istruzione di lettura avrebbe, ai fini della definizione dei valori di m, x e y, lo stesso<br />

effetto delle tre istruzioni di assegnazione:<br />

m = 11 x = 3.14 y = 2.71<br />

Allo stesso modo, l’effetto della esecuzione di una istruzione WRITE o PRINT è quello di valutare<br />

tante espressioni quante ne compaiono nella lista_di_uscita e di produrre poi detti valori,<br />

ordinatamente, sul mezzo di uscita standard (ad esempio il terminale video) in un formato che<br />

dipende dal tipo di ciascuno di essi ed in accordo con la specificazione di formato (quando<br />

presente). Così, ad esempio, l’esecuzione del seguente frammento di programma:<br />

REAL :: x=3.14, y=2.17 CHARACTER(LEN=4) :: str1, str2 str1="Star"<br />

str2="Wars" WRITE(UNIT=*,FMT=100) x, y, x-2*y, str1//str2 100<br />

FORMAT(1X,2(1X,F6.3),1X,E9.2/,A)<br />

produce il seguente output:<br />

3.140 2.170 -0.12E+01 StarWars<br />

Come precedentemente anticipato, un identificatore di formato può essere costituito non<br />

solo dalla etichetta di una istruzione FORMAT ma anche da una espressione carattere o da un<br />

array di caratteri. Si parla in questi casi di formato contestuale in quanto la specificazione di<br />

formato viene mutuata direttamente dal contesto della istruzione di I/O, senza che venga fatto<br />

alcun riferimento ad una apposita frase FORMAT. In particolare, se l’identificatore di formato è<br />

una espressione carattere, il valore dell’espressione viene valutato in fase di esecuzione e detto<br />

valore deve costituire una specificazione di formato valida. Un possibile esempio è il seguente:<br />

READ(*,’(I3)’) m ! formato contestuale ’’costante’’<br />

che è una forma perfettamente equivalente alla coppia di istruzioni:<br />

READ(*,100) m 100 FORMAT(I3)<br />

mentre un ulteriore esempio potrebbe essere questo:<br />

CHARACTER(LEN=10) :: formato ... formato = ’(1X,F5.2)’<br />

WRITE(*,formato) x ! formato contestuale ’’variabile’’<br />

Si noti che un formato contestuale variabile è molto più flessibile di quanto possa apparire<br />

dal precedente esempio, basti pensare al fatto che la variabile formato, che assume il valore<br />

(1X,F5.2) sul ramo di programma mostrato, su altri rami potrebbe assumere valori diversi.<br />

Naturalmente è possibile costruire una lista di specificatori di formato anche attraverso<br />

l’esecuzione di operazioni su stringhe:

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

Saved successfully!

Ooh no, something went wrong!