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.

212 Operazioni di I/O interattive<br />

Si faccia però attenzione a non inserire nel file di input il nome di una variabile non<br />

appartenente al gruppoNAMELIST, in quanto ciò provocherebbe un errore al tempo di esecuzione.<br />

In una lista di input un valore può essere ripetuto utilizzando un opportuno fattore di<br />

ripetizione (una costante intera senza segno seguita da un asterisco) inserito prima del valore<br />

da ripetere. Ad esempio, la frase:<br />

7*"Hello"<br />

ha come effetto quello di assegnare la stringa Hello a sette elementi consecutivi di tipo<br />

CHARACTER (potrebbero essere sette elementi consecutivi di un array o una lista di sette stringhe).<br />

Un fattore di ripetizione non seguito da alcun valore indica un valore nullo multiplo ed il<br />

valore delle corrispondenti variabili non sarà, pertanto, alterato. Al fine di chiarire quest’ultimo<br />

concetto, si consideri il seguente esempio:<br />

INTEGER, DIMENSION(102) :: vettore vettore = 10, 50*25, 50*, -101<br />

vettore(42) = 63<br />

Questo frammento di programma ha come effetto quello di assegnare il valore 10 al primo elemento<br />

dell’array vettore, assegnare il valore 25 agli elementi dal secondo al cinquantunesimo,<br />

lasciare inalterati i valori dal cinquantaduesimo fino al penultimo, assegnare il valore -101 all’ultimo<br />

elemento dell’array. Infine il valore del quarantaduesimo elemento di vettore viene<br />

aggiornato a 63.<br />

Un’altra possibilità per realizzare una assegnazione di valore nullo ad un elemento di array<br />

è quella di inserire, nella lista dei valori da assegnare ai componenti dell’array, due virgole<br />

consecutive in corrispondenza del componente da lasciare inalterato. Ad esempio, data la<br />

seguente definizione:<br />

INTEGER, DIMENSION(5) :: array=0 NAMELIST/mialista/array,... ...<br />

READ(*,NML=mialista)<br />

se il file di input fosse:<br />

&mialista array = 1,2,,4,5 ...<br />

il valore di array sarebbe:<br />

(1,2,0,4,5)<br />

4.10 Non-advancing I/O<br />

Le operazioni READ e WRITE su file ad accesso sequenziale sono per default di tipo advancing.<br />

Questo significa che il file è automaticamente posizionato all’inizio del record successivo a quello<br />

appena letto o scritto prima che il successivo trasferimento di dati abbia luogo, oppure alla fine<br />

del record quando l’operazione di I/O è stata completata.<br />

Esistono, tuttavia, situazioni in cui è conveniente leggere o scrivere solo parte di un record,<br />

rimandando la lettura o la scrittura della restante parte. A tale scopo il <strong>Fortran</strong> <strong>90</strong>/<strong>95</strong> mette a

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

Saved successfully!

Ooh no, something went wrong!