Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica
15 – IL LINGUAGGIO FORTRAN
Marco Lapegna
Dipartimento di Matematica e Applicazioni Universita’ degli Studi di Napoli Federico II wpage.unina.it/lapegna
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al Fortran
Evoluzione del FORTRAN
il FORTRAN (FORmula TRANslation) e’ il primo esempio di linguaggio di programmazione ad
alto livello
• FORTRAN I (1956) *
• FORTRAN II e FORTRAN III (1958)
• FORTRAN IV (1961)
• FORTRAN 66 *
• FORTRAN 77 *
• FORTRAN 90 *
• FORTRAN 95
• FORTRAN 2003 *
• FORTRAN 2008
Continue evoluzioni per adattarsi a nuove e piu’
sofisticate esigenze del calcolo scientifico
Ancora oggi e’ il principale linguaggio di programmazione per le applicazioni scientifiche
* major revisions
uno dei primi manuali Fortran (1960)
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al Fortran
Passi per risolvere un problema con il calcolatore
1. Formulazione del problema
2. Formulazione del modello matematico 3. Formulazione del modello discreto 4. Sviluppo dell’algoritmo
5. sviluppo del programma, cioe’ traduzione dell’algoritmo in un linguaggio di
programmazione ad alto livello
• Di nostra competenza i passi 4 e 5
• Molto lavoro per il passo 4
• Passo 5 semplice ed automatico !!
• Importante solo rispettare la sintassi
passi per la risoluzione di un problema scientifico con il calcolatore
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
Inizio e fine in Pascal-like
Equivalente Fortran
Inizio e fine programma
•Ogni programma FORTRAN e’ compreso tra le istruzioni PROGRAM e END
•L’istruzione PROGRAM da’ il nome al programma
•Ogni programma termina con END
•Analogo di begin ed end per il Pascal Like
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
Dichiarazione variabili in Pascal-like
Equivalente in Fortran
Dichiarazione delle variabili
•5 tipi di dati fondamentali
•Il FORTRAN e’ Case Unsensitive (non fa differenza tra maiuscole e minuscole)
•Possibile (ma non consigliato) non dichiarare le variabili
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
Commenti in P-L
Equivalente in Fortran
commenti
I commenti sono linee di testo inserite nel codice che non vengono tradotte dal compilatore
Hanno lo scopo di migliorare la leggibilita’ dei programmi, descrivendo le sezioni del programma o anche gruppi di istruzioni
E’ buona norma inserire numerose linee di commento (anche fino al 50% delle linee dl programma)
In Fortran le linee di codice iniziano con un il carattere !
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
Lettura, scrittura e assegnazione in P-L
Equivalente in Fortran
Lettura, definizione e stampa delle variabili
•READ* definisce una o piu’ variabili mediante l’unita’ di input (es. la tastiera)
•PRINT* stampa il contenuto di una variabile sull’unita’ di output (es. il monitor)
•L’operatore = indica una operazione di assegnazione di un valore ad una variabile
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
If-then-else in pascal-like
Equivalente in Fortran
Struttura di selezione
•Esatta corrispondenza con il Pascal Like
•Disponibile anche senza il ramo ELSE
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
Esempi di operatori logici e relazionali in P-L
Equivalente in Fortran
Operatori logici e relazionali
• Vengono eseguiti prima gli operatori relazionali ( > , < , == , /= , >= , <= )
• Poi quelli logici (.NOT. , .AND. , .OR.)
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
For-endfor in Pascal-like
Equivalente in Fortran
Struttura di iterazione for
•Il campo K e’ opzionale, se assente si sottointende 1
•Piu’ strutture innestate richiedono indici distinti
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
Repeat-until in Pascal-like
Equivalente in Fortran
Struttura di iterazione repeat
•Ripete piu’ volte le istruzioni tra repeat e until
•Quanto la condizione risulta vera la struttura di iterazione termina
•Non esiste una traduzione “diretta”
•Realizzato mediante simulazione di DO- ENDDO + condizione di uscita
• IF (condizione) EXIT immediatamente prima di ENDDO
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
While-endwhile in pascal-like
Equivalente in Fortran
Struttura di iterazione while
• Ripete piu’ volte le istruzioni tra while e endwhile
• Quanto la condizione risulta vera la struttura di iterazione continua
• Non esiste una traduzione “diretta”
• Realizzato mediante simulazione di DO- ENDDO + condizione di uscita
• IF (.NOT. condizione) EXIT immediatamente dopo di DO
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
Dichiarazione e lettura di un array in P-L
Equivalente in Fortran
Gli array
• in fase di dichiarazione e’ necessario specificare la dimensione
• successivamente non e’ possibile modificare la dimensione
• e’ possibile fare riferimento a ciascuna componente tramite un indice
• in memoria le componenti di un array occupano locazioni di memoria consecutive
• gli array 2-dimensionali sono memorizzati per colonne in locazioni consecutive
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
Chiamata di una procedura in Pascal-like
Equivalente SUBROUTINE in Fortran
Sottoprogrammi SUBROUTINE
•Procedura Fortran invocata attraverso l’istruzione CALL
•L’istruzione CALL passa il controllo dell’esecuzione alla subroutine
•Riceve i valori di input e restituisce quelli di output attraverso una lista di argomenti
•L’esecuzione del programma chiamante riprende dopo il termine della subroutine
Gli argomenti nella chiamata rappresentano l’unico strumento di comunicazione tra
programma chiamante e subroutine
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
Procedura in Pascal-like
Equivalente SUBROUTINE in Fortran
Sottoprogrammi SUBROUTINE
•il passaggio delle informazioni e’ per indirizzo (della variabile)
•la subroutine opera sulle stesse locazioni di memoria del programma chiamante
•non c’e’ quindi differenza tra parametri di input e di output
•E’ possibile utilizzare nomi diversi nelle subroutine e nel programma chiamante
•variabili non presenti nella testata non sono visibili dal programma chiamante
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
Nel caso di array viene passato solo l’indirizzo della prima componente
- Allocazione di array in locazioni consecutive - Passaggio per indirizzo (la subroutine opera
sulle stesse locazioni di memoria)
Da queste informazioni la subroutine e’ in grado di “ricostruire” tutto l’array
Quindi
E’ possibile evitare di dichiarare gli array nelle subroutine specificando una dimensione fissata
Passaggio per indirizzo di una array A(9)
SUBROUTINE ed array
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
OSSERVAZIONE: array con 2 indici (memorizzati per colonna)
Viene passato alla subroutine Solo l’indirizzo di A(1,1)
Problema:
Se programma chiamante e subroutine dichiarano l’array con numero di righe differente, fanno riferimento alla stessa
variabile con indici diversi
Esempio:
• Nel programma chiamante A(3,3)
• Nella subroutine X(M,M) con M=2
Disallineamento degli indici di una matrice tra programma chiamante e subroutine a causa del
diverso numero di righe nella dichiarazione
SUBROUTINE ed array
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
Passare alla subroutine anche l’effettivo numero di righe dell’array Leading Dimension ( LD )
• Numero di righe con cui si e’ dichiarato l’array nel programma chiamante
• Utilizzato solo nella dichiarazione dell’array nella subroutine
• Permette il corretto allineamento degli indici tra le due unita’ di programma
Corretto allineamento degli indici utilizzando la leading dimension dell’array
soluzione
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
Chiamata di una procedura in Pascal-like
Equivalente FUNCTION in Fortran
Sottoprogrammi FUNCTION
•Procedura Fortran invocata direttamente attraverso il nome
•Alternativa alle subroutine
•Restituisce un valore attraverso il nome
•Utile per definire funzioni matematiche
•L’istruzione EXTERNAL:: FUN dichiara FUN come function
•L’istruzione REAL:: FUN dichiara il tipo della funzione
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
Procedura in Pascal-like
Equivalente FUNCTION in Fortran
Sottoprogrammi FUNCTION
•Il valore di ritorno e’ assegnato ad una variabile con lo stesso nome della function
•Stesso meccanismo di passaggio di argomenti delle subroutine
•Una function puo’ essere passata come argomento ad una SUBROUTINE
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
Il Fortran dispone di una libreria di function intrinsiche per le piu’ comuni funzioni
matematiche e/o di utilita
• Y = SQRT(X)
• Y = ABS(X)
• Y = TAN(X)
• Y = SIN(X)
• Y = COS(x)
• Y = LOG(X)
• Y = LOG10(X)
• Y = EXP(X)
• Y = MAX(A1, A2, A3, …)
• Y = MIN(A1, A2, A3, …)
• Y = MOD(A, P)
• Y = INT(X)
• E tante altre…
Semplice programma per il calcolo di 11 valori di sin(x) nell’intervallo [0,3.14]
Funzioni intrinsiche
Marco Lapegna –
Laboratorio di Programmazione 15. Introduzione al Fortran
R. Stallman
Il logo della Free Software Foundation
Un po’ di storia (15)
Richard Stallman (1953)
• Americano, si laurea in Fisica ad Harvard nel 1974 e’ il principale esponente del movimento per il software libero, nato alla fine degli anni ’70 a seguito delle leggi americane sul copyright
• Il software libero e’ un software distribuito con una licenza che ne permette la distribuzione, lo studio e la modifica da parte di altri (licenza GPL)
• Fonda la Free Software Foundation per contrastare ogni forma di proprieta’ sul software e sviluppare nuovo software libero.
• Nel 1983 inizia il progetto GNU, una versione di Unix con licenza GPL. Linus Torval utilizzera’ nel 1990 il sistema GNU come base del s.o. Linux
• Ha ricevuto numerosi premi, lauree honoris causa e cattedre onorarie