1 il linguaggio fortran 90: 1. preliminari stefano leonardi, egidio palaia dipartimento di...
TRANSCRIPT
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/
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]
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
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
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
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)
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
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
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
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
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
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
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
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.
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
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
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.
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
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
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
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
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
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