introduzione al linguaggio Fortran

Transcript

introduzione al linguaggio Fortran
14/03/2016
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
FORTRAN
FORTRAN
FORTRAN
FORTRAN
FORTRAN
FORTRAN
FORTRAN
FORTRAN
I (1956) *
II e FORTRAN III (1958)
IV (1961)
66 *
77 *
90 *
95
2003 *
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
uno dei primi manuali Fortran (1960)
* major revisions
1
14/03/2016
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
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al Fortran
passi per la risoluzione di un problema scientifico
con il calcolatore
Inizio e fine programma
•Ogni programma FORTRAN e’ compreso tra
le istruzioni PROGRAM e END
•L’istruzione PROGRAM da’ il nome al
programma
Inizio e fine in Pascal-like
•Ogni programma termina con END
•Analogo di begin ed end per il Pascal Like
Equivalente Fortran
2
14/03/2016
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al 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
Dichiarazione variabili in Pascal-like
Equivalente in Fortran
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al 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)
Commenti in P-L
In Fortran le linee di codice iniziano con un il
carattere !
Equivalente in Fortran
3
14/03/2016
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al 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
Lettura, scrittura e assegnazione in P-L
Equivalente in Fortran
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al Fortran
Struttura di selezione
•Esatta corrispondenza con il Pascal Like
•Disponibile anche senza il ramo ELSE
If-then-else in pascal-like
Equivalente in Fortran
4
14/03/2016
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al Fortran
Operatori logici e relazionali
• Vengono eseguiti prima gli operatori
relazionali ( > , < , == , /= , >= , <= )
• Poi quelli logici (.NOT. , .AND. , .OR.)
Esempi di operatori logici e relazionali in P-L
Equivalente in Fortran
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al Fortran
Struttura di iterazione for
•Il campo K e’ opzionale, se assente si
sottointende 1
•Piu’ strutture innestate richiedono indici
distinti
For-endfor in Pascal-like
Equivalente in Fortran
5
14/03/2016
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al 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”
Repeat-until in Pascal-like
•Realizzato mediante simulazione di DOENDDO + condizione di uscita
• IF (condizione) EXIT immediatamente
prima di ENDDO
Equivalente in Fortran
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al 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 DOENDDO + condizione di uscita
While-endwhile in pascal-like
• IF (.NOT. condizione) EXIT immediatamente
dopo di DO
Equivalente in Fortran
6
14/03/2016
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al 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
Dichiarazione e lettura di un array in P-L
• in memoria le componenti di un array
occupano locazioni di memoria consecutive
• gli array 2-dimensionali sono memorizzati
per colonne in locazioni consecutive
Equivalente in Fortran
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al 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
Chiamata di una procedura in Pascal-like
•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
Equivalente SUBROUTINE in Fortran
7
14/03/2016
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al 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
Procedura in Pascal-like
•E’ possibile utilizzare nomi diversi nelle
subroutine e nel programma chiamante
•variabili non presenti nella testata non sono
visibili dal programma chiamante
Equivalente SUBROUTINE in Fortran
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al Fortran
SUBROUTINE ed array
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)
8
14/03/2016
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al Fortran
SUBROUTINE ed array
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
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al Fortran
Disallineamento degli indici di una matrice tra
programma chiamante e subroutine a causa del
diverso numero di righe nella dichiarazione
soluzione
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
9
14/03/2016
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al Fortran
Sottoprogrammi FUNCTION
•Procedura Fortran invocata direttamente
attraverso il nome
•Alternativa alle subroutine
•Restituisce un valore attraverso il nome
•Utile per definire funzioni matematiche
Chiamata di una procedura in Pascal-like
•L’istruzione EXTERNAL:: FUN dichiara FUN
come function
•L’istruzione REAL:: FUN dichiara il tipo della
funzione
Equivalente FUNCTION in Fortran
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al 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
Procedura in Pascal-like
Equivalente FUNCTION in Fortran
10
14/03/2016
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al Fortran
Funzioni intrinsiche
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
Y
Y
Y
=
=
=
=
MAX(A1, A2, A3, …)
MIN(A1, A2, A3, …)
MOD(A, P)
INT(X)
Semplice programma per il calcolo di 11 valori di
sin(x) nell’intervallo [0,3.14]
• E tante altre…
Marco Lapegna –
Laboratorio di Programmazione
15. Introduzione al Fortran
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)
R. Stallman
• 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
Il logo della Free Software Foundation
11