appunti di fortran 77

Download Appunti di FORTRAN 77

Post on 05-Jan-2017

216 views

Category:

Documents

2 download

Embed Size (px)

TRANSCRIPT

  • Appunti di FORTRAN 77

    Maria Grazia Gasparo

    Aprile 2011

    i

  • ii

  • Indice

    1 Linguaggio macchina e assembly 1

    2 Linguaggi interpretati e compilati 3

    3 Storia del FORTRAN 5

    4 Perche insegnare il FORTRAN 77? 7

    5 Realizzazione di un programma FORTRAN 85.1 Compilazione . . . . . . . . . . . . . . . . . . . . . . . . . . . 95.2 Collegamento . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    6 Elementi di base del FORTRAN 126.1 Alfabeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126.2 Struttura delle linee . . . . . . . . . . . . . . . . . . . . . . . 126.3 Struttura delle unita di programma . . . . . . . . . . . . . . . 136.4 Costanti, variabili e loro tipo . . . . . . . . . . . . . . . . . . 146.5 Variabili dimensionate (arrays) . . . . . . . . . . . . . . . . . 18

    7 Espressioni e istruzione di assegnazione 227.1 Espressioni aritmetiche . . . . . . . . . . . . . . . . . . . . . . 227.2 Assegnazione aritmetica . . . . . . . . . . . . . . . . . . . . . 257.3 Fortran 90: operazioni fra arrays . . . . . . . . . . . . . . . . 25

    8 Controllo del flusso di esecuzione 268.1 Istruzione GO TO . . . . . . . . . . . . . . . . . . . . . . . . 278.2 Istruzioni IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    8.2.1 IF logico . . . . . . . . . . . . . . . . . . . . . . . . . . 288.2.2 IFTHENENDIF. . . . . . . . . . . . . . . . . . . . . 288.2.3 IFTHENELSEENDIF . . . . . . . . . . . . . . . . 308.2.4 IF concatenati. . . . . . . . . . . . . . . . . . . . . . . 32

    8.3 Fortran 90: istruzione SELECT CASE. . . . . . . . . . . . . 348.4 Istruzione DO . . . . . . . . . . . . . . . . . . . . . . . . . . . 348.5 DO impliciti . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388.6 Fortran 90: DO illimitato e DO WHILE . . . . . . . . . . . . 39

    9 Esempi riassuntivi 409.1 Esempio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409.2 Esempio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419.3 Esempio 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    iii

  • 10 Listruzione WRITE(u,f) 4310.1 Scrivere su un file. . . . . . . . . . . . . . . . . . . . . . . . . 4410.2 Scegliere il formato di scrittura. . . . . . . . . . . . . . . . . . 4510.3 Alcuni esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

    11 Sottoprogrammi 4811.1 Sottoprogrammi FUNCTION . . . . . . . . . . . . . . . . . . 4911.2 Sottoprogrammi SUBROUTINE . . . . . . . . . . . . . . . . 5411.3 Associazione fra argomenti muti e argomenti attuali . . . . . 5611.4 Argomenti muti dimensionati . . . . . . . . . . . . . . . . . . 5811.5 Dimensionamento variabile e indefinito per vettori . . . . . . 6011.6 Dimensionamento variabile e indefinito per matrici . . . . . . 62

    12 Alcune regole di buona programmazione 6512.1 Istruzioni di scrittura nei sottoprogrammi . . . . . . . . . . . 6512.2 Istruzioni STOP e RETURN . . . . . . . . . . . . . . . . . . 6712.3 Arrays di lavoro . . . . . . . . . . . . . . . . . . . . . . . . . . 67

    13 Esempi di programmi con sottoprogrammi 7013.1 Esempio 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7013.2 Esempio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7213.3 Esempio 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7513.4 Esempio 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

    14 Istruzione EXTERNAL 81

    15 Istruzione COMMON 82

    Bibliografia 85

    iv

  • 1 Linguaggio macchina e assemblyassembly

    Un linguaggio di programmazione e un linguaggio utilizzabile per scriverealgoritmi che il computer puo capire (direttamente o tramite una traduzione)e eseguire. Nellaccezione piu semplice, che in questo momento ci basta, unprogramma e un algoritmo scritto in un linguaggio di programmazione.

    Il fatto che tutte le informazioni debbano essere memorizzate su un com-puter come sequenze di bits implica che anche le istruzioni di un algoritmo,per poter essere direttamente eseguite dal computer, devono essere scritte inun linguaggio il cui alfabeto e composto soltanto dai simboli 0 e 1. Nonsolo, ma la sintassi di questo linguaggio e strettamente dipendente dallar-chitettura della macchina ed e quindi diversa per ogni processore, o famigliadi processori. Data questa dipendenza, ci si riferisce a questo linguaggiocon lespressione generica linguaggio macchina. In un linguaggio di questotipo, ad ogni operazione elementare (aritmetica, logica, di assegnazione, disalto, etc...) corrisponde un codice operativo e ogni operando e identificatotramite lindirizzo della locazione in cui e memorizzato1. Codici operativi eindirizzi sono sequenze di 0 e 1 di lunghezza prefissata.

    Scrivere o leggere un programma in linguaggio macchina e estremamentedifficile: si tratta in generale di programmi molto lunghi e complessi, incom-prensibili per i non addetti ai lavori. Il primo passo per superare questadifficolta fu la definizione dei cosiddetti linguaggi assembly, che nacqueropraticamente insieme ai primi computers negli anni 40. Questi sono ancoralinguaggi dipendenti dallhardware della macchina per cui sono progettati,perche le istruzioni sono in corrispondenza biunivoca con quelle del lin-guaggio macchina; daltra parte sono linguaggi simbolici e il loro utilizzo edecisamente piu facile. Con lespressione linguaggio simbolico si intendeche i codici operativi binari sono sostituiti da codici alfanumerici mnemonicidetti parole chiave (es: ADD per laddizione, STO per la memorizzazione) ei riferimenti alle locazioni di memoria avvengono attraverso nomi simbolici,o identificatori, scelti dallutente rispettando le regole stabilite dal linguag-gio. Per poter essere eseguito, un programma assembly deve essere tradottoin linguaggio macchina da un opportuno programma detto assembler. Eimportante aver presente che i linguaggi assembly non sono nientaltro cheversioni simboliche dei linguaggi macchina e non sono quindi portabili, nelsenso che un programma scritto per un computer non puo essere eseguitosu un altro computer con un processore diverso.

    Il vero salto di qualita, dal punto di vista della portabilita dei programmie della facilita di programmazione, si ebbe negli anni 50, quando nacqueroi primi linguaggi di programmazione ad alto livello. Lidea di fondo eradefinire dei linguaggi la cui sintassi prescindesse dallarchitettura di un par-

    1Un dato puo essere anche unistruzione del programma stesso. Si pensi ad esempioa unistruzione di salto Vai allistruzione tal dei tali, nella quale loperazione e espressadalla parola Vai e loperando e listruzione tal dei tali.

    1

  • ticolare computer e fosse invece vicina al linguaggio parlato usato perdescrivere gli algoritmi. Siccome il tipo di algoritmi e di conseguenza il lin-guaggio comune utilizzato per descriverli era diverso a seconda degli ambitiapplicativi in cui un programmatore si trovava a lavorare, furono creati di-versi linguaggi ad alto livello destinati a settori diversi. I primi linguaggifurono :

    FORTRAN (FORtran TRANslation), destinato ad algoritmi di naturamatematico/computazionale e sviluppato intorno al 1955 in ambiente IBMda un gruppo di lavoro guidato da J. Backus.

    LISP (LISt Processing), per applicazioni nellambito dellintelligenza arti-ficiale, sviluppato intorno al 1958 al Massachussets Institute of Technologyda J. McCarthy e collaboratori.

    COBOL (COmmon Business Oriented Language), finalizzato alla stesuradi programmi in ambito commerciale e imprenditoriale, sviluppato nel 1959da un comitato pubblico-privato noto come Short Range Committee.

    ALGOL 60 (ALGOrithmic Language), nato nel 1958 come IAL (Interna-tional Algorithmic Language) grazie agli sforzi congiunti di una organiz-zazione europea (GAMM) e una statunitense (ACM) per creare un linguag-gio universale di descrizione degli algoritmi, non orientato a una particolareclasse di problemi. IAL fu successivamente modificato fino a dar luogo aALGOL 60, che e stato molto importante non tanto come linguaggio in sestesso (le versioni commerciali non hanno avuto successo) quanto come pri-mo esempio di linguaggio indipendente dalla macchina e dal problema, concostrutti sofisticati (scelte, cicli) non ancora previsti dagli altri linguaggi dialto livello.

    BASIC (Beginners All-purpose Symbolic Instruction Code), sviluppato nel1964 al Darthmouth College da J. Kemeny e T. Kurtz come linguaggiodidattico, che facilitava lavvicinamento alla programmazione di studenti diqualunque provenienza e formazione culturale.

    Con levolversi della tecnologia e delle architetture dei computers, i lin-guaggi di programmazione si sono evoluti, spesso dando luogo a numerosidialetti anche molto diversi dal linguaggio originale, e molti altri linguag-gi sono nati. ALGOL 60 influenzo in molti casi l evoluzione dei linguaggipreesistenti e la definizione di quelli nuovi. Ad esempio, un discendente di-retto di ALGOL e il PASCAL, sviluppato negli anni 1971-73 da N. Wirthcome linguaggio per insegnare i principi della programmazione nello spiritodi ALGOL, e molto diffuso nelle scuole statunitensi ed europee negli anni70-80. Negli stessi anni nacque il linguaggio C, ad opera di D.M. Richtie eK. Thompson, come linguaggio per la programmazione di sistema nellam-bito dello sviluppo del nascente sistema operativo Unix. La fortuna del C

    2

  • e la sua evoluzione sono dovute al fatto che, pur essendo un linguaggio dialto livello, permette di accedere ad aspetti di basso livello del computer,come fanno i linguaggi assembly. Negli anni 80, con laffermarsi dei Person-al computers e delle interfacce grafiche, si sono sviluppati linguaggi orientatiagli oggetti, come C++ (un discendente del C sviluppato intorno al 1979 daB. Straustrup) e Java (1995, J. Gosling). Vogliamo infine citare MATLAB(MATrix LABoratory), un linguaggio,

Recommended

View more >