(prof. Claudio Maccherani, Perugia, 2009)

Documenti analoghi
Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Breve guida al linguaggio FORTRAN 77

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Sviluppare un programma in FORTRAN

Fortran. Introduzione.

Operazioni di input e output in Fortran 90

Modularizzazione del software

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

r fattore di ripetizione w ampiezza di campo m numero minimo cifre da visualizzare d numero cifre decimali Print e Read I/O in Fortran sintassi

Cenni Storici. Introduction to Fortran 90. Maurizio Cremonesi, CINECA

Costrutti condizionali e iterativi

Evoluzione del FORTRAN 14/03/2016. LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 15 IL LINGUAGGIO FORTRAN

Dalla prima lezione. LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 7 VARIABILI E COSTANTI 28/02/2016. Concetto di algoritmo

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Fortran per Ingegneri

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

Programmazione Procedurale in Linguaggio C++

Vettori e Matrici (array)

Strutture dati e loro organizzazione. Gabriella Trucco

Introduzione al linguaggio Fortran 90

Introduzione a Matlab

Fortran in pillole : prima parte

UD 3.2b: Programmazione in Pascal (1)

Algoritmi e Strutture Dati

MATLAB Elementi di grafica Costrutti di programmazione

Operazioni di Input/Output

I tipi di dato del Fortran

A.S Classe III H Informatica. Programma didattico finale e indicazioni per il recupero estivo relativi all'insegnamento di Informatica

Breve storia del FORTRAN

PASCAL standard. Il linguaggio PASCAL nasce come evoluzione del linguaggio ALGOL60 (ALGOrithmic Language) nel 1968 ad opera di N. Wirth.

L utility Unix awk [Aho-Weinberger-Kernighan]

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

I costrutti forniti dal linguaggio si dividono in corrispondenti classi di istruzioni

Introduzione al linguaggio Fortran 90

IL TEOREMA DI BOEHM-JACOPINI

VBA Principali Comandi

Corso di Laboratorio di Sistemi Operativi

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...

Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi

ARRAY. Fortran 90[/95] ARRAY: dichiarazione. Esempio (arraybase.f90) ARRAY: inizializzazione. ARRAY: inizializzazione

Le basi del linguaggio Java

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

Il computer. Il case e l'unità di elaborazione. Il computer, una macchina aggiornabile.

Espressione di chiamata di funzione

Istruzioni condizionali di diramazione in Fortran 90

Cognome e Nome : Corso e Anno di Immatricolazione: Modalità di Laboratorio (Progetto/Prova) :

Formalismi per la descrizione di algoritmi

Informatica 3. LEZIONE 2: Sintassi e semantica

APPUNTI DEL CORSO DI LABORATORIO DI CALCOLO AVANZATO

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

DOCUMENTAZIONE A SUPPORTO DELLA PREPARAZIONE PER LA PROVA SCRITTA

Processore Danilo Dessì. Architettura degli Elaboratori.

Risposte ai quesiti. Appendice B. Capitolo 1

Informatica 3. Informatica 3. LEZIONE 2: Sintassi e semantica. Lezione 2- Modulo 1. Le componenti di un linguaggio di programmazione

RELAZIONE DELLA PROVA DI LABORATORIO DI INFORMATICA

Scrittura formattata - printf

Algoritmi, Strutture Dati e Programmi. UD 1.d: Dati e Tipi di Dato

Scilab. Introduzione a Scilab - Vettori. Corso di Informatica CdL: Chimica. Claudia d'amato.

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Esercitazioni di Elementi di Informatica

Lezione 6 Introduzione al C++ Mauro Piccolo

FORTRAN FORTRAN. Tipi definiti dal linguaggio per ora solo i tipiatomici

Fortran per Ingegneri

Progettazione di algoritmi: componenti di base e metodologie di sviluppo. Variabili e costanti. Variabili e costanti A = 2. Algoritmo PASCAL-LIKE

File binari e file di testo

MATLAB I/O. Informatica B - A.A. 2012/2013 ACQUISIZIONE DI INPUT DA TASTIERA

Linguaggio C: introduzione

Indice. Prefazione. 3 Oggetti e Java 53

LESSICO E SINTASSI DEL PASCAL

Excel & VBA. Excel e Visual Basic for Application

Costanti e Variabili

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Introduzione al MATLAB c Parte 3 Script e function

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Fortran per Ingegneri

Valori Alfanumerici. Informatica di Base -- R.Gaeta 1

Funzioni, Stack e Visibilità delle Variabili in C

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

Linguaggio C. Tipi predefiniti. Università degli Studi di Brescia. Prof. Massimiliano Giacomin. Prof. M. Giacomin

Fondamenti di Informatica T-1

Programmazione Procedurale in Linguaggio C++

Caratteristiche di un linguaggio ad alto livello

Basic: introduzione. Struttura fondamentale

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

