Strumenti Utente

Strumenti Sito


wikipaom2015:lez07

Tutorial fortran 77+ Stanford

DICHIARAZIONE DI VARIABILI IN FORTRAN 77

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.

DICHIARAZIONI DI COSTANTI

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.

Dichiarazione di costanti complesse

Per definire una variabile complessa si utilizza la notazione:

complex x

x=(PARTE_REALE , PARTE_IMMAGINARIA).

Dichiarazione di costanti in Singola e Doppia precisione

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.

OPERAZIONI TRA VARIABILI

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

ESPRESSIONI LOGICHE

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

OPERATORI LOGICI

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.

COMANDO //IF//

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(….).

CICLO DO

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.

CICLO WHILE

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

CICLO UNTIL

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)

ARRAY

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)''.

Stoccaggio degli elementi

É 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.

Potresti lasciare un commento se ti fossi autenticato.
wikipaom2015/lez07.txt · Ultima modifica: 2015/07/24 15:54 da 202447