Fortran: la sintassi

Gli array


In molte situazioni, lavoorare con variabili  singole dotate di un nome individuale puo'  rsultare limitante. Per esempio,  se il programma deve manipolare dati sperimentali caratterizzati da un numero d' ordine risulterebbe utie poter utiizzare qualcosa di analogo alle successioni matematiche (variabili con indici: funzioni che ad interi successivi associano valori diversi).

I linguaggi di programmazione di alto livello mettono a disposizione tipi dati o modifiche dei tipi dati primitivi per poter rspondere a queste necessita'. Il Fortran introduce un tipo dati derivato, gli array, mediante l'  attributo DIMENSION aggiunto alla dichiarazione del tipo dati delle variabili dei 5 tipi dati primitivi.

Gli array possono quindi pensarsi come caratterizzati da un nome collettivo e  da un indice che seeziona le varia componenti del'  array.

Il numero di indici (rango,  rank)  di un array Fortran puo'  andare da 1 a 7. Nel seguito ci limiteremo, per semplicita'  ad array di rango 1 (1 indice).

Gli indici degli array Fortran possono assumere qualsiasi sequenza consecutiva di valori interi. Quindi il minimo indice puo'  corrispondere a qualsiasi intero (positivo o negativo).

Il numero di componenti dell'  array (grandezza, size)  puo' essere dichiarato al momento della compilazione e quindi essere inserito esplicitamente nel programma (alocazione statica) o puo'  essere stabiito durante l' esecuione (alocazione dinamica).

Nel primo caso e'  il compilatore che riserva sufficiente spazio per l'  array. Nel secondo il programma, quando deve riservare (allocare)  un certo numero di locazioni di memoria per l'  array, invia una richiesta al sistema operativo.

Il seguente frammento di programma mostra una dichiarazione di due array statici, entrambi di 5 componenti, ma l' array x ha indice che puo' assumere i valori 1,2,3,4,5  (il valore di partenza di default per l'  indice e' 1)  mentre y ha indici che possono essere: -2,-1,0,1,2

real, dimension (5)     :: x
real, dimension (-2:2) :: y
In caso di alocazione dinamica si indica solo il numero di indici mediante il carattere "segnaposto" (:) senza dare indicazioni numeriche fino all' esecuzione nel programma dell' istruzione ALLOCATE. Ad esempio il frammento precedente, in caso di alocazione dinamica diverrebbe:
real, dimension(:),allocatable :: x,y
...
! e, supponendo che le variabili n, m1,m2 contengano rispettivamente i valori 5,-2,2
allocate(x(n))
allocate(y(m1:m2))
...
! elaborazione che coinvolge x e y
deallocate(x,y)
Le istruzioni che utilizzano array possono lavorare sulle singole componenti come se fossero variabili normali, p.es.:
x(2)=3.4+x(1)
oppure "collettivamente" su tutte le componenti. Se in un espressione appaiono piu' nomi di array questi devono essere "conformati", cioe' devono avere lo stesso numero di indici e la stessa estensione (numero di componenti). Es:
program arry
implicit none
real, dimension (5) :: x,t
real, dimension (-2:2) :: y
...
t = 2*sqrt(x)+x
y=3.3

che e' equivalente alla sintassi esplicita:
...
do i=1,5
t(i) = 2*sqrt(x(i)) + x(i)
end do
do i=-2,2
y(i) = 3.3
end do