PROGRAMMAZIONE DISCIPLINARE LICEO SCIENTIFICO OPZIONE SCIENZE APPLICATE INFORMATICA CLASSE TERZA

4. I moduli in Access 2000/2003

Elementi di Informatica

FORTRAN 77 FORTRAN 77 FORTRAN 77 FORTRAN 77 FORTRAN 77 FORTRAN 77. Introduzione. Introduzione. PROGRAM {nome} {dichiarazioni}

Informatica Applicata al Suono Tutorial Matlab

Introduzione all ambiente MATLAB. Richiami II. Calcolo Numerico - A.A. 2008/09

UTILIZZIAMO GLI OPERATORI MATEMATICI E COMMENTIAMO IL CODICE

Foglio Elettronico Lezione 1

Esercitazioni di Informatica (CIV)

Programmazione con il linguaggio LibreOffice Basic

Vettori e Matrici (array)

Programmazione. 1 Introduzione. Tutto per la gloria di Dio.

Gestione ARCHIVI in QUICK BASIC. I.T.C. "V.Emanuele II" - Perugia

Input/Output di numeri

Laboratorio di Matlab

Transcript:

(prof. Claudio Maccherani, Perugia, 2009) Il Fortran può essere considerato il primo linguaggio di programmazione ad alto livello. La sua prima implementazione, realizzata da un gruppo di lavoro diretto da John Backus per il calcolatore IBM 704, è del 1954. Il Fortran è un linguaggio compilato rivolto principalmente al calcolo scientifico e numerico. Il suo nome deriva da Formula Translation (o Translator), cioè traduzione/traduttore di formule (matematiche) in algoritmi computazionali. Molteplici sono le versioni del Fortran: - FORTRAN I (1957) - FORTRAN II (1958), introduce la possibilità di compilazioni separate - FORTRAN III (1958), introduce la possibilità di usare espressioni booleane e quella di inserire "in linea" codice linguaggio assembler (cosa questa che lo ha reso "non portatile") - FORTRAN IV (1961), introduce la possibilità di usare espressioni booleane e una nuova istruzione IF che si aggiunge alla precedente istruzione IF presente nel FORTRAN II che valutava un'espressione numerica e prevedeva tre diversi salti a seconda che il suo valore fosse negativo, nullo o positivo. - FORTRAN 66 (1966) - FORTRAN 77 (1977), con la possibilità di usare costrutti strutturati quali IF-THEN-ELSE - Fortran 90 (1990), le regole delle precedenti versioni, legate alla rigida struttura ad 80 colonne delle schede perforate, vengono abbandonate in favore del codice in formato libero. Vengono inoltre introdotte allocazione dinamica della memoria, operazioni sugli array, tipi di dati astratti, overloading degli operatori, puntatori e moduli (che consentono di raggruppare sottoprogrammi e dati correlati). - Fortran 95 (1995), una revisione "minore" del linguaggio, ha introdotto la possibilità della programmazione parallela. - Fortran 2003 (2003), estensione del 95 (con l introduzione della virgola mobile, la gestione delle eccezioni, costrutti per la programmazione orientata agli oggetti), rappresenta ad oggi lo standard del linguaggio - Fortran 2008 (2008) - Fortless è un nuovo linguaggio in fase di sviluppo che dovrebbe sostituire il Fortran. Il Fortan esiste ormai da mezzo secolo, i programmi scritti in questo linguaggio (specialmente in FORTRAN 77, il suo dialetto più importante) tuttora usati sono innumerevoli. Il Fortran resta il linguaggio di prima scelta per i programmi destinati a girare sui supercomputer. La breve panoramica precedente è stata tratta da Wikipedia. FORTRAN 90 in pillole, Claudio Maccherani, 2009 pag. 1

