24
1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

Embed Size (px)

Citation preview

Page 1: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

1

Il Linguaggio Fortran 90:1. Preliminari

Stefano Leonardi, Egidio Palaia

Dipartimento di Informatica e Sistemistica

Page 2: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

2

Informazioni sulla Didattica

• Stephen J. Chapman, Fortran 90/95: guida alla programmazione, McGraw-Hill, 2000

• M. Cadoli, Dispensa per il Corso di Laurea in Ingegneria Aereospaziale, A.A. 2000-2001, In distribuzione presso la libreria ``L'Universitaria'', Viale Ippocrate 99, Roma.

• Compilatore Fortran 90: ELF 90• I programmi illustrati in seguito sono in parte tratti dalla

Dispensa di M. Cadoli e dal libro di S. Chapman.

Ricevimento: Venerdì ore 11-13, via Salaria 113, II piano, Stanza 227

http://www.dis.uniroma1.it/~leon/didattica/meccanica/

Page 3: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

3

Avvertenze

• Queste trasparenze intendono aiutare lo studente nel seguire lo svolgimento degli argomenti svolti a lezione.

• Queste trasparenze non sono considerate sostitutive dei testi in cui sono trattati gli argomenti del Programma del Corso.

• Queste trasparenze possono contenere errori ed imprecisioni che possono essere riportati scrivendo a [email protected]

Page 4: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

4

Un primo programma Fortran

! File: ciao.for

PROGRAM ciao ! Questo programma stampa un messaggio sullo schermo

WRITE (*,*) 'CIAO MONDO!' STOP

END PROGRAM ciao

• Ogni programma inizia con la parola chiave PROGRAM seguita dal nome del programma

• L’istruzione END PROGRAM deve essere seguita dal nome del programma

Page 5: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

5

Compilazione ed Esecuzione

> elf90 ciao.for

Crea il file in oggetto ciao.obj

> elf90 ciao.obj

Crea il file eseguibile ciao.exe

> ciao

Esegue il programma

Page 6: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

6

Struttura di un programma Fortran

! File: variab.for ! ! Scopo: illustrare la dichiarazione e l'uso di variabili

PROGRAM variabile ! Questo programma legge un numero intero da tastiera e lo stampa sullo! schermo

! *** SEZIONE DICHIARATIVA *** !IMPLICIT NONE ! questa dichiarazione e' obbligatoria. E’ la prima istruzioneINTEGER :: numero ! questa e' la dichiarazione di una variabile

! *** SEZIONE ESECUTIVA *** !WRITE(*,*) 'Inserisci un numero intero, poi schiaccia il tasto RETURN: ' READ(*,*) numero ! lettura di un valore intero da tastiera WRITE(*,*) 'Hai inserito il numero ', numeroSTOP

END PROGRAM variabile

Page 7: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

7

Identificatori Fortran• Nomi utilizzati per indicare le variabili, le costanti ed i nomi di

un’unità di programma• Regole per la formazione dei nomi:

– Al più 31 caratteri– Lettere alfabetiche: abcd…ABCDE…– Cifre: 012….– Il carattere di sottolineatura: _

• Identificatori validi: conta, zzzzeta1, numero_elementi• Identificatori non validi: A$, esempio-non-valido• Fortran è Case Insensitive• Stile di Programmazione:

– minuscole per variabili, – maiuscole per parole chiave del Fortran (ex: PROGRAM, INTEGER)

Page 8: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

8

Variabili Fortran

• E’ un tipo di dato che viene modificato durante l’esecuzione di un programma.

• Una variabile è associata ad una locazione di memoria che memorizza ad ogni passo dell’esecuzione del programma il valore corrente della variabile.

numero

5

Page 9: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

9

Uso delle variabili in Fortran

• L’istruzione IMPLICIT NONE impone che tutte le variabili che vengono utilizzate siano precedentemente dichiarate indicando il nome ed il tipo.

• L’identificatore della variabile ne indica il valore.

• Il valore di una variabile è inizialmente non definito.

• Il valore di una variabile è modificato attraverso l’uso dell’Istruzione di Assegnazione

Page 10: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

10

Esempio di Istruzione di Assegnazione! File: assegnaz.for ! Scopo: illustrare l'istruzione di assegnazione

PROGRAM assegnazione ! Questo programma effettua varie operazioni su due! variabili intere

! *** SEZIONE DICHIARATIVA *** !IMPLICIT NONE INTEGER :: num1, num2 ! questa e' la dichiarazione di due variabili

! *** SEZIONE ESECUTIVA *** !WRITE(*,*) 'Inserisci due numeri interi, poi schiaccia il tasto RETURN: ' READ(*,*) num1, num2 WRITE(*,*) 'Hai inserito i numeri ', num1, num2 num1 = num2 * 10 ! assegnazione alla variabile num1 WRITE(*,*) 'Le variabili ora valgono: ', num1, num2STOP

END PROGRAM assegnazione

Page 11: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

11

Costanti in Fortran

• Tipo di dato i cui valori non mutano durante l’esecuzione del programma.

INTEGER, PARAMETER :: max_num=100!Dichiarazione di una costante intera

• Costanti intere possono assumere numeri positivi e negativi. Ex: +10, 0, +30

• Possono essere nell’intervallo [-2**31, 2**31-1]• Costanti sono utilizzate solo nella parte destra di

un’espressione insieme a variabili e ad operatori

Page 12: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

12

Istruzione di Assegnazione

nome_variabile = espressione

Ex: num1 num2

num1=7 7 --

num2=num1+10 7 17

num1=num1+3 10 17

num2=num2+num1 10 27

num1=num1+max_num 110 27

Page 13: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

13

Espressioni Intere

• Operatori binari:+, -, *,/, **

• Operatori unari:+, -

