Ogni variabile deve essere definita in una dichiarazione per indicarne la sua tipologia. Tra le variabili più comuni troviamo:
integer a
variabile intera,
real b
variabile reale.
Se una variabile non viene dichiarata esplicitamente, viene allocata in modo automatico: in particolare tutte le variabili comprese tra la lettera i e n saranno allocate come variabili intere, tutte le altre come variabili reali.
La dichiarazione delle variabili non é obbligatoria, ma é fortemente consigliata per evitare futuri errori nel programma.
Per questo motivo nella stesura del programma si consiglia l'uso del comando implicit none
per poter disattivare la dichiarazione implicita, così ci obbliga a prendere in considerazione ogni volta la dichiarazione delle variabili.
Il comando implicit none
non era incluso nella versione originale dell' ANSI FORTRAN77, ma fu implementato con il FORTRAN MIL-STD-1753 del 1978.
Per quanto riguarda le costanti é preferibile definirle una sola volta all'interno del programma usando il comando parameter pi=3,14159
, così da poterle richiamare all'occorrenza.
Con il comando parameter
la costante definita non può più essere cambiata durante il programma, mentre se utilizziamo il comando real pi=3,14159
é possibile variare il valore di pi durante l'esecuzione del programma.
Per definire una variabile complessa si utilizza la notazione:
complex x
x=(PARTE_REALE , PARTE_IMMAGINARIA)
.
Per le costanti che richiedono una precisione maggiore é possibile utilizzare il comando per doppia precisione che tiene conto di un maggior numero di cifre significative.
Per definire una costante in doppia precisione si utilizza il comando pi=3,14159d0
Per valutare una variabile reale in doppia precisione, invece si utilizza il comando: dble(x)
.
Se vogliamo valutare una operazione in doppia precisione possiamo utilizzare due metodologia diverse: w=dble(x)*dble(y)
, in modo che il risultato sia un prodotto tra due numeri in doppia precisione, oppure w=dble(x*y)
con x e y considerati in singola precisione e il prodotto viene convertito successivamente in doppia.
Tutte le operazioni fra 2 interi danno come risultato un numero intero
3/2 –> 1 ERRORE!
3.0/2.0 –> 1.5 operazioni tra reali danno un reale
3./2. –> 1.5
3/2. –> 1.5
Le espressioni logiche possono avere solamente il valore .TRUE.
oppure .FALSE.
.
Una espressione logica può essere valutata eseguendo un confronto fra delle espressioni aritmetiche utilizzando i seguenti operatori relazionali:
.LT. <
.LE. =<
.GT. >
.GE. >=
.EQ. =
.NE. /=
Due numeri reali sono considerati uguali se sono più vicini di una certa quantitá, per questo è necessario definire una tolleranza per eseguire un corretto controllo di uguaglianza, scrivendo il valore assoluto:
abs(x-y).LT.1e-6
Gli operatori logici sono:
.AND. —> rende vera la condizione soltanto nel caso in cui entrambe le condizioni siano vere.
.OR. —> basta che una delle 2 condizioni sia vera.
.XOR. —> quando solo una delle due condizioni é vera, ma non tutte e due.
.NOT. —> rende falsa una condizione, quindi prende per vera una condizione che é falsa.
Nell'eseguire il confronto, la macchina esegue prima le espressioni aritmetiche, poi gli operatori relazionali e infine gli operatori logici.
Consideriamo il seguente esempio:
a=.TRUE.
b=a.AND.3.LT.5/2
In questo caso, l'elaboratore prende per vera la condizione “a”, e “b” sarà vera soltanto se “a” é vera e se 3<5/2.
In questa caso quindi “b” é falsa.
La più comune istruzione utilizzata per imporre delle condizioni é l'IF.
Il suo uso più frequente é l'IF logico
if(espressione_logica) istruzione
Se dobbiamo effettuare più istruzioni all'interno dell'if, deve essere utilizzata la seguente sintassi:
if(espressione_logica) then
istruzione
endif
Se invece dobbiamo considerare più espressioni logiche é possibile utilizzare il costrutto
elseif(espressione_logica)
oppure solo else
:
if(espressione_logica) then
istruzione
elseif(espressione_logica) then
istruzione
else
istruzione
endif
per il solo else
non bisogna scrivere l'espressione logica, perché esso comprende tutte le altre condizioni che non si sono verificate con l'if(….)
o con l'elseif(….)
.
Per ripetere determinate operazioni più volte si può utilizzare un ciclo “do”:
le istruzioni contenute dalla riga 7 alla riga 9, vengono ripetute con il comando do i=0,20,4
:ciò significa che “i” parte dal valore iniziale 0, e arriva a 20 con passo 4.
Se il passo non é specificato, di default la macchina prende 1.
Con il ciclo while
il programma valuta le varie istruzioni e le esegue solo nel caso in cui risultino vere; nel caso in cui siano false il programma non esegue nulla.
while(espressione_logica) do
istruzione
enddo
Se utilizzo questa espressione logica, l'istruzione viene eseguita almeno una volta. L'istruzione viene eseguita finché non si verifica un'altra condizione.
do
istruzione
until(espressione_logica)
Gli array sono una sequenza di elementi immagazzinati consecutivamente in memoria. Gli array possono essere monodimensionali, ed in questo caso rappresenta un vettore, oppure bidimensionali, che invece rappresenta una matrice.
Esempio di array monodimensionale
''real a(20)'' che rappresenta un vettore reale a 20 elementi di nome "a". Per richiamare un solo elemento del vettore, basta scrivere ''a(numero_elemento)''. Se si vuole specificare un preciso range di indici degli elementi del vettore, é possibile utilizzare la scrittura ''real b(0:19)'', in questo caso é sempre un vettore di 20 elementi in cui il primo é ''b(0)'' e l'ultimo é ''b(19)''.
Esempio di array bidimensionale
''real A(3,5)'' definisce una matrice 3x5, 3 righe e 5 colonne, di nome "A". Per richiamare un elemento della matrice si utilizza un metodo simile a quello degli array monodimensionali: ''A(1,3)''.
É possibile stoccare una matrice che é bidimensionale nella memoria di un vettore che é monodimensionale. Esistono due modalità di stoccaggio: per righe o per colonne. Con lo stoccaggio per colonne, ogni colonna é lunga quanto sono il numero di righe. Per poter leggere gli elementi della matrice devo sempre tener conto del numero di righe se stocco per colonne, cioè devo sapere quanti blocchi devo saltare per andare a leggere il nostro elemento della matrice. Tutte le variabili sono definite come delle posizioni di memoria.