tipo, dimension(N) :: Adove tipo rappresenta il tipo dati primitivo dell' array (real, integer, character, logical, complex) ed N è una costante intera esprimente il numero di componenti del vettore. Un vettore può esser letto componente per componente con istruzioni del tipo:
do I=1,Noppure mediante un' unica istruzione:
read*,A(I)
end do
read*,A
o infine mediante un do implicito:read*,(A(i),i=1,N)
Analogamente si possono scrivere le componenti del vettore sostituendo read con print o write nei precedenti esempi.
Provare a scrivere due programmi che prima leggano tutte le
componenti dell' array e poi le scrivano, secondo i
primi due
metodi. Verificarne le differenze di funzionamento a seconda di come
si immettono i dati (uno alla volta seguito da "enter" o tutti
insieme seguiti da "enter"). (Suggerimento pratico: usare valori
ragionevolmente
piccoli di N)
real, dimension(:), allocatable :: A
Per far sì che venga riservata la memoria (RAM) per A sarà necessario che, una volta noto il valore di N, si esegua l' istruzione
allocate(A(N))Quando la memoria allocata non serve più la si può rilasciare al sistema operativo mediante il comando
deallocate(A)
REAL, DIMENSION(-5:10) :: Adefinisce A come array di 16 componenti (indice variabile tra -5 e 10, 0 compreso)
Scrivere un programma
che legga interi (con segno) e scriva quante
volte è stato immesso ogni intero tra -5 e 5 (ogni intero
può essere
immesso un numero arbitrario di volte). In pratica si sta chiedendo di
realizzare l' istogramma dei numeri immessi nell' intervallo
predefinito. Il modo piu' semplice di organizzare l'
elaborazione e' di utilizzare l' intero appena letto come indice
della componente dell' array da incrementare di 1. L' array va
preventivamente azzerato e va posta attenzione al caso di interi al di
fuori degli indici ammissibili.
Esempio: a fronte dell' input: -3
15 3 4 2 1 2 2 -3
22, il programma dovrebbe scrivere:
-5 0Il Fortran ammette operazioni di array. Cioè operazioni scritte usando solo il nome dell' aray ma che vengono espanse dal compilatore in operazioni su tutte le componenti dell' array. P.es. i due costrutti:
-4 0
-3 2
-2 0
-1 0
0 0
1 1
2 3
3 1
4 1
5 0
a = b +2*ce
do i=1,N a(i)=b(i) + 2*c(i) end dosono equivalenti se a,b e c sono tre array con lo stesso numero di componenti.