1. Non è possibile affiancare due operatori: a*-b a*(-b); a**-ba**(-b)

2.Moltiplicazione implicita non ammessa x(y+z)x*(y+z)

3.Parentesi permettono di raggruppare i termini delle espressioni. Priorità ai termini all’interno delle parentesi2**((8+2)/5)= 2**(10/5)=2**2=4

4.Divisione tra interi, troncamento all’intero inferiore: 8/5=1

Page 14: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

14

Uso di variabili e costanti reali

! File: cerchio.for

PROGRAM area_cerchio! Questo programma legge il raggio di un cerchio (reale positivo) e! calcola i valori di circonferenza e area

IMPLICIT NONE REAL, PARAMETER :: pi = 3.141592 ! dichiarazione di una costante con nome REAL :: raggio, area, circonferenza ! dichiarazione di variabili WRITE (*,*) 'Raggio del cerchio? ' READ (*,*) raggio circonferenza = 2 * pi * raggioarea = pi * raggio * raggio WRITE (*,*) 'Circonferenza : ', circonferenza WRITE (*,*) 'Area : ', areaSTOP

END PROGRAM area_cerchio

Page 15: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

15

Espressioni Reali

• Una costante reale è un numero che contiene cifre decimali. Numeri reali possono essere scritti con o senza esponente.

• Numeri reali senza esponente: 1.,-10., 7.5, 0., -99.6• Numeri reali con esponente:

<mantissa>E<esponente>Ex: 0.123E+6, -999.0E-4, 123.4E-6

• Reali rappresentati con 32 o 64 bit. • Se la parola è di 32 bit, 24 per la mantissa e 8 per l’esponente. • Il numero di bit per la mantissa indica la massima precisione

rappresentabile.

Page 16: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

16

Operazioni con numeri reali

• Generano un risultato reale. Ex: 1./4.=0.25, 1./3.=.3333333

• Gerarchia tra operazioni: 1. Operazioni interne alle parentesi, dalle più interne alle più

esterne

2. Elevazioni a potenza, da dx verso sx

3. Moltiplicazioni e divisioni, da dx verso sx

4. Addizioni e sottrazioni, da dx verso sx

Page 17: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

17

Esempio

a=3. b=2. c=5. d=4. e=10. f=2. g=3.

output=a*(b+c)*(d+e)/f**g

Output = 3.*(2.+5.)*(4.+10.)/2.**3.= 3.*7.*14./2.**3.= 3.*7.*14./8.= 294./8.= 36.75

Page 18: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

18

Operazioni miste con numeri interi e reali

• Operazioni in cui compaiono numeri reali ed interi• I numeri interi vengono trasformati in numeri reali ed il

risultato è reale. • La conversione avviene quando un numero reale ed uno intero

compaiono nella stessa operazione secondo le regole di valutazione di un’espressione.

• Ex:1. + 1/4 = 1. 1+1./4=1.25

• INTEGER :: n n = 1.25 + 9/4 ! n=3

• REAL :: n n = (3 + 4)/2 ! n=3.

Page 19: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

19

Variabili di Caratteri e Stringhe

• Assegnazione a variabile di caratteri:variabile di caratteri = espressione di caratteri

• Espressione di caratteri sono formate da variabili, costanti ed operatori su caratteri.

• Costanti di caratteri o Stringhe: ‘costante di caratteri’, “ABCDEFGHI”

• Dichiarazione di variabili di caratteri: CHARACTER (lunghezza=20) :: nome = ‘federico’

• La parte in eccesso nell’assegnazione viene troncata:

CHARACTER (lunghezza=3) :: est_fileest_file = ‘FILE01’ ! est_file=FIL

Page 20: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

20

Sottostringhe

• CHARACTER (len=8) :: str, str_1str = ‘1234567’str_1 = str(2:4)WRITE(*,*) str_1 ! Stampa ‘234’

• PROGRAM testCHARACTER (len=8) :: a,b,ca = ‘ABCDEFGHIJ’b = ‘12345678’c = a(5:7) ! c = ‘EFG’b(7:8) = a(2:6) ! b = ‘123456BC’END PROGRAM test

Page 21: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

21

Operatori su Stringhe

• Operatore di Concatenazione: //

PROGRAM testCHARACTER (len=10) :: a CHARACTER (len=8) :: b,ca = ‘ABCDEFGHIJ’b = ‘12345678’c = a(1:3) // b(4:5) // a(6:8) ! c = ‘ABG45FGH’END PROGRAM test

Page 22: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

22

Input/Output con Formato libero• Unità di Input:

– Tastiera, – File

• Unità di Output:– Monitor– Stampante– File

• Legge i valori in Input in un insieme di variabili:READ(*,*) lista_input

• I due asterischi indicano l’unità di Input standard e il formato indirizzato da lista, cioè le variabili nella lista determinano il tipo di dati in Input

PROGRAM esempio_di_inputINTEGER :: i, jREAL :: aCHARACTER (len=12) :: testoREAD (*,*) i, j, a, testoEND PROGRAM esempio_di_input

Page 23: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

23

Inizializzazione delle variabili

• Le variabili devono sempre essere inizializzate prima di apparire in un’espressione.

• PROGRAM initINTEGER :: iWRITE(*,*) i ! i non definita END PROGRAM init

• PROGRAM init_1INTEGER :: i, ji = 1READ (*,*) jWRITE (*,*) i, j ! I definitaEND PROGRAM init_1

Page 24: 1 Il Linguaggio Fortran 90: 1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica

24

Inizializzazione delle variabili (continua)

• L’inizializzazione può anche avvenire all’interno dalla dichiarazione delle variabili.

PROGRAM init_2INTEGER :: i = 1WRITE (*,*) iEND PROGRAM init_2