240 likes | 372 Views
Il Linguaggio Fortran 90: 1. Preliminari. Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica. Informazioni sulla Didattica. Stephen J. Chapman, Fortran 90/95: guida alla programmazione, McGraw-Hill, 2000
E N D
Il Linguaggio Fortran 90:1. Preliminari Stefano Leonardi, Egidio Palaia Dipartimento di Informatica e Sistemistica
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/
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 leon@dis.uniroma1.it
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
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
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 istruzione INTEGER :: 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 ', numero STOP END PROGRAM variabile
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)
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
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
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, num2 STOP END PROGRAM assegnazione
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
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
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 parentesi 2**((8+2)/5)= 2**(10/5)=2**2=4 4. Divisione tra interi, troncamento all’intero inferiore: 8/5=1
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 * raggio area = pi * raggio * raggio WRITE (*,*) 'Circonferenza : ', circonferenza WRITE (*,*) 'Area : ', area STOP END PROGRAM area_cerchio
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.
Operazioni con numeri reali • Generano un risultato reale. Ex: 1./4.=0.25, 1./3.=.3333333 • Gerarchia tra operazioni: • Operazioni interne alle parentesi, dalle più interne alle più esterne • Elevazioni a potenza, da dx verso sx • Moltiplicazioni e divisioni, da dx verso sx • Addizioni e sottrazioni, da dx verso sx
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
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.
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_file est_file = ‘FILE01’ ! est_file=FIL
Sottostringhe • CHARACTER (len=8) :: str, str_1 str = ‘1234567’ str_1 = str(2:4) WRITE(*,*) str_1 ! Stampa ‘234’ • PROGRAM test CHARACTER (len=8) :: a,b,c a = ‘ABCDEFGHIJ’ b = ‘12345678’ c = a(5:7) ! c = ‘EFG’ b(7:8) = a(2:6) ! b = ‘123456BC’ END PROGRAM test
Operatori su Stringhe • Operatore di Concatenazione:// PROGRAM test CHARACTER (len=10) :: a CHARACTER (len=8) :: b,c a = ‘ABCDEFGHIJ’ b = ‘12345678’ c = a(1:3) // b(4:5) // a(6:8) ! c = ‘ABG45FGH’ END PROGRAM test
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_input INTEGER :: i, j REAL :: a CHARACTER (len=12) :: testo READ (*,*) i, j, a, testo END PROGRAM esempio_di_input
Inizializzazione delle variabili • Le variabili devono sempre essere inizializzate prima di apparire in un’espressione. • PROGRAM init INTEGER :: i WRITE(*,*) i ! i non definita END PROGRAM init • PROGRAM init_1 INTEGER :: i, j i = 1 READ (*,*) j WRITE (*,*) i, j ! I definita END PROGRAM init_1
Inizializzazione delle variabili (continua) • L’inizializzazione può anche avvenire all’interno dalla dichiarazione delle variabili. PROGRAM init_2 INTEGER :: i = 1 WRITE (*,*) i END PROGRAM init_2