La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

ENIAC Electronic Numerical Integrator And Computer

Presentazioni simili


Presentazione sul tema: "ENIAC Electronic Numerical Integrator And Computer"— Transcript della presentazione:

1 ENIAC Electronic Numerical Integrator And Computer

2 Fortran FORmula TRANslation
Linguaggio di programmazione in ambito scientifico ed ingegneristico

3 Fasi principali nella scrittura di un programma
1. EDITING: scrittura al calcolatore salvataggio su disco rigido del programma si usa un programma apposito (editor) RISULTATO: file sorgente (CIAO.F90) 2. COMPILAZIONE trasformazione in un linguaggio COMPRENSIBILE dalla CPU si usa un programma apposito (compilatore) RISULTATO: file oggetto (CIAO.OBJ) 3. COLLEGAMENTO trasformazione in un linguaggio eseguibile dalla CPU si usa un programma apposito (collegatore o linker) RISULTATO: file eseguibile (CIAO.EXE) 4. ESECUZIONE/VERIFICA si fa eseguire il programma se l’esecuzione è quella attesa, allora abbiamo terminato altrimenti, dobbiamo ritornare alla FASE 1

4 COMPILAZIONE + COLLEGAMENTO
EDITING scrittura del programma con un editor salvarlo come nome.f nome e’ libero Aprire una finestra Linux ed eseguire i seguenti comandi COMPILAZIONE ifort -c nome.f90 RISULTATO: file oggetto nome.o COLLEGAMENTO ifort nome.o –o nome.exe RISULTATO: file eseguibile nome.exe COMPILAZIONE + COLLEGAMENTO ifort nome.f90 –o nome.exe ESECUZIONE eseguire il programma nome.exe

5 PROGRAM ciao ! Questo programma stampa un messaggio sullo schermo WRITE (*,*) ’CIAO ! ’ STOP END PROGRAM ciao

6 Struttura di un programma F90
PROGRAM nome-programma IMPLICIT NONE [sezione dichiarativa] [sezione esecutiva] [sezione di sottoprogrammi] END PROGRAM nome-programma 􀂄 nome-programma è il nome del programma 􀂄 sezione dichiarativa, sezione esecutiva, e sezione di sottoprogrammi sono opzionali. Sebbene IMPLICIT NONE sia opzionale, è bene inserirlo per scrivere un programma sicuro.

7 Commenti in un programma
I commenti cominciano con !􀁺 Servono al programmatore, il computer li ignora ! Esempio ! PROGRAM Commenti READ(*,*) anno ! leggi il valore dell’anno anno = anno ! aggiungi 1 al valore dell’anno END PROGRAM Commenti

8 Continuazione di una linea
􀁺Fortran 90 ha un formato quasi completamente libero Scrivere un codice in formato leggibile !! 􀁺Ogni istruzione deve cominciare con una nuova linea. 􀁺Se l’istruzione è troppo lunga (> 132 caratteri) per stare in una linea deve essere continuata sulla successiva. 􀁺Il carattere di continuazione è & e non fa parte dell’istruzione. Totale = Totale + & A * B ! Totale = Totale + A*B PROGRAM & LineaContinuazione ! PROGRAM LineaContinuazione

9 Alfabeto L’alfabeto del Fortran 90 include:
􀂄lettere maiuscole e minuscole 􀂄numeri 􀂄caratteri speciali spazio ' " ( ) * / : = _ ! & $ ; < > % ? , . Spazio bianco non deve apparire entro una parola chiave INTEGER e non INTE GER entro un identificatore nome e non nom e deve apparire tra due parole chiave tra una parola chiave ed un identificatore

10 SEZIONE DICHIARATIVA

11 IDENTIFICATORI Un identificatore (nome per indicare costanti, variabili ed unità del programma) non può avere più di 31 caratteri. Il primo deve essere una lettera. I restanti caratteri, se ci sono, possono essere lettere, numeri o segno di sottolineatura. 􀁺 A Name toTAL System_ myFile_ my_1st_F90_program_X_ Gli identificatori sono indipendenti dai caratteri maiuscolo e minuscolo. 􀁺 Name nAmE naME NamE sono lo stesso identificatore. Evitare di usare parole chiave (READ IF PROGRAM) come identificatori per evitare confusione.