Fortran 90 I commenti sono preceduti da! (punto esclamativo) Righe lunghe al massimo 132 caratteri, se maggiori si va a capo con & (e commerciale) Label anche numeriche, nomi variabili al massimo di 31 caratteri, sempre inizianti con lettera alfabetica Operatori aritmetici: + (add.),- (sott.),* (molt.),/ (div.),** (potenza) Operatori di relazione: = oppure = = o.eq. (=); /= o.ne. (); > o.gt. (>); >= o.ge. (); < o.lt. (<); <= o.le. () Tipi di dati: INTEGER, REAL, LOGICAL (.TRUE./.FALSE.), CHARACTER([LEN=]n) [tra apici o virgolette] Definizione variabili: tipo :: variabile [=valore] INTEGER :: a,b=20 CHARACTER(len=10) :: nome='simone' REAL vet(10), mat(5,3)!vettore e matrice Input: READ (*,*) variabile READ (*,*) a Output: WRITE (*,*) espressione WRITE (*,*) "risultato: ", a + b Corso di INFORMATICA - Ingegneria Aerospaziale Costanti e variabili PROGRAM esempio1 IMPLICIT NONE! questa dichiarazione è obbligatoria INTEGER :: numero,x=10 WRITE(*,*) 'Inserisci un numero intero:' READ(*,*) numero X = x + numero * numero WRITE(*,*)'I risultati sono ', x, numero * numero STOP END PROGRAM esempio1 Format (controlla il formato dei dati in I/O, usata da READ e WRITE alle quali è associata tramite la label): label FORMAT (lista descrittori di formato) READ (*,300) I READ (*,300) J 300 FORMAT (I3) SOMMA = i + j WRITE (*,400) I,J,SOMMA 400 FORMAT ('La somma di ',I3,' e di',i3,' e'' ',I5) descrittori di formato: Iw numero intero di w caratteri Fw.d numero reale di w caratteri (compreso segno e virgola) e d cifre decimali (F9.5-15.53478) Ew.d numero reale di w caratteri, con d cifre decimali per la mantissa e 4 caratteri per l'esponente es. 3.1416 scitto in formato E12.5 diventa 0.31416E+01 ( = 0.31416*10) nx in output lascia n spazi bianchi, in input ignora n caratteri Tc il prossimo carattere da leggere/scrivere è in colonna c Aw variabile di tipo character (stringa, ASCII) di w caratteri '...' costante stringa (delimitata da apici) / si sposta alla riga successiva. FORTRAN 90 in pillole, Claudio Maccherani, 2009 pag. 2

Alcune funzioni intrinseche: sin, cos, tan, asin, atan (trigonometriche), sqrt (radice quadrata), log (logaritmo naturale), exp (esponenziale), abs (valore assoluto), float (converte in numero reale) Selezione: IF (cond) THEN IF (cond) THEN ELSE IF (cond) THEN itruzioni ELSE IF (cond) THEN Selezione multipla: SELECT CASE (variabile) CASE (valore1) 1 CASE (valore2) 2 [CASE DEFAULT D ] END SELECT Cicli: DO indice=inizio,fine[,incremento] END DO DO n = 1,10 WRITE(*,*) n+n*2 END DO Per inizializzare un vettore si può usare un ciclo o l istruzione DATA. Nell esempio seguente vengono azzerati due vettori tramite l istruzione DATA: INTEGER entrate(31),uscite(31) DATA incassi/31*0/,uscite/31*0/ Operazioni su array (vettori e matrici): MAXVAL(array) valore massimo dell array MAXLOC(array) posizione del valore massimo dell array SUM(array) sommatoria degli elementi dell array PRODUCT(array) produttoria degli elementi dell array FORTRAN 90 in pillole, Claudio Maccherani, 2009 pag. 3

La programmazione Top-Down prevede la strutturazione del programma in un programma principale che si avvale di più procedure, funzioni e/o sottoprogrammi. Le procedure sono di due tipi: - le funzioni o FUNCTION (che restituiscono un unico valore o risultato) - i sottoprogrammi o SUBROUTINE (che restituiscono nessuno, uno o più valori o risultati). Funzioni: [tipo] FUNCTION nomefun [(lista parametri formali)] nomefun = risultato END [FUNCTION [nomefun]] La funzione viene usata come una variabile, semplicemente specificandone nome e parametric attuali. Esempio: REAL FUNCTION distanza (a, b) REAL a,b distanza = sqrt((a(1)-b(1))**2 + (a(2)-b(2))**2) END FUNCTION nel programma chiamante: delta = distanza(p,q) + k Sottoprogrammi: SUBROUTINE nomesub [(lista parametri formali)] END [SUBROUTINE [nomesub]] Nel programma chiamante: CALL nomesub [(lista parametri attuali)] Esempio: SUBROUTINE distanza (a, b, d) REAL a,b,d d = sqrt((a(1)-b(1))**2 + (a(2)-b(2))**2) END SUBROUTINE nel programma chiamante: CALL distanza(p,q,dis) delta = dis + k In FORTRAN 90, contrariamente al FORTRAN 77, è prevista la ricorsività dei sottoprogrammi e delle funzioni che, in tal caso, debbono essere definiti premettendo RECURSIVE alla definizione stessa. Per la condivisione di variabili tra più unità di programma il FORTRAN 77 usa COMMON, mentre il FORTRAN 90 usa MODULE. FORTRAN 90 in pillole, Claudio Maccherani, 2009 pag. 4

