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.

322 Array Processing<br />

INTEGER :: station_number<br />

CHARACTER(LEN=several) :: name<br />

REAL, DIMENSION(length) :: date<br />

END TYPE station<br />

TYPE(station), ALLOCATABLE, DIMENSION(:) :: traverse<br />

TYPE(station) :: bench_mark<br />

INTEGER :: loop, n_stations<br />

! start<br />

READ(*,*) n_stations<br />

ALLOCATE(traverse(n_stations))<br />

DO loop = 1, n_stations<br />

READ(*,*) traverse(loop) ! Legge tutti i componenti di una struttura<br />

END DO<br />

bench_mark = traverse(1) ! Assegnazione di un’intera struttura<br />

WRITE(*,*) bench_mark ! Stampa tutti i componenti di una struttura<br />

STOP<br />

END PROGRAM strutture<br />

Un array correntemente allocato può essere deallocato mediante l’istruzione DEALLOCATE che<br />

ha lo scopo di liberare la memoria precedentemente riservata all’array rendendola disponibile<br />

per altre applicazioni. La sintassi dell’istruzione di deallocazione è la seguente:<br />

DEALLOCATE(lista_di_array [, STAT=variabile_di_stato])<br />

dove il significato e l’uso della clausola STAT=variabile_di_stato sono identici a quelli validi<br />

per l’istruzione di allocazione. E’ importante notare che una volta che un array sia stato<br />

deallocato i valori in esso immagazzinati sono perduti per sempre.<br />

L’uso combinato delle istruzioni ALLOCATE e DEALLOCATE consente di lavorare con un array<br />

allocabile di dimensioni continuamente variabili, come ben descritto dal seguente esempio:<br />

REAL, ALLOCATABLE, DIMENSION(:) :: array_variabile<br />

INTEGER :: i, n, alloc_stat, dealloc_stat<br />

...<br />

READ(*,*) n<br />

DO i=1,n<br />

ALLOCATE(array_variabile(-i:i),STAT=alloc_stat)<br />

IF(alloc_stat/=0) THEN<br />

PRINT*, "Spazio insufficiente per allocare l’array quando i = ", i<br />

STOP<br />

END IF<br />

... ! Istruzioni che coinvolgono array_variabile<br />

DEALLOCATE(array_variabile,STAT=dealloc_stat)<br />

IF(dealloc_stat/=0) THEN<br />

PRINT*, "Errore in fase di deallocazione"<br />

STOP

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

Saved successfully!

Ooh no, something went wrong!