12 TIPO DEGLI IDENTIFICATORI
type-specifier :: list type-specifier INTEGER REAL LOGICAL COMPLEX CHARACTER list è una sequenza di identificatori separati da virgola. INTEGER :: Zip, Totale, angolo REAL :: AVERAGE, x, Differenza LOGICAL :: Condizione, OK COMPLEX :: Coniugato

13 Una variabile integer è una stringa di numeri con un segno opzionale:
Una variabile real ha due forme, decimale ed esponenziale: 􀂄 Forma decimale: è una stringa di numeri con un punto. Può avere un segno Forma esponenziale: inizia con un intero/reale seguito da E/e seguito da un intero (l’esponente). 􀂋 12E3 (12×103) e3 (-12×103) e3 (-12×103) 3.4E-8 (3.4×10-8) e-8 (-3.4×10-8) E0 (0×100=0) errato !

14 􀁺􀁺 Una variabile logical è .true. o .false.
Una stringa character o una variabile character è una stringa di caratteri racchiusa tra apici o doppi apici “abc” ‘Giovanni’ “#$%^” ‘()()’ 􀁺

15 Le variabili CHARACTER richiedono la lunghezza della stringa di caratteri.
CHARACTER deve essere seguita da (LEN = l) , dove l è la lunghezza della stringa. Se la lunghezza è 1, si può usare CHARACTER senza specificare la lunghezza. 􀂄CHARACTER(LEN=20) :: Pippo, Casa CHARACTER(20) :: Pippo, Casa Le variabili Pippo e Casa possono contenere fino a 20 caratteri. 􀂄􀂄CHARACTER :: alfa alfa può contenere 1 solo carattere (cioè LEN=1).

16 Costanti in Fortran PARAMETER associa ad un identificatore un valore che non può più essere modificato: definisce una costante con nome. L’attributo PARAMETER è usato dopo la dichiarazione di tipo Ciascun identificatore è seguito da = e dal valore di quell’identificatore. INTEGER, PARAMETER :: MASSIMO = 10 REAL, PARAMETER :: PI = , E = -2.9 LOGICAL, PARAMETER :: VERO = .true., FALSO = .false. CHARACTER(LEN=2), PARAMETER :: NO = “no” ! Len = 2 CHARACTER(LEN=*), PARAMETER :: & Domanda = “Cosa vuoi?” ! Len = 10

17 a b c d x y 􀁺Le stringhe hanno lunghezza fissa 􀂄
Se una stringa è più lunga della (LEN=…) di PARAMETER è troncata a destra. Se una stringa è più corta spazi sono aggiunti a destra. CHARACTER(LEN=4), PARAMETER :: ABC = “abcdef” CHARACTER(LEN=4), PARAMETER :: XYZ = “xy” ABC = XYZ = a b c d x y

18 SEZIONE ESECUTIVA

19 INIZIALIZZAZIONE DI UNA VARIABILE
Inizializzazione: fatta prima dell’esecuzione del programma. Assegnazione: fatta quando il programma esegue un’istruzione di assegnazione. Input: fatta con un’istruzione READ. INTEGER, PARAMETER :: Quanti = 10 INTEGER :: Case, sassi …. case = 5 READ (*,*) sassi

20 Struttura dell’istruzione di assegnazione:
variabile = espressione Effetto dell’istruzione di assegnazione: 1. valuta espressione 2. assegna a variabile il valore ottenuto: modifica variabile non modifica espressione A = 0 A = A + 1 A = B

21 Espressioni Per costruire un’espressione possiamo usare
Operatori aritmetici Operatori relazionali Operatori logici