Gestione file sequenziali In un file sequenziale i record vengono memorizzati sequenzialmente (aggiungendoli in fondo) e letti sequenzialmente (partendo sempre dal primo record del file; dopo ogni lettura ci si posiziona automaticamente sul record successivo, finché non si 'esce' dal file, cosa questa segnalata da ios ) apertura: OPEN (UNIT=unità,FILE=file,STATUS=stato,ACTION=azione,IOSTAT=ios) - UNIT unità, numero intero (cui fanno riferimento le di I/O) - FILE nome (pathname) del file dati - STATUS OLD (sola lettura), NEW (sola scrittura, viene creato), REPLACE (sola scrittura, esistente o no viene (ri)scritto) - ACTION READ (lettura), WRITE (scrittura) - IOSTATUS variabile di 'stato' (contenente il codice d errore; 0=nessun errore) Scrittura record: Lettura record: record precedente: record iniziale: chiusura: WRITE (unità, formato, ios) elenco_campi READ (unità, formato, ios) elenco_campi BACKSPACE (unità) REWIND (unità) CLOSE (unità) Esempio di gestione file sequenziale, programma che legge i dati (in numero variabile) dal file FileSeq1.Txt, li somma, memorizza il risultato nel file FileSeq2.Txt: PROGRAM FILESEQ! dichiarazione variabili CHARACTER(12) fil1,fil2 INTEGER TOT,DATO,ios! inizializzazione variabili fil1 = 'FILESEQ1.TXT' fil2 = 'FILESEQ2.TXT' TOT = 0! programma WRITE (*,*) 'Gestione file sequenziale' WRITE (*,*) 'Legge da "FILESEQ1.TXT" i dati, li somma, il risultato in "FILESEQ2.TXT"'! apertura file di input e file di output OPEN (UNIT=10,FILE=fil1,STATUS='OLD',ACTION='READ',IOSTAT=ios)! aperture file input IF (ios.eq.0) THEN! file aperto correttamente WRITE (*,*) 'dati:' DO! ciclo di lettura dati e sommatoria READ (10,*,IOSTAT=ios) DATO IF (ios.ne. 0) EXIT! esce quando non ci sono più dati WRITE (*,*) DATO! visualizza dato letto TOT = TOT + DATO! totalizza END DO WRITE (*,*) 'somma:' WRITE (*,*) TOT OPEN (UNIT=20,FILE=fil2,STATUS='REPLACE',ACTION='WRITE')! apertura file output WRITE (20,*) TOT! memorizzazione risultato CLOSE (10)! chiusura file di input CLOSE (20)! chiusura file di output ELSE WRITE (*,*) ' Non esiste il file di input ',fil1 END IF END FORTRAN 90 in pillole, Claudio Maccherani, 2009 pag. 5

Gestione file diretti (random o ad accesso diretto) In un file ad accesso diretto i record vengono letti e/o scritti specificando la loro posizione relativamente all inizio del file. Un archvio diretto può essre pensato come un vettore di record. Le di gestione dei file diretti sono, come per i sequenziali, OPEN, WRITE, READ e CLOSE. apertura: OPEN (unità,file,stato,access='direct',form=formato,recl=lr,..) - unità unità, numero intero (cui fanno riferimento le di I/O) - file nome (pathname) del file dati - stato OLD (sola lettura), NEW (sola scrittura, viene creato), REPLACE (sola scrittura, esistente o no viene (ri)scritto) - FORM FORMATTED (formattato), UNFORMATTED (non formattato) - RECL lunghezza record - ACTION - IOSTATUS Scrittura record: Lettura record: chiusura: WRITE (unità,formato,rec=r,ios) elenco_campi ['r'=numero record] READ (unità,formato,rec=r,ios) elenco_campi ['r'=numero record)] CLOSE (unità) Esempio di gestione file diretto, programma che scrive e legge record (studenti) nel file File Dir1.Dir: PROGRAM FILEDIR! definizine variabili INTEGER matricola,nrec,ios CHARACTER*20 studente! inizializazione variabili nrec = 0 matricola = 0 studente = ' '! programma WRITE (*,*) 'Gestione file diretto' WRITE (*,*) 'Memorizza e legge i dati degli studenti (matricola, nome)'! apertura file OPEN(10,FILE='FileDir1.Dir',RECL=24,FORM='formatted',STATUS='unknown',ACCESS='direct')! memorizzazione di un record WRITE (*,*) 'Memorizzazione di uno studente' WRITE (*,*) 'numero record: ' READ (*,*) nrec IF (nrec.gt. 0) THEN! si vuole memorizzare il record WRITE (*,*) 'matricola: ' READ (*,*) matricola WRITE (*,*) 'studente: ' READ (*,*) studente WRITE (10,100,REC=nrec) matricola,studente 100 FORMAT(I4,A20) WRITE (*,*) 'Lettura di uno studente' WRITE (*,*) 'numero record: ' READ (*,*) nrec IF (nrec.gt. 0) THEN! si vuole leggere il record READ (10,100,REC=nrec) matricola,studente WRITE (*,*) 'matricola: ',matricola,' - studente: ',studente CLOSE (10) END FORTRAN 90 in pillole, Claudio Maccherani, 2009 pag. 6