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 lesecuzione è quella attesa, allora abbiamo terminato altrimenti, dobbiamo ritornare alla FASE 1

4 EDITING scrittura del programma con un editor salvarlo come nome.f90 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 RISULTATO: file eseguibile 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 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. PROGRAM nome-programma IMPLICIT NONE [sezione dichiarativa] [sezione esecutiva] [sezione di sottoprogrammi] END PROGRAM nome-programma

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

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

9 Lalfabeto del Fortran 90 include: lettere maiuscole e minuscole numeri caratteri speciali Alfabeto 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 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 toTAL123 System_ myFile_01 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. IDENTIFICATORI

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 (lesponente). 12E3 (12×10 3 ) -12e3 (-12×10 3 ) -12.e3 (-12×10 3 ) 3.4E-8 (3.4×10 -8 ) -3.4e-8 (-3.4×10 -8 ) 0E0 (0×10 0 =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. Lattributo PARAMETER è usato dopo la dichiarazione di tipo Ciascun identificatore è seguito da = e dal valore di quellidentificatore. 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 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 = abcd xy

18 SEZIONE ESECUTIVA

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

20 Struttura dellistruzione di assegnazione: variabile = espressione Effetto dellistruzione 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 unespressione 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 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=2 ! A=2. Conversione di tipo implicita 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 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] IF logico: IF (espressione logica) istruzione Istruzioni condizionali di diramazione

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 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 Iterazione definita

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

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 dellarray è : 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 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 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 FUNZIONI INTRINSECHE DEGLI ARRAY

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 listruzione 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 lattributo 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 allinterno 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 dallutente 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 FunzioneTipo argomentoTipo di ritorno ABS(x)reale intero reale intero SQRT(x)reale SIN(x)reale COS(x)reale TAN(x)reale ASIN(x)reale ACOS(x)reale ATAN(x)reale EXP(x)reale LOG(x)reale LOG10(x)reale MOD(A,B) intero FUNZIONI INTRINSECHE

46 Differenze delle FUNCTION rispetto alle SUBROUTINE: Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allinterno di espressioni Nellinvocazione, 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