Introduzione al linguaggio Fortran 90 Ing. Luca De Santis DIS - Dipartimento di informatica e sistemistica Anno accademico 2007/2008 Fortran 90: concetti di base DIS - Dipartimento di informatica e sistemistica 1 / 14
Cosa vedremo in questa lezione 1 Conversione di tipo 2 Funzioni in Fortran 90 3 Elaborazioni sui caratteri 4 Input e output con formato libero Fortran 90: concetti di base DIS - Dipartimento di informatica e sistemistica 2 / 14
Conversione di tipo Conversione di tipo implicita In espressioni miste (cioè che contengono sia reali sia interi), viene effettuata automaticamente (cioè senza una richiesta esplicita del programmatore) una conversione da intero a reale. Esempi:! CONVERSIONE AUTOMATICA: 2 > 2. WRITE(, ) 7. 0 2! stampa 1 4. 0! NESSUNA CONVERSIONE AUTOMATICA WRITE(, ) 1 + 1/4! stampa 1! nota : 1/4 è u g u a l e a 0! CONVERSIONE AUTOMATICA: 0 > 0. WRITE(, ) 1. + 1/4! stampa 1. 0! CONVERSIONE AUTOMATICA: 1 > 1. E 4 > 4. WRITE(, ) 1 + 1. / 4! stampa 1. 2 5 Fortran 90: concetti di base DIS - Dipartimento di informatica e sistemistica 3 / 14
Conversione di tipo Conversione di tipo in istruzioni di assegnazione In caso di istruzione di assegnazione: variabile = espressione in cui variabile ed espressione hanno tipo diverso, l espressione viene convertita (implicitamente) al tipo della variabile. Esempi: 1 INTEGER : : i 2 REAL : : r 3! a l t r e i s t r u z i o n i.... 4! c o n v e r s i o n e i m p l i c i t a da i n t e r o a r e a l e 5 r = 3! CONVERSIONE AUTOMATICA: 3 > 3. 6 WRITE (, ) r! stampa 3. 0 7! c o n v e r s i o n e i m p l i c i t a ( troncamento ) da r e a l e a i n t e r o 8 i = 3. 2! TRONCAMENTO AUTOMATICO: 3. 2 > 3 9 WRITE (, ) i! stampa 3 10 i = 3. 9! TRONCAMENTO AUTOMATICO: 3. 9 > 3 11 WRITE (, ) i! stampa 3 Fortran 90: concetti di base DIS - Dipartimento di informatica e sistemistica 4 / 14
Conversione di tipo Conversione di tipo esplicita In tutti i casi in cui non siamo soddisfatti della conversione implicita, possiamo forzare la conversione, mediante delle funzioni di conversione esplicita. Nome Dominio Codominio Valore restituito REAL(A) INTEGER REAL reale corrispondente ad A INT(A) REAL INTEGER intero corrispondente ad A (troncamento) NINT(A) REAL INTEGER intero corrispondente ad A (arrotondam.) Esempio di applicazione: Conversione da euro a lire (file LIRE.F90) Viene inserito un REAL (quantità degli euro) Viene calcolato un REAL (quantità delle lire). Dobbiamo stampare un INTEGER. Soluzione: usiamo NINT. Fortran 90: concetti di base DIS - Dipartimento di informatica e sistemistica 5 / 14
Programma Fortran 90 Conversione di tipo 1! F i l e : l i r e. f 9 0 2! Time stamp : 01/12/19 1 5 : 0 7 : 3 8 c a d o l i 3! Scopo : i l l u s t r a r e l uso d i c o s t a n t i con nome e l uso d e l l a f u n z i o n e d i 4! c o n v e r s i o n e r e a l i >i n t e r i 5 6 PROGRAM l i r e 7! Questo programma l e g g e un v a l o r e i n e u r o ( r e a l e ) da t a s t i e r a, 8! e stampa i l c o r r i s p e t t i v o i n l i r e ( i n t e r o ) 9 10! SEZIONE DICHIARATIVA 11 IMPLICIT NONE 12 REAL, PARAMETER : : l i r e p e r e u r o = 1936.27! d i c h i a r a z i o n e d i una c o s t a n t e 13! con nome 14 REAL : : e u r o! d i c h i a r a z i o n e d i una v a r i a b i l e 15 16! SEZIONE ESECUTIVA 17 WRITE (, ) I n s e r i s c i q u a n t i t a d i e u r o : 18 READ(, ) e u r o 19 WRITE (, ) I l c o r r i s p e t t i v o i n l i r e e :, NINT( e u r o l i r e p e r e u r o ) 20 21 STOP 22 END PROGRAM l i r e Fortran 90: concetti di base DIS - Dipartimento di informatica e sistemistica 6 / 14
Funzioni in Fortran 90 Caratteristiche delle funzioni Fortran 90 Funzione (ad un solo valore): legge che associa ad ogni gruppo di valori in ingresso un solo valore. Fortran 90 mette a disposizione due meccanismi per utilizzare funzioni matematiche: Funzioni intrinseche Funzioni esterne (le vedremo più avanti) Le funzioni possono essere utilizzate nelle espressioni Anche all interno di altre funzioni! Nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile Fortran 90: concetti di base DIS - Dipartimento di informatica e sistemistica 7 / 14
Funzioni in Fortran 90 Dettagli sulle funzioni Input/output nelle funzioni Valori in ingresso: ARGOMENTI della funzione Valore (unico) in uscita: REAL, INTEGER, CHARACTER, LOGICAL Meccanismo utilizzato: Fortran 90: concetti di base DIS - Dipartimento di informatica e sistemistica 8 / 14
Funzioni in Fortran 90 Funzioni predefinite (o intrinseche) Ne esistono tantissime (vedere libro, par. 2.7 e Appendice A). Principali (per i nostri scopi): Nome Dominio Codominio Valore restituito Note COS(A) R R cos(a) A in radianti SIN(A) R R sin(a) A in radianti TAN(A) R R tan(a) A in radianti ACOS(A) R R arccos(a) A in radianti ASIN(A) R R arcsin(a) A in radianti ATAN(A) R R arctan(a) A in radianti EXP(A) R R e A LOG(A) R R log e A LOG10(A) R R SQRT(A) R R log 10 A A ABS(A) R, I R, I A MOD(A,B) I I resto di A/B Fortran 90: concetti di base DIS - Dipartimento di informatica e sistemistica 9 / 14
Funzioni in Fortran 90 Esempi: calcolo di varie formule Formule della Geometria Dato il raggio, calcolare volume e superficie di una sfera! -- Sezione dichiarativa REAL :: raggio REAL, PARAMETER :: pigreco = 3.141592! -- Sezione esecutiva READ(*,*) raggio WRITE(*,*) Il volume della sfera e :, (4*pigreco*raggio**3)/3 WRITE(*,*) La superficie della sfera e :, 4*pigreco*raggio**2 Formule della Fisica Formule sui resti Fortran 90: concetti di base DIS - Dipartimento di informatica e sistemistica 10 / 14
Funzioni in Fortran 90 Esempi: calcolo di varie formule Formule della Geometria Formule della Fisica Data in ingresso la lunghezza del filo di un pendolo semplice, calcolare il suo periodo di oscillazione! -- Sezione dichiarativa REAL :: lunghezza filo REAL, PARAMETER :: pigreco = 3.141592 REAL, PARAMETER :: g = 9.81! -- Sezione esecutiva READ(*,*) lunghezza filo WRITE(*,*) Il periodo del pendolo e : Formule sui resti, 2*pigreco*sqrt(lunghezza filo/g) Fortran 90: concetti di base DIS - Dipartimento di informatica e sistemistica 10 / 14
Funzioni in Fortran 90 Esempi: calcolo di varie formule Formule della Geometria Formule della Fisica Formule sui resti Data una quantità di tempo in ore, minuti e secondi, calcolarne la metà! -- Sezione dichiarativa INTEGER :: ore, minuti, secondi INTEGER :: meta ore, meta minuti, meta secondi INTEGER :: resto ore, resto minuti! -- Sezione esecutiva READ(*,*) ore, minuti, secondi meta ore = ore/2 resto ore = MOD(ore, 2) meta minuti = (minuti + resto ore*60)/2 resto minuti = MOD((minuti + resto ore*60),2) meta secondi = (secondi + resto minuti*60)/2 WRITE(*,*) la meta e : meta ore, meta minuti, meta secondi Fortran 90: concetti di base DIS - Dipartimento di informatica e sistemistica 10 / 14
Elaborazioni su caratteri e stringhe Elaborazioni sui caratteri Operazioni tipiche sulle stringhe: Selezione di sottostringa WRITE(*,*) stringa(1:8)! 8 compresi Concatenazione stringa = ciao. // f90 stampa i caratteri da 1 a Funzioni predefinite sulle stringhe Nome Dominio Codominio Valore restituito IACHAR(A) CHARACTER(1) INTEGER codice ASCII di A ACHAR(A) INTEGER CHARACTER(1) carattere il cui codice ASCII è A Fortran 90: concetti di base DIS - Dipartimento di informatica e sistemistica 11 / 14
Esempio di elaborazione di caratteri Elaborazioni sui caratteri 1 PROGRAM prova 2! S e z i o n e d i c h i a r a t i v a 3 IMPLICIT NONE 4 INTEGER : : i 5 CHARACTER( 1 ) : : c 6 7! S e z i o n e e s e c u t i v a 8 WRITE(, ) I n s e r i s c i un c a r a t t e r e : 9 READ(, ) c 10 WRITE(, ) I l c o d i c e ASCII d i, c, e :, IACHAR( c ) 11 WRITE(, ) I n s e r i s c i un i n t e r o 12 READ(, ) i 13 WRITE(, ) I l c a r a t t e r e, ACHAR( i ), ha c o d i c e ASCII, i 14 15 STOP 16 END PROGRAM prova Applicazione: Algebra dei caratteri (file CARATT1.F90). Fortran 90: concetti di base DIS - Dipartimento di informatica e sistemistica 12 / 14
Algebra dei caratteri Elaborazioni sui caratteri 1! F i l e : c a r a t t 1. f 9 0 2! Time stamp : 01/12/19 1 5 : 0 7 : 3 4 c a d o l i 3! Scopo : m o s t r a r e o p e r a z i o n i su c a r a t t e r i e i n t e r i 4 5 PROGRAM a v a n z a c a r a t t e r e 1 6! Questo programma l e g g e un c a r a t t e r e a l f a b e t i c o m a i u s c o l o c ed un 7! i n t e r o p o s i t i v o i, e stampa i l c a r a t t e r e a l f a b e t i c o che s e g u e c d i i 8! p o s i z i o n i n e l l ordinamento a l f a b e t i c o. 9! Ad esempio, s e l i n p u t e c o s t i t u i t o da B e 3, l o u t p u t e E. 10! ASSUNZIONE : i l r i s u l t a t o e sempre i n f e r i o r e o u g u a l e a Z. 11 12! SEZIONE DICHIARATIVA 13 IMPLICIT NONE 14 CHARACTER( 1 ) : : c! i l c a r a t t e r e l e t t o 15 INTEGER : : i! l i n t e r o l e t t o 16! SEZIONE ESECUTIVA 17 WRITE(, ) I n s e r i s c i un c a r a t t e r e m a i u s c o l o : 18 READ (, ) c 19 WRITE(, ) I n s e r i s c i un i n t e r o p o s i t i v o : 20 READ (, ) i 21 WRITE(, ) I l c a r a t t e r e che s e g u e, c, d i, i, p o s t i e :, & 22 & ACHAR(IACHAR( c ) + i ) 23 STOP 24 END PROGRAM a v a n z a c a r a t t e r e 1 Fortran 90: concetti di base DIS - Dipartimento di informatica e sistemistica 13 / 14
Input e output con formato libero Input e output con formato libero Lettura da tastiera Istruzione READ(*,*) listainput Primo argomento: dispositivo da cui leggere le informazioni (se asterisco è il dispositivo standard) Secondo argomento: informazioni di formattazione (se asterisco formattazione standard) listainput è un elenco di variabili separate da virgole I valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine) Scrittura su schermo Fortran 90: concetti di base DIS - Dipartimento di informatica e sistemistica 14 / 14
Input e output con formato libero Input e output con formato libero Lettura da tastiera Scrittura su schermo Istruzione WRITE(*,*) listaoutput Primo argomento: dispositivo su cui scrivere le informazioni (se asterisco è il dispositivo standard) Secondo argomento: informazioni di formattazione (se asterisco formattazione standard) listaoutput è un elenco di variabili, costanti, funzioni ed espressioni separate da virgole Fortran 90: concetti di base DIS - Dipartimento di informatica e sistemistica 14 / 14