22 Operatori aritmetici + addizione - sottrazione * moltiplicazione / divisione ** elevamento a potenza NB: esistono predefinite regole di precedenza tra gli operatori numerici: ** Precedenza più alta * o / + o Precedenza più bassa Operatori relazionali > < >= <= == /+ Operatori logici .AND. .OR. .NOT.

23 Conversione di tipo implicita
In espressioni miste (cioè che contengono sia reali sia interi), viene effettuata automaticamente la conversione da intero a reale. REAL :: A A=6.*3 ! → 6.*3. = 18. A=5.-5/2 ! → = 3. A=5.-5./2 ! → = 2.5 A= ! A=2. Conversione di tipo esplicita REAL(A) reale corrispondente ad A INT(A) intero corrispondente ad A (troncamento) NINT(A) intero corrispondente ad A (arrotondamento)

24 Istruzioni condizionali di diramazione
IF “logico”: IF (espressione logica) istruzione IF THEN ELSE [nome:] IF (espressione logica 1) THEN sequenza di istruzioni 1 ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2 ELSE [nome] sequenza di istruzioni 3 END IF [nome]

25 SELECT CASE (espressione di CASE)
CASE (selettore 1) sequenza di istruzioni 1 CASE (selettore 2) sequenza di istruzioni 2 CASE DEFAULT sequenza di istruzioni 3 END SELECT espressione di CASE deve essere di tipo INTEGER o CHARACTER o LOGICAL END SELECT è obbligatorio CASE DEFAULT non è obbligatorio

26 Iterazione definita DO indice = inizio,fine [,incremento]
sequenza di istruzioni END DO indice è una variabile di tipo INTEGER inizio, fine e incremento sono espressioni di tipo INTEGER incremento è OPZIONALE, se assente implicitamente vale 1 NESSUNA variabile che occorre in inizio, fine e incremento può essere cambiata in sequenza di istruzioni

27 Iterazione indefinita
DO sequenza di istruzioni 1 IF espressione logica EXIT sequenza di istruzioni 2 END DO DO sequenza di istruzioni 1 IF espressione logica CYCLE sequenza di istruzioni 2 END DO sequenza di istruzioni 1 oppure sequenza di istruzioni 2 può essere vuota (non entrambe) EXIT interrompe l’esecuzione del ciclo DO CYCLE l’esecuzione del ciclo DO riprende dalla prima istruzione del ciclo

28 Lettura da tastiera 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)

29 Scrittura su schermo 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

30 Ciclo DO implicito WRITE (*,*) (val1,val2,...., i = inizio,fine[,passo]) READ (*,*) (valore(i), i = inizio,fine[,passo]) WRITE (*,*) (valore(i), i = inizio,fine[,passo])

31 ARRAY Sequenza di variabili TUTTE DELLO STESSO TIPO (tutte intere, tutte reali, ) identificate da un nome array monodimensionale = VETTORE array bidimensionale = MATRICE array tridimensionale array n-dimensionale (con n fino a 7) Le variabili degli array (solitamente) occupano posizioni consecutive

32 tipo, DIMENSION( [estremo inferiore:] estremo superiore) ::
nome array tipo può essere qualsiasi (INTEGER, REAL, LOGICAL, CHARACTER()). estremo inferiore è OPZIONALE, implicitamente vale 1 il numero di elementi dell’array è : estremo superiore - estremo inferiore + 1. estremo superiore ed estremo inferiore devono essere costanti di tipo INTEGER. nome array segue le stesse regole dei nomi di variabili e costanti Poiché un elemento di array è una variabile, può essere usato ogni volta che è lecito usare una variabile

33 a(1) a(2) a(3) a(4) a(5) b(-1) b(0) b(1) b(2) b(3)
INTEGER, DIMENSION(5) :: a a(1) a(2) a(3) a(4) a(5) INTEGER, DIMENSION(−1:3) :: b b(-1) b(0) b(1) b(2) b(3)

