next up previous

Array


  • Array Unidimensionali
  • La dimensione d'un array può essere specificata da un'istruzione di specifica del tipo : REAL, DIMENSION(10) :: A INTEGER,DIMENSION(0:9):: B Qui, i due array A, B sono stati quotati con 10 scanalature di memoria. L' indice dell'array reale A inizia da 1 mentre l'indice per l'array B parte da 0. Il valore dei diversi elementi dell'array A può essere inizializzato a 1, 2, 3..., 10 da uno dei due metodi: A = (/ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 /) o, A = (/ (I, I = 1, 10) /) L'assegnazione dei valori di un array ad un altro è permessa a condizione che entrambi gli array in questione abbiano la stessa dimensione fisica. Per esempio: B = A assegna i valori precedentemente assegnati all' array di A all' array B. Gli operatori e le funzioni applicate normalmente alle espressioni semplici possono anche essere applicati agli array che hanno lo stesso numero di elementi. Per esempio, A = A + B C = 2*C assegna all'elemento ith di A il valore della somma degli elementi ith degli array A e B. Similmente, all'elemento ith della C è assegnato il valore uguale all'elemento ith di A moltiplicato per 2. La costruzione WHERE può essere usata per assegnare i valori ai diversi elementi d'un array : WHERE ( la sequenza di argomento logico) ISTRUZIONE di assegnazioni di array !Blocco 1 ELSEWHERE ISTRUZIONE di assegnazioni di array !Blocco2 END WHERE Per esempio, se ad A sono assegnati i valori A = (/ (I, I = 1.10) /) allora, possiamo studiare la possibilità di assegnare gli elementi dell' array B come WHERE (A > 5) B = 1 ELSEWHERE B = 0 END WHERE Ciò assegna alla B i valori 0, 0, 0, 0, 0, 1, 1, 1, 1, 1. Parecchie funzioni intrinseche sono disponibili per elaborare gli array. Alcuni di queste sono: DOT_PRODUCT(A, B): restituisce il prodotto scalare di A e della B MAXVAL(A) : restituisce il valore massimo degli elementi dell'array A MAXLOC(A) : restituisce la locazione di memoria del valore massimo di A PRODUCT(A) : restituisce il prodotto degli elementi di A SUM(A) : restituisce la somma degli elementi di A Un array può essere allocatable ,cioè, può essergli assegnato la locazione di memoria durante l'esecuzione. La dichiarazione di un array allocatable reale A,si effetua nel modo seguente: REAL, DIMENSION(:), ALLOCATABLE :: A Al tempo di esecuzione, i limiti reali per l'array A possono essere determinati dall'istruzione ALLOCATE (A(N)) dove la N è una variabile numero intero che precedentemente è stata assegnata. Per accertarsi che abbastanza memoria sia a disposizione per assegnare lo spazio per il vostro array, usare l'opzione di STAT del comando di ALLOCATE: ALLOCATE (A(N), STAT = AllocateStatus) IF (AllocateStatus /= 0) ARRESTO " * * * non abbastanza ***" memoria Qui, AllocateStatus è una variabile del tipo numero intero.AllocateStatus prende il valore 0 se la ripartizione riesce o un certo altro valore dipendente dalla macchina se la memoria è insufficiente. Un array può essere liberato dalla memoria usando il comando DEALLOCATE DEALLOCATE(A, Stat = DeAllocateStatus) Di nuovo, DeAllocateStatus è una variabile del tipo numero intero il cui valore è 0 se la cancellazione dell'asse- gnazione riuscisse.
  • Array multidimensionali
  • Gli array multidimensionali possono essere dichiarati nel modo seguente: REAL, DIMENSION(2,3):: A REAL, DIMENSION(0:1,0:2):: B INTEGER,DIMENSION(10,20,3):: I Il limite massimo sul Rank (il numero di dimensioni) d'un array è 7. I valori degli elementi d'un array multidimensionale possono essere assegnati in un modo simile a quello per la varietà unidimensionale. Per esempio, i valori 1, 2, 3, 4, 5, 6 possono essere assegnati all'array bidimensionale A nel modo seguente: A = (/ 1, 2, 3, 4, 5, 6 /) Ciò assegna i valori dell'array di A nell'ordine della colonna simile alle regole di fortran 77. L' assegnazione dei valori di un array ad un altro array è permessa a condizione che entrambi gli array in questione abbiano la stessa dimensione fisica. Per esempio, B = A assegna i valori precedentemente assegnati all'array A all'array B. Così come con gli array unidimensionali, gli operatori e le funzioni applicate normalmente alle espressioni semplici possono anche essere applicati agli array multidimensionali che hanno lo stesso numero di elementi. Parecchie funzioni intrinseche sono disponibili per elaborare gli array multidimensionali. Quelle più utili sono: MAXVAL(A, D): restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D è omessa, restituisce il valore massimo dell' intero array) MAXLOC(A) : restituisce la locazione di memoria del valore max lungo D di A SUM(A, D) : restituisce un array che contiene le somme degli elementi di A lungo la dimensione D (se la D è omessa, restituisce la somma degli elementi dell' intero array) MATMUL(A, B): restituisce il prodotto di A e della B TRANSPOSE(A): restituisce la trasposta del 2d array A Un array può essere allocatable ,cioè, può essere assegnato la memoria di memoria durante l'esecuzione. Dichiarare un array allocatable reale A, REAL, DIMENSION(:,:), ALLOCATABLE :: A Al tempo di esecuzione, i limiti reali per l'array A possono essere determinati dalle istruzione ALLOCATE(A(N, N), STAT = AllocateStatus) SE (AllocateStatus/ = 0) ARRESTO " * * * non abbastanza ***" di memoria Qui, la N ed AllocateStatus sono variabili di numero intero. AllocateStatus prende il valore 0 se la ripartizione riesce o uncerto altro il valore dipendente della macchina di là è memoriainsufficiente. Un array può essere liberato dalla memoria usando ilcomando di DEALLOCATE DEALLOCATE (A, Stat = DeAllocateStatus) Di nuovo, DeAllocateStatus è una variabile di numero interodi cui il valore è 0 se la cancellazione dell'assegnazione riuscisse.