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