34 Le operazioni aritmetiche possono essere applicate agli array,
purché abbiano la stessa forma INTEGER, DIMENSION(5) :: risultato INTEGER, DIMENSION(−1:3) :: vettore_1 INTEGER, DIMENSION(12:16) :: vettore_2 risultato = vettore_1 + vettore_2 risultato = vettore_1 - vettore_2 risultato = vettore_1 * vettore_2 risultato = vettore_1 / vettore_2 risultato = vettore_1 ** vettore_2 Le operazioni vengono effettuate elemento per elemento Per fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 , vettore_2) E’ sempre possibile effettuare operazioni tra array e scalari

35 FUNZIONI INTRINSECHE DEGLI ARRAY
MAXVAL(A, D) : restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D è omessa, restituisce il valore massimo dell' intero array) MAXLOC(A) : restituisce la locazione di memoria del valore max lungo D di A SUM(A, D) : restituisce un array che contiene le somme degli elementi di A lungo la dimensione D (se la D è omessa, restituisce la somma degli elementi dell' intero array) MATMUL(A, B) : restituisce il prodotto di A e B TRANSPOSE(A) : restituisce la trasposta della matrice 2d A

36 Assegnazione di memoria per gli ARRAY
REAL, DIMENSION(:,:), ALLOCATABLE :: A …….. ALLOCATE(A(N, N), STAT = AllocateStatus) IF (AllocateStatus/ = 0) then WRITE (*,*) " * * * non abbastanza memoria* * * " STOP ENDIF …… DEALLOCATE (A, Stat = DeAllocateStatus)

37 SEZIONE di SOTTOPROGRAMMI

38 2 tipi di unità di programma
SUBROUTINE FUNCTION

39 SUBROUTINE SUBROUTINE nome subroutine ( lista argomenti FITTIZI )
sezione dichiarativa sezione esecutiva [RETURN] END SUBROUTINE nome subroutine Per invocare una subroutine è necessario utilizzare l’istruzione CALL CALL nome subroutine(lista argomenti)

40 Esistono tre modalità (INTENT) distinte per ogni parametro
passato: INTENT(IN) INTENT(OUT) INTENT(IN OUT) La modalità va decisa a seconda del verso della comunicazione fra unità chiamante e unità chiamata, utilizzando opportunamente l’attributo INTENT

41 PROGRAM chiama REAL :: a,b,c a=3. b=5. CALL prod (a,b,c) WRITE (*,*) c END PROGRAM chiama SUBROUTINE prod (m1,m2,p) REAL,INTENT(IN) :: m1,m2 REAL,INTENT(OUT) :: p P=m1*m2 END SUBROUTINE prod

42 Generazione di numeri casuali con distribuzione uniforme 0-1
REAL :: casuale CALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

43 FUNZIONI Funzione (ad un solo valore): legge che associa ad ogni gruppo di valori in ingresso un solo valore. Due meccanismi per utilizzare funzioni matematiche: Funzioni intrinseche Funzioni esterne 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

44 FUNCTION FUNCTION nomefunction ( lista argomenti )
sezione dichiarativa TIPO :: nomefunction sezione esecutiva nomefunction = espressione [RETURN] END FUNCTION [nome function] Le funzioni definite dall’utente possono essere utilizzate come qualsiasi funzione implicita. Non possono essere utilizzate nella parte sinistra di una istruzione di assegnazione. Forma equivalente: TIPO FUNCTION nome function( lista argomenti )

45 FUNZIONI INTRINSECHE Funzione Tipo argomento Tipo di ritorno ABS(x)
reale intero SQRT(x) SIN(x) COS(x) TAN(x) ASIN(x) ACOS(x) ATAN(x) EXP(x) LOG(x) LOG10(x) MOD(A,B)

46 Differenze delle FUNCTION rispetto alle SUBROUTINE:
Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate all’interno di espressioni Nell’invocazione, non va usata la parola chiave CALL I parametri in ingresso non dovrebbero mai essere modificati


Scaricare ppt "ENIAC Electronic Numerical Integrator And Computer"

Presentazioni simili


Annunci Google