Un array monodimensionale rappresenta una struttura dati complessa, statica e omogenea, usata in molti linguaggi di programmazione derivante dalla nozione matematica di vettore. Più precisamente, l’array è in genere classificato come un costruttore di tipo: in altre parole, esso consente di definire nuovi tipi di dati a partire da tipi preesistenti.
Nel Fortran la dimensione di 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. In modo analogo all’elemento ith dell’array C è assegnato il valore uguale all’elemento ith di A moltiplicato per 2.
Il costrutto WHERE può essere usato per assegnare i valori ai diversi elementi d’un array; vediamo come:
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`a di assegnare gli elementi del- l’ 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 lasomma 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 STAT del comando di ALLOCATE nel seguente modo:
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’assegnazione riuscisse.
LINK DI APPROFONDIMENTO PER L’ARGOMENTO:
- Programmare con Fortran
- Il comando implicit none nel Fortran
- Struttura di base di un programma Fortran
- Compilazione di un programma nel fortran
- Gli array monodimensionali nel Fortran
- Il ciclo Do implicito nel Fortran
- I cicli nel Fortran
- Espressioni logiche nel Fortran
- Le dichiarazioni di variabili nel Fortran