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