Strumenti Utente

Strumenti Sito


wikipaom2015:lez07

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
wikipaom2015:lez07 [2015/05/06 10:17] 165680wikipaom2015:lez07 [2015/07/24 15:54] (versione attuale) 202447
Linea 1: Linea 1:
 +[[http://www.tat.physik.uni-tuebingen.de/~kley/lehre/ftn77/tutorial/index.html|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":
 + 
 +{{ :wikipaom2015:ciclodo_1_.png?300 |}}
 +
 +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.
 +  
 +~~DISCUSSION|Note di redazione~~
wikipaom2015/lez07.txt · Ultima modifica: 2015/07/24 15:54 da 202447