1 / 46

ENIAC E lectronic N umerical I ntegrator A nd C omputer

ENIAC E lectronic N umerical I ntegrator A nd C omputer. Fortran FORmula TRANslation. Linguaggio di programmazione in ambito scientifico ed ingegneristico. Fasi principali nella scrittura di un programma 1. EDITING : scrittura al calcolatore salvataggio su disco rigido del programma

deva
Download Presentation

ENIAC E lectronic N umerical I ntegrator A nd C omputer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. 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 PROGRAMnome-programma IMPLICIT NONE [sezione dichiarativa] [sezione esecutiva] [sezione di sottoprogrammi] END PROGRAMnome-programma 􀂄 nome-programma è il nome del programma 􀂄 sezione dichiarativa, sezione esecutiva, e sezione di sottoprogrammisono 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 + 1 ! 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 delFortran 90 include: • 􀂄lettere maiuscole e minuscole • 􀂄numeri • 􀂄caratteri speciali spazio ' " ( ) * + - / : = _ ! & $ ; < > % ? , . • Spazio bianconon 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 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.

  12. TIPO DEGLI IDENTIFICATORI type-specifier :: list type-specifierINTEGER 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 variabileintegerè una stringa di numeri con un segno opzionale: 12345 +12345-345+789 +0 • Una variabile real ha due forme, decimale ed esponenziale: 􀂄 Forma decimale: è una stringa di numeri con un punto. Può avere un segno 2.45 .13 13. -0.12 -.12 • Forma esponenziale: inizia con un intero/reale seguito da E/e seguito da un intero (l’esponente). • 􀂋 12E3 (12×103) -12e3 (-12×103) -12.e3 (-12×103) • 3.4E-8 (3.4×10-8) -3.4e-8 (-3.4×10-8) 0E0 (0×100=0) • 12.34-5 errato !

  14. 􀁺􀁺 Una variabile logicalè .true. o .false. • Una stringacharactero 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 = 3.1415926, 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 =

  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 ! → 5.-2. = 3. A=5.-5./2 ! → 5.-2.5 = 2.5 A=2 ! 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. INTEGER, DIMENSION(5) :: a INTEGER, DIMENSION(−1:3) :: b

  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 implicitaDOT 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

  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

More Related