ENIAC Electronic Numerical Integrator And Computer.

46
ENIAC Electronic Numerical Integrator And Computer

Transcript of ENIAC Electronic Numerical Integrator And Computer.

Page 1: ENIAC Electronic Numerical Integrator And Computer.

ENIAC Electronic Numerical Integrator And Computer

FortranFORmula TRANslation

Linguaggio di programmazione in ambito scientifico ed ingegneristico

Fasi principali nella scrittura di un programma1 EDITINGscrittura al calcolatoresalvataggio su disco rigido del programmasi usa un programma apposito (editor)RISULTATO file sorgente (CIAOF90)

2 COMPILAZIONEtrasformazione in un linguaggio COMPRENSIBILE dalla CPUsi usa un programma apposito (compilatore)RISULTATO file oggetto (CIAOOBJ)

3 COLLEGAMENTOtrasformazione in un linguaggio eseguibile dalla CPUsi usa un programma apposito (collegatore o linker)RISULTATO file eseguibile (CIAOEXE)

4 ESECUZIONEVERIFICAsi fa eseguire il programmase lrsquoesecuzione egrave quella attesa allora abbiamo terminatoaltrimenti dobbiamo ritornare alla FASE 1

EDITINGscrittura del programma con un editorsalvarlo come nomef90 nome ersquo libero

Aprire una finestra Linux ed eseguire i seguenti comandi

COMPILAZIONEifort -c nomef90RISULTATO file oggetto nomeo

COLLEGAMENTOifort nomeo ndasho nomeexeRISULTATO file eseguibile nomeexe

COMPILAZIONE + COLLEGAMENTOifort nomef90 ndasho nomeexeRISULTATO file eseguibile nomeexe

ESECUZIONEeseguire il programmanomeexe

PROGRAM ciao Questo programma stampa un messaggio sullo schermo

WRITE () rsquoCIAO rsquo

STOPEND PROGRAM ciao

Struttura di un programma F90

1048708 nome-programma egrave il nome del programma1048708 sezione dichiarativa sezione esecutiva e sezione di sottoprogrammi sono opzionaliSebbene IMPLICIT NONE sia opzionale egrave bene inserirlo per scrivere un programma sicuro

PROGRAM nome-programmaIMPLICIT NONE[sezione dichiarativa][sezione esecutiva][sezione di sottoprogrammi]END PROGRAM nome-programma

Commenti in un programma

I commenti cominciano con 1048708Servono al programmatore il computer li ignora

EsempioPROGRAM CommentiREAD() anno leggi il valore dellrsquoannoanno = anno + 1 aggiungi 1 al valore dellrsquoannoEND PROGRAM Commenti

bull1048708Fortran 90 ha un formato quasi completamente libero

bull Scrivere un codice in formato leggibile

bull1048708Ogni istruzione deve cominciare con una nuova linea

bull1048708Se lrsquoistruzione egrave troppo lunga (gt 132 caratteri) per stare in una linea deve essere continuata sulla successiva

bull1048708Il carattere di continuazione egrave amp e non fa parte dellrsquoistruzione

Continuazione di una linea

Totale = Totale + ampA B Totale = Totale + ABPROGRAM ampLineaContinuazione PROGRAM LineaContinuazione

Lrsquoalfabeto del Fortran 90 include

bull1048708lettere maiuscole e minuscole

bull1048708numeri

bull1048708caratteri speciali

Alfabeto

spazio ( ) + - =_ amp $ lt gt

Spazio bianco non deve apparire bull entro una parola chiave INTEGER e non INTE GERbull entro un identificatore nome e non nom e

deve apparirebull tra due parole chiavebull tra una parola chiave ed un identificatore

SEZIONE

DICHIARATIVA

Un identificatore (nome per indicare costanti variabili ed unitagrave del programma) non puograve avere piugrave di 31 caratteri

Il primo deve essere una lettera

I restanti caratteri se ci sono possono essere lettere numeri o segno di sottolineatura

1048708 A Name toTAL123 System_myFile_01 my_1st_F90_program_X_

Gli identificatori sono indipendenti dai caratteri maiuscolo e minuscolo

1048708 Name nAmE naME NamE sono lo stesso identificatore

Evitare di usare parole chiave (READ IF PROGRAM) come identificatori per evitare confusione

IDENTIFICATORI

TIPO DEGLI IDENTIFICATORI

type-specifier listtype-specifier INTEGER

REALLOGICALCOMPLEXCHARACTER

list egrave una sequenza di identificatori separati da virgola

INTEGER Zip Totale angoloREAL AVERAGE x DifferenzaLOGICAL Condizione OKCOMPLEX Coniugato

Una variabile integer egrave una stringa di numeri con un segno opzionale

12345 +12345 -345 +789 +0

Una variabile real ha due forme decimale ed esponenziale1048708 Forma decimale egrave una stringa di numeri con un punto Puograve

avere un segno 245 13 13 -012 -12Forma esponenziale inizia con un interoreale seguito da Ee seguito da un intero (lrsquoesponente)

1048708 12E3 (12times103) -12e3 (-12times103) -12e3 (-12times103)34E-8 (34times10-8) -34e-8 (-34times10-8) 0E0 (0times100=0) 1234-5 errato

10487081048708 Una variabile logical egrave true o false

Una stringa character o una variabile character egrave una stringa di caratteri racchiusa tra apici o doppi apici

ldquoabcrdquo lsquoGiovannirsquo ldquo$^rdquo lsquo()()rsquo 1048708

Le variabili CHARACTER richiedono la lunghezza della stringa di caratteri

CHARACTER deve essere seguita da (LEN = l) dove l egrave la lunghezza della stringa

Se la lunghezza egrave 1 si puograve usare CHARACTER senza specificare la lunghezza

1048708CHARACTER(LEN=20) Pippo Casa CHARACTER(20) Pippo CasaLe variabili Pippo e Casa possono contenere fino a 20 caratteri10487081048708CHARACTER alfaalfa puograve contenere 1 solo carattere (cioegrave LEN=1)

Costanti in Fortran

PARAMETER associa ad un identificatore un valore che non puograve piugrave essere modificato definisce una costante con nomeLrsquoattributo PARAMETER egrave usato dopo la dichiarazione di tipoCiascun identificatore egrave seguito da = e dal valore di quellrsquoidentificatore

INTEGER PARAMETER MASSIMO = 10REAL PARAMETER PI = 31415926 E = -29LOGICAL PARAMETER VERO = true FALSO = falseCHARACTER(LEN=2) PARAMETER NO = ldquonordquo Len = 2CHARACTER(LEN=) PARAMETER ampDomanda = ldquoCosa vuoirdquo Len = 10

1048708Le stringhe hanno lunghezza fissa

1048708

Se una stringa egrave piugrave lunga della (LEN=hellip) di PARAMETER egrave troncata a destra

Se una stringa egrave piugrave corta spazi sono aggiunti a destra

CHARACTER(LEN=4) PARAMETER ABC = ldquoabcdefrdquoCHARACTER(LEN=4) PARAMETER XYZ = ldquoxyrdquo

ABC = XYZ = a b c d x y

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 2: ENIAC Electronic Numerical Integrator And Computer.

FortranFORmula TRANslation

Linguaggio di programmazione in ambito scientifico ed ingegneristico

Fasi principali nella scrittura di un programma1 EDITINGscrittura al calcolatoresalvataggio su disco rigido del programmasi usa un programma apposito (editor)RISULTATO file sorgente (CIAOF90)

2 COMPILAZIONEtrasformazione in un linguaggio COMPRENSIBILE dalla CPUsi usa un programma apposito (compilatore)RISULTATO file oggetto (CIAOOBJ)

3 COLLEGAMENTOtrasformazione in un linguaggio eseguibile dalla CPUsi usa un programma apposito (collegatore o linker)RISULTATO file eseguibile (CIAOEXE)

4 ESECUZIONEVERIFICAsi fa eseguire il programmase lrsquoesecuzione egrave quella attesa allora abbiamo terminatoaltrimenti dobbiamo ritornare alla FASE 1

EDITINGscrittura del programma con un editorsalvarlo come nomef90 nome ersquo libero

Aprire una finestra Linux ed eseguire i seguenti comandi

COMPILAZIONEifort -c nomef90RISULTATO file oggetto nomeo

COLLEGAMENTOifort nomeo ndasho nomeexeRISULTATO file eseguibile nomeexe

COMPILAZIONE + COLLEGAMENTOifort nomef90 ndasho nomeexeRISULTATO file eseguibile nomeexe

ESECUZIONEeseguire il programmanomeexe

PROGRAM ciao Questo programma stampa un messaggio sullo schermo

WRITE () rsquoCIAO rsquo

STOPEND PROGRAM ciao

Struttura di un programma F90

1048708 nome-programma egrave il nome del programma1048708 sezione dichiarativa sezione esecutiva e sezione di sottoprogrammi sono opzionaliSebbene IMPLICIT NONE sia opzionale egrave bene inserirlo per scrivere un programma sicuro

PROGRAM nome-programmaIMPLICIT NONE[sezione dichiarativa][sezione esecutiva][sezione di sottoprogrammi]END PROGRAM nome-programma

Commenti in un programma

I commenti cominciano con 1048708Servono al programmatore il computer li ignora

EsempioPROGRAM CommentiREAD() anno leggi il valore dellrsquoannoanno = anno + 1 aggiungi 1 al valore dellrsquoannoEND PROGRAM Commenti

bull1048708Fortran 90 ha un formato quasi completamente libero

bull Scrivere un codice in formato leggibile

bull1048708Ogni istruzione deve cominciare con una nuova linea

bull1048708Se lrsquoistruzione egrave troppo lunga (gt 132 caratteri) per stare in una linea deve essere continuata sulla successiva

bull1048708Il carattere di continuazione egrave amp e non fa parte dellrsquoistruzione

Continuazione di una linea

Totale = Totale + ampA B Totale = Totale + ABPROGRAM ampLineaContinuazione PROGRAM LineaContinuazione

Lrsquoalfabeto del Fortran 90 include

bull1048708lettere maiuscole e minuscole

bull1048708numeri

bull1048708caratteri speciali

Alfabeto

spazio ( ) + - =_ amp $ lt gt

Spazio bianco non deve apparire bull entro una parola chiave INTEGER e non INTE GERbull entro un identificatore nome e non nom e

deve apparirebull tra due parole chiavebull tra una parola chiave ed un identificatore

SEZIONE

DICHIARATIVA

Un identificatore (nome per indicare costanti variabili ed unitagrave del programma) non puograve avere piugrave di 31 caratteri

Il primo deve essere una lettera

I restanti caratteri se ci sono possono essere lettere numeri o segno di sottolineatura

1048708 A Name toTAL123 System_myFile_01 my_1st_F90_program_X_

Gli identificatori sono indipendenti dai caratteri maiuscolo e minuscolo

1048708 Name nAmE naME NamE sono lo stesso identificatore

Evitare di usare parole chiave (READ IF PROGRAM) come identificatori per evitare confusione

IDENTIFICATORI

TIPO DEGLI IDENTIFICATORI

type-specifier listtype-specifier INTEGER

REALLOGICALCOMPLEXCHARACTER

list egrave una sequenza di identificatori separati da virgola

INTEGER Zip Totale angoloREAL AVERAGE x DifferenzaLOGICAL Condizione OKCOMPLEX Coniugato

Una variabile integer egrave una stringa di numeri con un segno opzionale

12345 +12345 -345 +789 +0

Una variabile real ha due forme decimale ed esponenziale1048708 Forma decimale egrave una stringa di numeri con un punto Puograve

avere un segno 245 13 13 -012 -12Forma esponenziale inizia con un interoreale seguito da Ee seguito da un intero (lrsquoesponente)

1048708 12E3 (12times103) -12e3 (-12times103) -12e3 (-12times103)34E-8 (34times10-8) -34e-8 (-34times10-8) 0E0 (0times100=0) 1234-5 errato

10487081048708 Una variabile logical egrave true o false

Una stringa character o una variabile character egrave una stringa di caratteri racchiusa tra apici o doppi apici

ldquoabcrdquo lsquoGiovannirsquo ldquo$^rdquo lsquo()()rsquo 1048708

Le variabili CHARACTER richiedono la lunghezza della stringa di caratteri

CHARACTER deve essere seguita da (LEN = l) dove l egrave la lunghezza della stringa

Se la lunghezza egrave 1 si puograve usare CHARACTER senza specificare la lunghezza

1048708CHARACTER(LEN=20) Pippo Casa CHARACTER(20) Pippo CasaLe variabili Pippo e Casa possono contenere fino a 20 caratteri10487081048708CHARACTER alfaalfa puograve contenere 1 solo carattere (cioegrave LEN=1)

Costanti in Fortran

PARAMETER associa ad un identificatore un valore che non puograve piugrave essere modificato definisce una costante con nomeLrsquoattributo PARAMETER egrave usato dopo la dichiarazione di tipoCiascun identificatore egrave seguito da = e dal valore di quellrsquoidentificatore

INTEGER PARAMETER MASSIMO = 10REAL PARAMETER PI = 31415926 E = -29LOGICAL PARAMETER VERO = true FALSO = falseCHARACTER(LEN=2) PARAMETER NO = ldquonordquo Len = 2CHARACTER(LEN=) PARAMETER ampDomanda = ldquoCosa vuoirdquo Len = 10

1048708Le stringhe hanno lunghezza fissa

1048708

Se una stringa egrave piugrave lunga della (LEN=hellip) di PARAMETER egrave troncata a destra

Se una stringa egrave piugrave corta spazi sono aggiunti a destra

CHARACTER(LEN=4) PARAMETER ABC = ldquoabcdefrdquoCHARACTER(LEN=4) PARAMETER XYZ = ldquoxyrdquo

ABC = XYZ = a b c d x y

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 3: ENIAC Electronic Numerical Integrator And Computer.

Fasi principali nella scrittura di un programma1 EDITINGscrittura al calcolatoresalvataggio su disco rigido del programmasi usa un programma apposito (editor)RISULTATO file sorgente (CIAOF90)

2 COMPILAZIONEtrasformazione in un linguaggio COMPRENSIBILE dalla CPUsi usa un programma apposito (compilatore)RISULTATO file oggetto (CIAOOBJ)

3 COLLEGAMENTOtrasformazione in un linguaggio eseguibile dalla CPUsi usa un programma apposito (collegatore o linker)RISULTATO file eseguibile (CIAOEXE)

4 ESECUZIONEVERIFICAsi fa eseguire il programmase lrsquoesecuzione egrave quella attesa allora abbiamo terminatoaltrimenti dobbiamo ritornare alla FASE 1

EDITINGscrittura del programma con un editorsalvarlo come nomef90 nome ersquo libero

Aprire una finestra Linux ed eseguire i seguenti comandi

COMPILAZIONEifort -c nomef90RISULTATO file oggetto nomeo

COLLEGAMENTOifort nomeo ndasho nomeexeRISULTATO file eseguibile nomeexe

COMPILAZIONE + COLLEGAMENTOifort nomef90 ndasho nomeexeRISULTATO file eseguibile nomeexe

ESECUZIONEeseguire il programmanomeexe

PROGRAM ciao Questo programma stampa un messaggio sullo schermo

WRITE () rsquoCIAO rsquo

STOPEND PROGRAM ciao

Struttura di un programma F90

1048708 nome-programma egrave il nome del programma1048708 sezione dichiarativa sezione esecutiva e sezione di sottoprogrammi sono opzionaliSebbene IMPLICIT NONE sia opzionale egrave bene inserirlo per scrivere un programma sicuro

PROGRAM nome-programmaIMPLICIT NONE[sezione dichiarativa][sezione esecutiva][sezione di sottoprogrammi]END PROGRAM nome-programma

Commenti in un programma

I commenti cominciano con 1048708Servono al programmatore il computer li ignora

EsempioPROGRAM CommentiREAD() anno leggi il valore dellrsquoannoanno = anno + 1 aggiungi 1 al valore dellrsquoannoEND PROGRAM Commenti

bull1048708Fortran 90 ha un formato quasi completamente libero

bull Scrivere un codice in formato leggibile

bull1048708Ogni istruzione deve cominciare con una nuova linea

bull1048708Se lrsquoistruzione egrave troppo lunga (gt 132 caratteri) per stare in una linea deve essere continuata sulla successiva

bull1048708Il carattere di continuazione egrave amp e non fa parte dellrsquoistruzione

Continuazione di una linea

Totale = Totale + ampA B Totale = Totale + ABPROGRAM ampLineaContinuazione PROGRAM LineaContinuazione

Lrsquoalfabeto del Fortran 90 include

bull1048708lettere maiuscole e minuscole

bull1048708numeri

bull1048708caratteri speciali

Alfabeto

spazio ( ) + - =_ amp $ lt gt

Spazio bianco non deve apparire bull entro una parola chiave INTEGER e non INTE GERbull entro un identificatore nome e non nom e

deve apparirebull tra due parole chiavebull tra una parola chiave ed un identificatore

SEZIONE

DICHIARATIVA

Un identificatore (nome per indicare costanti variabili ed unitagrave del programma) non puograve avere piugrave di 31 caratteri

Il primo deve essere una lettera

I restanti caratteri se ci sono possono essere lettere numeri o segno di sottolineatura

1048708 A Name toTAL123 System_myFile_01 my_1st_F90_program_X_

Gli identificatori sono indipendenti dai caratteri maiuscolo e minuscolo

1048708 Name nAmE naME NamE sono lo stesso identificatore

Evitare di usare parole chiave (READ IF PROGRAM) come identificatori per evitare confusione

IDENTIFICATORI

TIPO DEGLI IDENTIFICATORI

type-specifier listtype-specifier INTEGER

REALLOGICALCOMPLEXCHARACTER

list egrave una sequenza di identificatori separati da virgola

INTEGER Zip Totale angoloREAL AVERAGE x DifferenzaLOGICAL Condizione OKCOMPLEX Coniugato

Una variabile integer egrave una stringa di numeri con un segno opzionale

12345 +12345 -345 +789 +0

Una variabile real ha due forme decimale ed esponenziale1048708 Forma decimale egrave una stringa di numeri con un punto Puograve

avere un segno 245 13 13 -012 -12Forma esponenziale inizia con un interoreale seguito da Ee seguito da un intero (lrsquoesponente)

1048708 12E3 (12times103) -12e3 (-12times103) -12e3 (-12times103)34E-8 (34times10-8) -34e-8 (-34times10-8) 0E0 (0times100=0) 1234-5 errato

10487081048708 Una variabile logical egrave true o false

Una stringa character o una variabile character egrave una stringa di caratteri racchiusa tra apici o doppi apici

ldquoabcrdquo lsquoGiovannirsquo ldquo$^rdquo lsquo()()rsquo 1048708

Le variabili CHARACTER richiedono la lunghezza della stringa di caratteri

CHARACTER deve essere seguita da (LEN = l) dove l egrave la lunghezza della stringa

Se la lunghezza egrave 1 si puograve usare CHARACTER senza specificare la lunghezza

1048708CHARACTER(LEN=20) Pippo Casa CHARACTER(20) Pippo CasaLe variabili Pippo e Casa possono contenere fino a 20 caratteri10487081048708CHARACTER alfaalfa puograve contenere 1 solo carattere (cioegrave LEN=1)

Costanti in Fortran

PARAMETER associa ad un identificatore un valore che non puograve piugrave essere modificato definisce una costante con nomeLrsquoattributo PARAMETER egrave usato dopo la dichiarazione di tipoCiascun identificatore egrave seguito da = e dal valore di quellrsquoidentificatore

INTEGER PARAMETER MASSIMO = 10REAL PARAMETER PI = 31415926 E = -29LOGICAL PARAMETER VERO = true FALSO = falseCHARACTER(LEN=2) PARAMETER NO = ldquonordquo Len = 2CHARACTER(LEN=) PARAMETER ampDomanda = ldquoCosa vuoirdquo Len = 10

1048708Le stringhe hanno lunghezza fissa

1048708

Se una stringa egrave piugrave lunga della (LEN=hellip) di PARAMETER egrave troncata a destra

Se una stringa egrave piugrave corta spazi sono aggiunti a destra

CHARACTER(LEN=4) PARAMETER ABC = ldquoabcdefrdquoCHARACTER(LEN=4) PARAMETER XYZ = ldquoxyrdquo

ABC = XYZ = a b c d x y

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 4: ENIAC Electronic Numerical Integrator And Computer.

EDITINGscrittura del programma con un editorsalvarlo come nomef90 nome ersquo libero

Aprire una finestra Linux ed eseguire i seguenti comandi

COMPILAZIONEifort -c nomef90RISULTATO file oggetto nomeo

COLLEGAMENTOifort nomeo ndasho nomeexeRISULTATO file eseguibile nomeexe

COMPILAZIONE + COLLEGAMENTOifort nomef90 ndasho nomeexeRISULTATO file eseguibile nomeexe

ESECUZIONEeseguire il programmanomeexe

PROGRAM ciao Questo programma stampa un messaggio sullo schermo

WRITE () rsquoCIAO rsquo

STOPEND PROGRAM ciao

Struttura di un programma F90

1048708 nome-programma egrave il nome del programma1048708 sezione dichiarativa sezione esecutiva e sezione di sottoprogrammi sono opzionaliSebbene IMPLICIT NONE sia opzionale egrave bene inserirlo per scrivere un programma sicuro

PROGRAM nome-programmaIMPLICIT NONE[sezione dichiarativa][sezione esecutiva][sezione di sottoprogrammi]END PROGRAM nome-programma

Commenti in un programma

I commenti cominciano con 1048708Servono al programmatore il computer li ignora

EsempioPROGRAM CommentiREAD() anno leggi il valore dellrsquoannoanno = anno + 1 aggiungi 1 al valore dellrsquoannoEND PROGRAM Commenti

bull1048708Fortran 90 ha un formato quasi completamente libero

bull Scrivere un codice in formato leggibile

bull1048708Ogni istruzione deve cominciare con una nuova linea

bull1048708Se lrsquoistruzione egrave troppo lunga (gt 132 caratteri) per stare in una linea deve essere continuata sulla successiva

bull1048708Il carattere di continuazione egrave amp e non fa parte dellrsquoistruzione

Continuazione di una linea

Totale = Totale + ampA B Totale = Totale + ABPROGRAM ampLineaContinuazione PROGRAM LineaContinuazione

Lrsquoalfabeto del Fortran 90 include

bull1048708lettere maiuscole e minuscole

bull1048708numeri

bull1048708caratteri speciali

Alfabeto

spazio ( ) + - =_ amp $ lt gt

Spazio bianco non deve apparire bull entro una parola chiave INTEGER e non INTE GERbull entro un identificatore nome e non nom e

deve apparirebull tra due parole chiavebull tra una parola chiave ed un identificatore

SEZIONE

DICHIARATIVA

Un identificatore (nome per indicare costanti variabili ed unitagrave del programma) non puograve avere piugrave di 31 caratteri

Il primo deve essere una lettera

I restanti caratteri se ci sono possono essere lettere numeri o segno di sottolineatura

1048708 A Name toTAL123 System_myFile_01 my_1st_F90_program_X_

Gli identificatori sono indipendenti dai caratteri maiuscolo e minuscolo

1048708 Name nAmE naME NamE sono lo stesso identificatore

Evitare di usare parole chiave (READ IF PROGRAM) come identificatori per evitare confusione

IDENTIFICATORI

TIPO DEGLI IDENTIFICATORI

type-specifier listtype-specifier INTEGER

REALLOGICALCOMPLEXCHARACTER

list egrave una sequenza di identificatori separati da virgola

INTEGER Zip Totale angoloREAL AVERAGE x DifferenzaLOGICAL Condizione OKCOMPLEX Coniugato

Una variabile integer egrave una stringa di numeri con un segno opzionale

12345 +12345 -345 +789 +0

Una variabile real ha due forme decimale ed esponenziale1048708 Forma decimale egrave una stringa di numeri con un punto Puograve

avere un segno 245 13 13 -012 -12Forma esponenziale inizia con un interoreale seguito da Ee seguito da un intero (lrsquoesponente)

1048708 12E3 (12times103) -12e3 (-12times103) -12e3 (-12times103)34E-8 (34times10-8) -34e-8 (-34times10-8) 0E0 (0times100=0) 1234-5 errato

10487081048708 Una variabile logical egrave true o false

Una stringa character o una variabile character egrave una stringa di caratteri racchiusa tra apici o doppi apici

ldquoabcrdquo lsquoGiovannirsquo ldquo$^rdquo lsquo()()rsquo 1048708

Le variabili CHARACTER richiedono la lunghezza della stringa di caratteri

CHARACTER deve essere seguita da (LEN = l) dove l egrave la lunghezza della stringa

Se la lunghezza egrave 1 si puograve usare CHARACTER senza specificare la lunghezza

1048708CHARACTER(LEN=20) Pippo Casa CHARACTER(20) Pippo CasaLe variabili Pippo e Casa possono contenere fino a 20 caratteri10487081048708CHARACTER alfaalfa puograve contenere 1 solo carattere (cioegrave LEN=1)

Costanti in Fortran

PARAMETER associa ad un identificatore un valore che non puograve piugrave essere modificato definisce una costante con nomeLrsquoattributo PARAMETER egrave usato dopo la dichiarazione di tipoCiascun identificatore egrave seguito da = e dal valore di quellrsquoidentificatore

INTEGER PARAMETER MASSIMO = 10REAL PARAMETER PI = 31415926 E = -29LOGICAL PARAMETER VERO = true FALSO = falseCHARACTER(LEN=2) PARAMETER NO = ldquonordquo Len = 2CHARACTER(LEN=) PARAMETER ampDomanda = ldquoCosa vuoirdquo Len = 10

1048708Le stringhe hanno lunghezza fissa

1048708

Se una stringa egrave piugrave lunga della (LEN=hellip) di PARAMETER egrave troncata a destra

Se una stringa egrave piugrave corta spazi sono aggiunti a destra

CHARACTER(LEN=4) PARAMETER ABC = ldquoabcdefrdquoCHARACTER(LEN=4) PARAMETER XYZ = ldquoxyrdquo

ABC = XYZ = a b c d x y

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 5: ENIAC Electronic Numerical Integrator And Computer.

PROGRAM ciao Questo programma stampa un messaggio sullo schermo

WRITE () rsquoCIAO rsquo

STOPEND PROGRAM ciao

Struttura di un programma F90

1048708 nome-programma egrave il nome del programma1048708 sezione dichiarativa sezione esecutiva e sezione di sottoprogrammi sono opzionaliSebbene IMPLICIT NONE sia opzionale egrave bene inserirlo per scrivere un programma sicuro

PROGRAM nome-programmaIMPLICIT NONE[sezione dichiarativa][sezione esecutiva][sezione di sottoprogrammi]END PROGRAM nome-programma

Commenti in un programma

I commenti cominciano con 1048708Servono al programmatore il computer li ignora

EsempioPROGRAM CommentiREAD() anno leggi il valore dellrsquoannoanno = anno + 1 aggiungi 1 al valore dellrsquoannoEND PROGRAM Commenti

bull1048708Fortran 90 ha un formato quasi completamente libero

bull Scrivere un codice in formato leggibile

bull1048708Ogni istruzione deve cominciare con una nuova linea

bull1048708Se lrsquoistruzione egrave troppo lunga (gt 132 caratteri) per stare in una linea deve essere continuata sulla successiva

bull1048708Il carattere di continuazione egrave amp e non fa parte dellrsquoistruzione

Continuazione di una linea

Totale = Totale + ampA B Totale = Totale + ABPROGRAM ampLineaContinuazione PROGRAM LineaContinuazione

Lrsquoalfabeto del Fortran 90 include

bull1048708lettere maiuscole e minuscole

bull1048708numeri

bull1048708caratteri speciali

Alfabeto

spazio ( ) + - =_ amp $ lt gt

Spazio bianco non deve apparire bull entro una parola chiave INTEGER e non INTE GERbull entro un identificatore nome e non nom e

deve apparirebull tra due parole chiavebull tra una parola chiave ed un identificatore

SEZIONE

DICHIARATIVA

Un identificatore (nome per indicare costanti variabili ed unitagrave del programma) non puograve avere piugrave di 31 caratteri

Il primo deve essere una lettera

I restanti caratteri se ci sono possono essere lettere numeri o segno di sottolineatura

1048708 A Name toTAL123 System_myFile_01 my_1st_F90_program_X_

Gli identificatori sono indipendenti dai caratteri maiuscolo e minuscolo

1048708 Name nAmE naME NamE sono lo stesso identificatore

Evitare di usare parole chiave (READ IF PROGRAM) come identificatori per evitare confusione

IDENTIFICATORI

TIPO DEGLI IDENTIFICATORI

type-specifier listtype-specifier INTEGER

REALLOGICALCOMPLEXCHARACTER

list egrave una sequenza di identificatori separati da virgola

INTEGER Zip Totale angoloREAL AVERAGE x DifferenzaLOGICAL Condizione OKCOMPLEX Coniugato

Una variabile integer egrave una stringa di numeri con un segno opzionale

12345 +12345 -345 +789 +0

Una variabile real ha due forme decimale ed esponenziale1048708 Forma decimale egrave una stringa di numeri con un punto Puograve

avere un segno 245 13 13 -012 -12Forma esponenziale inizia con un interoreale seguito da Ee seguito da un intero (lrsquoesponente)

1048708 12E3 (12times103) -12e3 (-12times103) -12e3 (-12times103)34E-8 (34times10-8) -34e-8 (-34times10-8) 0E0 (0times100=0) 1234-5 errato

10487081048708 Una variabile logical egrave true o false

Una stringa character o una variabile character egrave una stringa di caratteri racchiusa tra apici o doppi apici

ldquoabcrdquo lsquoGiovannirsquo ldquo$^rdquo lsquo()()rsquo 1048708

Le variabili CHARACTER richiedono la lunghezza della stringa di caratteri

CHARACTER deve essere seguita da (LEN = l) dove l egrave la lunghezza della stringa

Se la lunghezza egrave 1 si puograve usare CHARACTER senza specificare la lunghezza

1048708CHARACTER(LEN=20) Pippo Casa CHARACTER(20) Pippo CasaLe variabili Pippo e Casa possono contenere fino a 20 caratteri10487081048708CHARACTER alfaalfa puograve contenere 1 solo carattere (cioegrave LEN=1)

Costanti in Fortran

PARAMETER associa ad un identificatore un valore che non puograve piugrave essere modificato definisce una costante con nomeLrsquoattributo PARAMETER egrave usato dopo la dichiarazione di tipoCiascun identificatore egrave seguito da = e dal valore di quellrsquoidentificatore

INTEGER PARAMETER MASSIMO = 10REAL PARAMETER PI = 31415926 E = -29LOGICAL PARAMETER VERO = true FALSO = falseCHARACTER(LEN=2) PARAMETER NO = ldquonordquo Len = 2CHARACTER(LEN=) PARAMETER ampDomanda = ldquoCosa vuoirdquo Len = 10

1048708Le stringhe hanno lunghezza fissa

1048708

Se una stringa egrave piugrave lunga della (LEN=hellip) di PARAMETER egrave troncata a destra

Se una stringa egrave piugrave corta spazi sono aggiunti a destra

CHARACTER(LEN=4) PARAMETER ABC = ldquoabcdefrdquoCHARACTER(LEN=4) PARAMETER XYZ = ldquoxyrdquo

ABC = XYZ = a b c d x y

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 6: ENIAC Electronic Numerical Integrator And Computer.

Struttura di un programma F90

1048708 nome-programma egrave il nome del programma1048708 sezione dichiarativa sezione esecutiva e sezione di sottoprogrammi sono opzionaliSebbene IMPLICIT NONE sia opzionale egrave bene inserirlo per scrivere un programma sicuro

PROGRAM nome-programmaIMPLICIT NONE[sezione dichiarativa][sezione esecutiva][sezione di sottoprogrammi]END PROGRAM nome-programma

Commenti in un programma

I commenti cominciano con 1048708Servono al programmatore il computer li ignora

EsempioPROGRAM CommentiREAD() anno leggi il valore dellrsquoannoanno = anno + 1 aggiungi 1 al valore dellrsquoannoEND PROGRAM Commenti

bull1048708Fortran 90 ha un formato quasi completamente libero

bull Scrivere un codice in formato leggibile

bull1048708Ogni istruzione deve cominciare con una nuova linea

bull1048708Se lrsquoistruzione egrave troppo lunga (gt 132 caratteri) per stare in una linea deve essere continuata sulla successiva

bull1048708Il carattere di continuazione egrave amp e non fa parte dellrsquoistruzione

Continuazione di una linea

Totale = Totale + ampA B Totale = Totale + ABPROGRAM ampLineaContinuazione PROGRAM LineaContinuazione

Lrsquoalfabeto del Fortran 90 include

bull1048708lettere maiuscole e minuscole

bull1048708numeri

bull1048708caratteri speciali

Alfabeto

spazio ( ) + - =_ amp $ lt gt

Spazio bianco non deve apparire bull entro una parola chiave INTEGER e non INTE GERbull entro un identificatore nome e non nom e

deve apparirebull tra due parole chiavebull tra una parola chiave ed un identificatore

SEZIONE

DICHIARATIVA

Un identificatore (nome per indicare costanti variabili ed unitagrave del programma) non puograve avere piugrave di 31 caratteri

Il primo deve essere una lettera

I restanti caratteri se ci sono possono essere lettere numeri o segno di sottolineatura

1048708 A Name toTAL123 System_myFile_01 my_1st_F90_program_X_

Gli identificatori sono indipendenti dai caratteri maiuscolo e minuscolo

1048708 Name nAmE naME NamE sono lo stesso identificatore

Evitare di usare parole chiave (READ IF PROGRAM) come identificatori per evitare confusione

IDENTIFICATORI

TIPO DEGLI IDENTIFICATORI

type-specifier listtype-specifier INTEGER

REALLOGICALCOMPLEXCHARACTER

list egrave una sequenza di identificatori separati da virgola

INTEGER Zip Totale angoloREAL AVERAGE x DifferenzaLOGICAL Condizione OKCOMPLEX Coniugato

Una variabile integer egrave una stringa di numeri con un segno opzionale

12345 +12345 -345 +789 +0

Una variabile real ha due forme decimale ed esponenziale1048708 Forma decimale egrave una stringa di numeri con un punto Puograve

avere un segno 245 13 13 -012 -12Forma esponenziale inizia con un interoreale seguito da Ee seguito da un intero (lrsquoesponente)

1048708 12E3 (12times103) -12e3 (-12times103) -12e3 (-12times103)34E-8 (34times10-8) -34e-8 (-34times10-8) 0E0 (0times100=0) 1234-5 errato

10487081048708 Una variabile logical egrave true o false

Una stringa character o una variabile character egrave una stringa di caratteri racchiusa tra apici o doppi apici

ldquoabcrdquo lsquoGiovannirsquo ldquo$^rdquo lsquo()()rsquo 1048708

Le variabili CHARACTER richiedono la lunghezza della stringa di caratteri

CHARACTER deve essere seguita da (LEN = l) dove l egrave la lunghezza della stringa

Se la lunghezza egrave 1 si puograve usare CHARACTER senza specificare la lunghezza

1048708CHARACTER(LEN=20) Pippo Casa CHARACTER(20) Pippo CasaLe variabili Pippo e Casa possono contenere fino a 20 caratteri10487081048708CHARACTER alfaalfa puograve contenere 1 solo carattere (cioegrave LEN=1)

Costanti in Fortran

PARAMETER associa ad un identificatore un valore che non puograve piugrave essere modificato definisce una costante con nomeLrsquoattributo PARAMETER egrave usato dopo la dichiarazione di tipoCiascun identificatore egrave seguito da = e dal valore di quellrsquoidentificatore

INTEGER PARAMETER MASSIMO = 10REAL PARAMETER PI = 31415926 E = -29LOGICAL PARAMETER VERO = true FALSO = falseCHARACTER(LEN=2) PARAMETER NO = ldquonordquo Len = 2CHARACTER(LEN=) PARAMETER ampDomanda = ldquoCosa vuoirdquo Len = 10

1048708Le stringhe hanno lunghezza fissa

1048708

Se una stringa egrave piugrave lunga della (LEN=hellip) di PARAMETER egrave troncata a destra

Se una stringa egrave piugrave corta spazi sono aggiunti a destra

CHARACTER(LEN=4) PARAMETER ABC = ldquoabcdefrdquoCHARACTER(LEN=4) PARAMETER XYZ = ldquoxyrdquo

ABC = XYZ = a b c d x y

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 7: ENIAC Electronic Numerical Integrator And Computer.

Commenti in un programma

I commenti cominciano con 1048708Servono al programmatore il computer li ignora

EsempioPROGRAM CommentiREAD() anno leggi il valore dellrsquoannoanno = anno + 1 aggiungi 1 al valore dellrsquoannoEND PROGRAM Commenti

bull1048708Fortran 90 ha un formato quasi completamente libero

bull Scrivere un codice in formato leggibile

bull1048708Ogni istruzione deve cominciare con una nuova linea

bull1048708Se lrsquoistruzione egrave troppo lunga (gt 132 caratteri) per stare in una linea deve essere continuata sulla successiva

bull1048708Il carattere di continuazione egrave amp e non fa parte dellrsquoistruzione

Continuazione di una linea

Totale = Totale + ampA B Totale = Totale + ABPROGRAM ampLineaContinuazione PROGRAM LineaContinuazione

Lrsquoalfabeto del Fortran 90 include

bull1048708lettere maiuscole e minuscole

bull1048708numeri

bull1048708caratteri speciali

Alfabeto

spazio ( ) + - =_ amp $ lt gt

Spazio bianco non deve apparire bull entro una parola chiave INTEGER e non INTE GERbull entro un identificatore nome e non nom e

deve apparirebull tra due parole chiavebull tra una parola chiave ed un identificatore

SEZIONE

DICHIARATIVA

Un identificatore (nome per indicare costanti variabili ed unitagrave del programma) non puograve avere piugrave di 31 caratteri

Il primo deve essere una lettera

I restanti caratteri se ci sono possono essere lettere numeri o segno di sottolineatura

1048708 A Name toTAL123 System_myFile_01 my_1st_F90_program_X_

Gli identificatori sono indipendenti dai caratteri maiuscolo e minuscolo

1048708 Name nAmE naME NamE sono lo stesso identificatore

Evitare di usare parole chiave (READ IF PROGRAM) come identificatori per evitare confusione

IDENTIFICATORI

TIPO DEGLI IDENTIFICATORI

type-specifier listtype-specifier INTEGER

REALLOGICALCOMPLEXCHARACTER

list egrave una sequenza di identificatori separati da virgola

INTEGER Zip Totale angoloREAL AVERAGE x DifferenzaLOGICAL Condizione OKCOMPLEX Coniugato

Una variabile integer egrave una stringa di numeri con un segno opzionale

12345 +12345 -345 +789 +0

Una variabile real ha due forme decimale ed esponenziale1048708 Forma decimale egrave una stringa di numeri con un punto Puograve

avere un segno 245 13 13 -012 -12Forma esponenziale inizia con un interoreale seguito da Ee seguito da un intero (lrsquoesponente)

1048708 12E3 (12times103) -12e3 (-12times103) -12e3 (-12times103)34E-8 (34times10-8) -34e-8 (-34times10-8) 0E0 (0times100=0) 1234-5 errato

10487081048708 Una variabile logical egrave true o false

Una stringa character o una variabile character egrave una stringa di caratteri racchiusa tra apici o doppi apici

ldquoabcrdquo lsquoGiovannirsquo ldquo$^rdquo lsquo()()rsquo 1048708

Le variabili CHARACTER richiedono la lunghezza della stringa di caratteri

CHARACTER deve essere seguita da (LEN = l) dove l egrave la lunghezza della stringa

Se la lunghezza egrave 1 si puograve usare CHARACTER senza specificare la lunghezza

1048708CHARACTER(LEN=20) Pippo Casa CHARACTER(20) Pippo CasaLe variabili Pippo e Casa possono contenere fino a 20 caratteri10487081048708CHARACTER alfaalfa puograve contenere 1 solo carattere (cioegrave LEN=1)

Costanti in Fortran

PARAMETER associa ad un identificatore un valore che non puograve piugrave essere modificato definisce una costante con nomeLrsquoattributo PARAMETER egrave usato dopo la dichiarazione di tipoCiascun identificatore egrave seguito da = e dal valore di quellrsquoidentificatore

INTEGER PARAMETER MASSIMO = 10REAL PARAMETER PI = 31415926 E = -29LOGICAL PARAMETER VERO = true FALSO = falseCHARACTER(LEN=2) PARAMETER NO = ldquonordquo Len = 2CHARACTER(LEN=) PARAMETER ampDomanda = ldquoCosa vuoirdquo Len = 10

1048708Le stringhe hanno lunghezza fissa

1048708

Se una stringa egrave piugrave lunga della (LEN=hellip) di PARAMETER egrave troncata a destra

Se una stringa egrave piugrave corta spazi sono aggiunti a destra

CHARACTER(LEN=4) PARAMETER ABC = ldquoabcdefrdquoCHARACTER(LEN=4) PARAMETER XYZ = ldquoxyrdquo

ABC = XYZ = a b c d x y

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 8: ENIAC Electronic Numerical Integrator And Computer.

bull1048708Fortran 90 ha un formato quasi completamente libero

bull Scrivere un codice in formato leggibile

bull1048708Ogni istruzione deve cominciare con una nuova linea

bull1048708Se lrsquoistruzione egrave troppo lunga (gt 132 caratteri) per stare in una linea deve essere continuata sulla successiva

bull1048708Il carattere di continuazione egrave amp e non fa parte dellrsquoistruzione

Continuazione di una linea

Totale = Totale + ampA B Totale = Totale + ABPROGRAM ampLineaContinuazione PROGRAM LineaContinuazione

Lrsquoalfabeto del Fortran 90 include

bull1048708lettere maiuscole e minuscole

bull1048708numeri

bull1048708caratteri speciali

Alfabeto

spazio ( ) + - =_ amp $ lt gt

Spazio bianco non deve apparire bull entro una parola chiave INTEGER e non INTE GERbull entro un identificatore nome e non nom e

deve apparirebull tra due parole chiavebull tra una parola chiave ed un identificatore

SEZIONE

DICHIARATIVA

Un identificatore (nome per indicare costanti variabili ed unitagrave del programma) non puograve avere piugrave di 31 caratteri

Il primo deve essere una lettera

I restanti caratteri se ci sono possono essere lettere numeri o segno di sottolineatura

1048708 A Name toTAL123 System_myFile_01 my_1st_F90_program_X_

Gli identificatori sono indipendenti dai caratteri maiuscolo e minuscolo

1048708 Name nAmE naME NamE sono lo stesso identificatore

Evitare di usare parole chiave (READ IF PROGRAM) come identificatori per evitare confusione

IDENTIFICATORI

TIPO DEGLI IDENTIFICATORI

type-specifier listtype-specifier INTEGER

REALLOGICALCOMPLEXCHARACTER

list egrave una sequenza di identificatori separati da virgola

INTEGER Zip Totale angoloREAL AVERAGE x DifferenzaLOGICAL Condizione OKCOMPLEX Coniugato

Una variabile integer egrave una stringa di numeri con un segno opzionale

12345 +12345 -345 +789 +0

Una variabile real ha due forme decimale ed esponenziale1048708 Forma decimale egrave una stringa di numeri con un punto Puograve

avere un segno 245 13 13 -012 -12Forma esponenziale inizia con un interoreale seguito da Ee seguito da un intero (lrsquoesponente)

1048708 12E3 (12times103) -12e3 (-12times103) -12e3 (-12times103)34E-8 (34times10-8) -34e-8 (-34times10-8) 0E0 (0times100=0) 1234-5 errato

10487081048708 Una variabile logical egrave true o false

Una stringa character o una variabile character egrave una stringa di caratteri racchiusa tra apici o doppi apici

ldquoabcrdquo lsquoGiovannirsquo ldquo$^rdquo lsquo()()rsquo 1048708

Le variabili CHARACTER richiedono la lunghezza della stringa di caratteri

CHARACTER deve essere seguita da (LEN = l) dove l egrave la lunghezza della stringa

Se la lunghezza egrave 1 si puograve usare CHARACTER senza specificare la lunghezza

1048708CHARACTER(LEN=20) Pippo Casa CHARACTER(20) Pippo CasaLe variabili Pippo e Casa possono contenere fino a 20 caratteri10487081048708CHARACTER alfaalfa puograve contenere 1 solo carattere (cioegrave LEN=1)

Costanti in Fortran

PARAMETER associa ad un identificatore un valore che non puograve piugrave essere modificato definisce una costante con nomeLrsquoattributo PARAMETER egrave usato dopo la dichiarazione di tipoCiascun identificatore egrave seguito da = e dal valore di quellrsquoidentificatore

INTEGER PARAMETER MASSIMO = 10REAL PARAMETER PI = 31415926 E = -29LOGICAL PARAMETER VERO = true FALSO = falseCHARACTER(LEN=2) PARAMETER NO = ldquonordquo Len = 2CHARACTER(LEN=) PARAMETER ampDomanda = ldquoCosa vuoirdquo Len = 10

1048708Le stringhe hanno lunghezza fissa

1048708

Se una stringa egrave piugrave lunga della (LEN=hellip) di PARAMETER egrave troncata a destra

Se una stringa egrave piugrave corta spazi sono aggiunti a destra

CHARACTER(LEN=4) PARAMETER ABC = ldquoabcdefrdquoCHARACTER(LEN=4) PARAMETER XYZ = ldquoxyrdquo

ABC = XYZ = a b c d x y

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 9: ENIAC Electronic Numerical Integrator And Computer.

Lrsquoalfabeto del Fortran 90 include

bull1048708lettere maiuscole e minuscole

bull1048708numeri

bull1048708caratteri speciali

Alfabeto

spazio ( ) + - =_ amp $ lt gt

Spazio bianco non deve apparire bull entro una parola chiave INTEGER e non INTE GERbull entro un identificatore nome e non nom e

deve apparirebull tra due parole chiavebull tra una parola chiave ed un identificatore

SEZIONE

DICHIARATIVA

Un identificatore (nome per indicare costanti variabili ed unitagrave del programma) non puograve avere piugrave di 31 caratteri

Il primo deve essere una lettera

I restanti caratteri se ci sono possono essere lettere numeri o segno di sottolineatura

1048708 A Name toTAL123 System_myFile_01 my_1st_F90_program_X_

Gli identificatori sono indipendenti dai caratteri maiuscolo e minuscolo

1048708 Name nAmE naME NamE sono lo stesso identificatore

Evitare di usare parole chiave (READ IF PROGRAM) come identificatori per evitare confusione

IDENTIFICATORI

TIPO DEGLI IDENTIFICATORI

type-specifier listtype-specifier INTEGER

REALLOGICALCOMPLEXCHARACTER

list egrave una sequenza di identificatori separati da virgola

INTEGER Zip Totale angoloREAL AVERAGE x DifferenzaLOGICAL Condizione OKCOMPLEX Coniugato

Una variabile integer egrave una stringa di numeri con un segno opzionale

12345 +12345 -345 +789 +0

Una variabile real ha due forme decimale ed esponenziale1048708 Forma decimale egrave una stringa di numeri con un punto Puograve

avere un segno 245 13 13 -012 -12Forma esponenziale inizia con un interoreale seguito da Ee seguito da un intero (lrsquoesponente)

1048708 12E3 (12times103) -12e3 (-12times103) -12e3 (-12times103)34E-8 (34times10-8) -34e-8 (-34times10-8) 0E0 (0times100=0) 1234-5 errato

10487081048708 Una variabile logical egrave true o false

Una stringa character o una variabile character egrave una stringa di caratteri racchiusa tra apici o doppi apici

ldquoabcrdquo lsquoGiovannirsquo ldquo$^rdquo lsquo()()rsquo 1048708

Le variabili CHARACTER richiedono la lunghezza della stringa di caratteri

CHARACTER deve essere seguita da (LEN = l) dove l egrave la lunghezza della stringa

Se la lunghezza egrave 1 si puograve usare CHARACTER senza specificare la lunghezza

1048708CHARACTER(LEN=20) Pippo Casa CHARACTER(20) Pippo CasaLe variabili Pippo e Casa possono contenere fino a 20 caratteri10487081048708CHARACTER alfaalfa puograve contenere 1 solo carattere (cioegrave LEN=1)

Costanti in Fortran

PARAMETER associa ad un identificatore un valore che non puograve piugrave essere modificato definisce una costante con nomeLrsquoattributo PARAMETER egrave usato dopo la dichiarazione di tipoCiascun identificatore egrave seguito da = e dal valore di quellrsquoidentificatore

INTEGER PARAMETER MASSIMO = 10REAL PARAMETER PI = 31415926 E = -29LOGICAL PARAMETER VERO = true FALSO = falseCHARACTER(LEN=2) PARAMETER NO = ldquonordquo Len = 2CHARACTER(LEN=) PARAMETER ampDomanda = ldquoCosa vuoirdquo Len = 10

1048708Le stringhe hanno lunghezza fissa

1048708

Se una stringa egrave piugrave lunga della (LEN=hellip) di PARAMETER egrave troncata a destra

Se una stringa egrave piugrave corta spazi sono aggiunti a destra

CHARACTER(LEN=4) PARAMETER ABC = ldquoabcdefrdquoCHARACTER(LEN=4) PARAMETER XYZ = ldquoxyrdquo

ABC = XYZ = a b c d x y

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 10: ENIAC Electronic Numerical Integrator And Computer.

SEZIONE

DICHIARATIVA

Un identificatore (nome per indicare costanti variabili ed unitagrave del programma) non puograve avere piugrave di 31 caratteri

Il primo deve essere una lettera

I restanti caratteri se ci sono possono essere lettere numeri o segno di sottolineatura

1048708 A Name toTAL123 System_myFile_01 my_1st_F90_program_X_

Gli identificatori sono indipendenti dai caratteri maiuscolo e minuscolo

1048708 Name nAmE naME NamE sono lo stesso identificatore

Evitare di usare parole chiave (READ IF PROGRAM) come identificatori per evitare confusione

IDENTIFICATORI

TIPO DEGLI IDENTIFICATORI

type-specifier listtype-specifier INTEGER

REALLOGICALCOMPLEXCHARACTER

list egrave una sequenza di identificatori separati da virgola

INTEGER Zip Totale angoloREAL AVERAGE x DifferenzaLOGICAL Condizione OKCOMPLEX Coniugato

Una variabile integer egrave una stringa di numeri con un segno opzionale

12345 +12345 -345 +789 +0

Una variabile real ha due forme decimale ed esponenziale1048708 Forma decimale egrave una stringa di numeri con un punto Puograve

avere un segno 245 13 13 -012 -12Forma esponenziale inizia con un interoreale seguito da Ee seguito da un intero (lrsquoesponente)

1048708 12E3 (12times103) -12e3 (-12times103) -12e3 (-12times103)34E-8 (34times10-8) -34e-8 (-34times10-8) 0E0 (0times100=0) 1234-5 errato

10487081048708 Una variabile logical egrave true o false

Una stringa character o una variabile character egrave una stringa di caratteri racchiusa tra apici o doppi apici

ldquoabcrdquo lsquoGiovannirsquo ldquo$^rdquo lsquo()()rsquo 1048708

Le variabili CHARACTER richiedono la lunghezza della stringa di caratteri

CHARACTER deve essere seguita da (LEN = l) dove l egrave la lunghezza della stringa

Se la lunghezza egrave 1 si puograve usare CHARACTER senza specificare la lunghezza

1048708CHARACTER(LEN=20) Pippo Casa CHARACTER(20) Pippo CasaLe variabili Pippo e Casa possono contenere fino a 20 caratteri10487081048708CHARACTER alfaalfa puograve contenere 1 solo carattere (cioegrave LEN=1)

Costanti in Fortran

PARAMETER associa ad un identificatore un valore che non puograve piugrave essere modificato definisce una costante con nomeLrsquoattributo PARAMETER egrave usato dopo la dichiarazione di tipoCiascun identificatore egrave seguito da = e dal valore di quellrsquoidentificatore

INTEGER PARAMETER MASSIMO = 10REAL PARAMETER PI = 31415926 E = -29LOGICAL PARAMETER VERO = true FALSO = falseCHARACTER(LEN=2) PARAMETER NO = ldquonordquo Len = 2CHARACTER(LEN=) PARAMETER ampDomanda = ldquoCosa vuoirdquo Len = 10

1048708Le stringhe hanno lunghezza fissa

1048708

Se una stringa egrave piugrave lunga della (LEN=hellip) di PARAMETER egrave troncata a destra

Se una stringa egrave piugrave corta spazi sono aggiunti a destra

CHARACTER(LEN=4) PARAMETER ABC = ldquoabcdefrdquoCHARACTER(LEN=4) PARAMETER XYZ = ldquoxyrdquo

ABC = XYZ = a b c d x y

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 11: ENIAC Electronic Numerical Integrator And Computer.

Un identificatore (nome per indicare costanti variabili ed unitagrave del programma) non puograve avere piugrave di 31 caratteri

Il primo deve essere una lettera

I restanti caratteri se ci sono possono essere lettere numeri o segno di sottolineatura

1048708 A Name toTAL123 System_myFile_01 my_1st_F90_program_X_

Gli identificatori sono indipendenti dai caratteri maiuscolo e minuscolo

1048708 Name nAmE naME NamE sono lo stesso identificatore

Evitare di usare parole chiave (READ IF PROGRAM) come identificatori per evitare confusione

IDENTIFICATORI

TIPO DEGLI IDENTIFICATORI

type-specifier listtype-specifier INTEGER

REALLOGICALCOMPLEXCHARACTER

list egrave una sequenza di identificatori separati da virgola

INTEGER Zip Totale angoloREAL AVERAGE x DifferenzaLOGICAL Condizione OKCOMPLEX Coniugato

Una variabile integer egrave una stringa di numeri con un segno opzionale

12345 +12345 -345 +789 +0

Una variabile real ha due forme decimale ed esponenziale1048708 Forma decimale egrave una stringa di numeri con un punto Puograve

avere un segno 245 13 13 -012 -12Forma esponenziale inizia con un interoreale seguito da Ee seguito da un intero (lrsquoesponente)

1048708 12E3 (12times103) -12e3 (-12times103) -12e3 (-12times103)34E-8 (34times10-8) -34e-8 (-34times10-8) 0E0 (0times100=0) 1234-5 errato

10487081048708 Una variabile logical egrave true o false

Una stringa character o una variabile character egrave una stringa di caratteri racchiusa tra apici o doppi apici

ldquoabcrdquo lsquoGiovannirsquo ldquo$^rdquo lsquo()()rsquo 1048708

Le variabili CHARACTER richiedono la lunghezza della stringa di caratteri

CHARACTER deve essere seguita da (LEN = l) dove l egrave la lunghezza della stringa

Se la lunghezza egrave 1 si puograve usare CHARACTER senza specificare la lunghezza

1048708CHARACTER(LEN=20) Pippo Casa CHARACTER(20) Pippo CasaLe variabili Pippo e Casa possono contenere fino a 20 caratteri10487081048708CHARACTER alfaalfa puograve contenere 1 solo carattere (cioegrave LEN=1)

Costanti in Fortran

PARAMETER associa ad un identificatore un valore che non puograve piugrave essere modificato definisce una costante con nomeLrsquoattributo PARAMETER egrave usato dopo la dichiarazione di tipoCiascun identificatore egrave seguito da = e dal valore di quellrsquoidentificatore

INTEGER PARAMETER MASSIMO = 10REAL PARAMETER PI = 31415926 E = -29LOGICAL PARAMETER VERO = true FALSO = falseCHARACTER(LEN=2) PARAMETER NO = ldquonordquo Len = 2CHARACTER(LEN=) PARAMETER ampDomanda = ldquoCosa vuoirdquo Len = 10

1048708Le stringhe hanno lunghezza fissa

1048708

Se una stringa egrave piugrave lunga della (LEN=hellip) di PARAMETER egrave troncata a destra

Se una stringa egrave piugrave corta spazi sono aggiunti a destra

CHARACTER(LEN=4) PARAMETER ABC = ldquoabcdefrdquoCHARACTER(LEN=4) PARAMETER XYZ = ldquoxyrdquo

ABC = XYZ = a b c d x y

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 12: ENIAC Electronic Numerical Integrator And Computer.

TIPO DEGLI IDENTIFICATORI

type-specifier listtype-specifier INTEGER

REALLOGICALCOMPLEXCHARACTER

list egrave una sequenza di identificatori separati da virgola

INTEGER Zip Totale angoloREAL AVERAGE x DifferenzaLOGICAL Condizione OKCOMPLEX Coniugato

Una variabile integer egrave una stringa di numeri con un segno opzionale

12345 +12345 -345 +789 +0

Una variabile real ha due forme decimale ed esponenziale1048708 Forma decimale egrave una stringa di numeri con un punto Puograve

avere un segno 245 13 13 -012 -12Forma esponenziale inizia con un interoreale seguito da Ee seguito da un intero (lrsquoesponente)

1048708 12E3 (12times103) -12e3 (-12times103) -12e3 (-12times103)34E-8 (34times10-8) -34e-8 (-34times10-8) 0E0 (0times100=0) 1234-5 errato

10487081048708 Una variabile logical egrave true o false

Una stringa character o una variabile character egrave una stringa di caratteri racchiusa tra apici o doppi apici

ldquoabcrdquo lsquoGiovannirsquo ldquo$^rdquo lsquo()()rsquo 1048708

Le variabili CHARACTER richiedono la lunghezza della stringa di caratteri

CHARACTER deve essere seguita da (LEN = l) dove l egrave la lunghezza della stringa

Se la lunghezza egrave 1 si puograve usare CHARACTER senza specificare la lunghezza

1048708CHARACTER(LEN=20) Pippo Casa CHARACTER(20) Pippo CasaLe variabili Pippo e Casa possono contenere fino a 20 caratteri10487081048708CHARACTER alfaalfa puograve contenere 1 solo carattere (cioegrave LEN=1)

Costanti in Fortran

PARAMETER associa ad un identificatore un valore che non puograve piugrave essere modificato definisce una costante con nomeLrsquoattributo PARAMETER egrave usato dopo la dichiarazione di tipoCiascun identificatore egrave seguito da = e dal valore di quellrsquoidentificatore

INTEGER PARAMETER MASSIMO = 10REAL PARAMETER PI = 31415926 E = -29LOGICAL PARAMETER VERO = true FALSO = falseCHARACTER(LEN=2) PARAMETER NO = ldquonordquo Len = 2CHARACTER(LEN=) PARAMETER ampDomanda = ldquoCosa vuoirdquo Len = 10

1048708Le stringhe hanno lunghezza fissa

1048708

Se una stringa egrave piugrave lunga della (LEN=hellip) di PARAMETER egrave troncata a destra

Se una stringa egrave piugrave corta spazi sono aggiunti a destra

CHARACTER(LEN=4) PARAMETER ABC = ldquoabcdefrdquoCHARACTER(LEN=4) PARAMETER XYZ = ldquoxyrdquo

ABC = XYZ = a b c d x y

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 13: ENIAC Electronic Numerical Integrator And Computer.

Una variabile integer egrave una stringa di numeri con un segno opzionale

12345 +12345 -345 +789 +0

Una variabile real ha due forme decimale ed esponenziale1048708 Forma decimale egrave una stringa di numeri con un punto Puograve

avere un segno 245 13 13 -012 -12Forma esponenziale inizia con un interoreale seguito da Ee seguito da un intero (lrsquoesponente)

1048708 12E3 (12times103) -12e3 (-12times103) -12e3 (-12times103)34E-8 (34times10-8) -34e-8 (-34times10-8) 0E0 (0times100=0) 1234-5 errato

10487081048708 Una variabile logical egrave true o false

Una stringa character o una variabile character egrave una stringa di caratteri racchiusa tra apici o doppi apici

ldquoabcrdquo lsquoGiovannirsquo ldquo$^rdquo lsquo()()rsquo 1048708

Le variabili CHARACTER richiedono la lunghezza della stringa di caratteri

CHARACTER deve essere seguita da (LEN = l) dove l egrave la lunghezza della stringa

Se la lunghezza egrave 1 si puograve usare CHARACTER senza specificare la lunghezza

1048708CHARACTER(LEN=20) Pippo Casa CHARACTER(20) Pippo CasaLe variabili Pippo e Casa possono contenere fino a 20 caratteri10487081048708CHARACTER alfaalfa puograve contenere 1 solo carattere (cioegrave LEN=1)

Costanti in Fortran

PARAMETER associa ad un identificatore un valore che non puograve piugrave essere modificato definisce una costante con nomeLrsquoattributo PARAMETER egrave usato dopo la dichiarazione di tipoCiascun identificatore egrave seguito da = e dal valore di quellrsquoidentificatore

INTEGER PARAMETER MASSIMO = 10REAL PARAMETER PI = 31415926 E = -29LOGICAL PARAMETER VERO = true FALSO = falseCHARACTER(LEN=2) PARAMETER NO = ldquonordquo Len = 2CHARACTER(LEN=) PARAMETER ampDomanda = ldquoCosa vuoirdquo Len = 10

1048708Le stringhe hanno lunghezza fissa

1048708

Se una stringa egrave piugrave lunga della (LEN=hellip) di PARAMETER egrave troncata a destra

Se una stringa egrave piugrave corta spazi sono aggiunti a destra

CHARACTER(LEN=4) PARAMETER ABC = ldquoabcdefrdquoCHARACTER(LEN=4) PARAMETER XYZ = ldquoxyrdquo

ABC = XYZ = a b c d x y

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 14: ENIAC Electronic Numerical Integrator And Computer.

10487081048708 Una variabile logical egrave true o false

Una stringa character o una variabile character egrave una stringa di caratteri racchiusa tra apici o doppi apici

ldquoabcrdquo lsquoGiovannirsquo ldquo$^rdquo lsquo()()rsquo 1048708

Le variabili CHARACTER richiedono la lunghezza della stringa di caratteri

CHARACTER deve essere seguita da (LEN = l) dove l egrave la lunghezza della stringa

Se la lunghezza egrave 1 si puograve usare CHARACTER senza specificare la lunghezza

1048708CHARACTER(LEN=20) Pippo Casa CHARACTER(20) Pippo CasaLe variabili Pippo e Casa possono contenere fino a 20 caratteri10487081048708CHARACTER alfaalfa puograve contenere 1 solo carattere (cioegrave LEN=1)

Costanti in Fortran

PARAMETER associa ad un identificatore un valore che non puograve piugrave essere modificato definisce una costante con nomeLrsquoattributo PARAMETER egrave usato dopo la dichiarazione di tipoCiascun identificatore egrave seguito da = e dal valore di quellrsquoidentificatore

INTEGER PARAMETER MASSIMO = 10REAL PARAMETER PI = 31415926 E = -29LOGICAL PARAMETER VERO = true FALSO = falseCHARACTER(LEN=2) PARAMETER NO = ldquonordquo Len = 2CHARACTER(LEN=) PARAMETER ampDomanda = ldquoCosa vuoirdquo Len = 10

1048708Le stringhe hanno lunghezza fissa

1048708

Se una stringa egrave piugrave lunga della (LEN=hellip) di PARAMETER egrave troncata a destra

Se una stringa egrave piugrave corta spazi sono aggiunti a destra

CHARACTER(LEN=4) PARAMETER ABC = ldquoabcdefrdquoCHARACTER(LEN=4) PARAMETER XYZ = ldquoxyrdquo

ABC = XYZ = a b c d x y

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 15: ENIAC Electronic Numerical Integrator And Computer.

Le variabili CHARACTER richiedono la lunghezza della stringa di caratteri

CHARACTER deve essere seguita da (LEN = l) dove l egrave la lunghezza della stringa

Se la lunghezza egrave 1 si puograve usare CHARACTER senza specificare la lunghezza

1048708CHARACTER(LEN=20) Pippo Casa CHARACTER(20) Pippo CasaLe variabili Pippo e Casa possono contenere fino a 20 caratteri10487081048708CHARACTER alfaalfa puograve contenere 1 solo carattere (cioegrave LEN=1)

Costanti in Fortran

PARAMETER associa ad un identificatore un valore che non puograve piugrave essere modificato definisce una costante con nomeLrsquoattributo PARAMETER egrave usato dopo la dichiarazione di tipoCiascun identificatore egrave seguito da = e dal valore di quellrsquoidentificatore

INTEGER PARAMETER MASSIMO = 10REAL PARAMETER PI = 31415926 E = -29LOGICAL PARAMETER VERO = true FALSO = falseCHARACTER(LEN=2) PARAMETER NO = ldquonordquo Len = 2CHARACTER(LEN=) PARAMETER ampDomanda = ldquoCosa vuoirdquo Len = 10

1048708Le stringhe hanno lunghezza fissa

1048708

Se una stringa egrave piugrave lunga della (LEN=hellip) di PARAMETER egrave troncata a destra

Se una stringa egrave piugrave corta spazi sono aggiunti a destra

CHARACTER(LEN=4) PARAMETER ABC = ldquoabcdefrdquoCHARACTER(LEN=4) PARAMETER XYZ = ldquoxyrdquo

ABC = XYZ = a b c d x y

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 16: ENIAC Electronic Numerical Integrator And Computer.

Costanti in Fortran

PARAMETER associa ad un identificatore un valore che non puograve piugrave essere modificato definisce una costante con nomeLrsquoattributo PARAMETER egrave usato dopo la dichiarazione di tipoCiascun identificatore egrave seguito da = e dal valore di quellrsquoidentificatore

INTEGER PARAMETER MASSIMO = 10REAL PARAMETER PI = 31415926 E = -29LOGICAL PARAMETER VERO = true FALSO = falseCHARACTER(LEN=2) PARAMETER NO = ldquonordquo Len = 2CHARACTER(LEN=) PARAMETER ampDomanda = ldquoCosa vuoirdquo Len = 10

1048708Le stringhe hanno lunghezza fissa

1048708

Se una stringa egrave piugrave lunga della (LEN=hellip) di PARAMETER egrave troncata a destra

Se una stringa egrave piugrave corta spazi sono aggiunti a destra

CHARACTER(LEN=4) PARAMETER ABC = ldquoabcdefrdquoCHARACTER(LEN=4) PARAMETER XYZ = ldquoxyrdquo

ABC = XYZ = a b c d x y

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 17: ENIAC Electronic Numerical Integrator And Computer.

1048708Le stringhe hanno lunghezza fissa

1048708

Se una stringa egrave piugrave lunga della (LEN=hellip) di PARAMETER egrave troncata a destra

Se una stringa egrave piugrave corta spazi sono aggiunti a destra

CHARACTER(LEN=4) PARAMETER ABC = ldquoabcdefrdquoCHARACTER(LEN=4) PARAMETER XYZ = ldquoxyrdquo

ABC = XYZ = a b c d x y

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 18: ENIAC Electronic Numerical Integrator And Computer.

SEZIONE

ESECUTIVA

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 19: ENIAC Electronic Numerical Integrator And Computer.

Inizializzazione fatta prima dellrsquoesecuzione del programma

Assegnazione fatta quando il programma esegue unrsquoistruzione di assegnazione

Input fatta con unrsquoistruzione READ

INIZIALIZZAZIONE DI UNA VARIABILE

INTEGER PARAMETER Quanti = 10INTEGER Case sassihellipcase = 5hellipREAD () sassi

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 20: ENIAC Electronic Numerical Integrator And Computer.

Struttura dellrsquoistruzione di assegnazione

variabile = espressione

Effetto dellrsquoistruzione di assegnazione

1 valuta espressione2 assegna a variabile il valore ottenuto

modifica variabilenon modifica espressione

A = 0A = A + 1A = B

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 21: ENIAC Electronic Numerical Integrator And Computer.

Espressioni

Per costruire unrsquoespressione possiamo usare

Operatori aritmetici

Operatori relazionali

Operatori logici

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 22: ENIAC Electronic Numerical Integrator And Computer.

Operatori aritmetici+ addizione- sottrazione moltiplicazione divisione elevamento a potenza

NB esistono predefinite regole di precedenza tra glioperatori numerici Precedenza piugrave alta o + o - Precedenza piugrave bassa

Operatori relazionaligt lt gt= lt= == +

Operatori logiciAND OR NOT

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 23: ENIAC Electronic Numerical Integrator And Computer.

In espressioni miste (cioegrave che contengono sia reali sia interi) viene effettuata automaticamente la conversione da intero a reale

REAL AA=63 rarr 63 = 18A=5-52 rarr 5-2 = 3A=5-52 rarr 5-25 = 25A=2 A=2

Conversione di tipo implicita

Conversione di tipo esplicita

REAL(A) reale corrispondente ad AINT(A) intero corrispondente ad A (troncamento)NINT(A) intero corrispondente ad A (arrotondamento)

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 24: ENIAC Electronic Numerical Integrator And Computer.

IF THEN ELSE[nome] IF (espressione logica 1) THEN sequenza di istruzioni 1ELSE IF (espressione logica 2) THEN [nome] sequenza di istruzioni 2ELSE [nome] sequenza di istruzioni 3END IF [nome]

IF ldquologicordquoIF (espressione logica) istruzione

Istruzioni condizionali di diramazione

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 25: ENIAC Electronic Numerical Integrator And Computer.

SELECT CASE (espressione di CASE)CASE (selettore 1) sequenza di istruzioni 1CASE (selettore 2) sequenza di istruzioni 2CASE DEFAULT sequenza di istruzioni 3END SELECT

espressione di CASE deve essere di tipo INTEGER o CHARACTER o

LOGICAL END SELECT egrave obbligatorio CASE DEFAULT non egrave obbligatorio

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 26: ENIAC Electronic Numerical Integrator And Computer.

DO indice = iniziofine [incremento] sequenza di istruzioniEND DO

indice egrave una variabile di tipo INTEGER

inizio fine e incremento sono espressioni di tipo INTEGER

incremento egrave OPZIONALE se assente implicitamente vale 1

NESSUNA variabile che occorre in inizio fine e incremento puograveessere cambiata in sequenza di istruzioni

Iterazione definita

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 27: ENIAC Electronic Numerical Integrator And Computer.

DO sequenza di istruzioni 1IF espressione logica EXIT sequenza di istruzioni 2END DO

Iterazione indefinita

sequenza di istruzioni 1 oppure sequenza di istruzioni 2 puograve essere vuota (non entrambe)

EXIT interrompe lrsquoesecuzione del ciclo DO

CYCLE lrsquoesecuzione del ciclo DO riprende dalla prima istruzione del ciclo

DO sequenza di istruzioni 1IF espressione logica CYCLE sequenza di istruzioni 2END DO

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 28: ENIAC Electronic Numerical Integrator And Computer.

Lettura da tastiera

READ() listaInput

Primo argomento dispositivo da cui leggere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaInput egrave un elenco di variabili separate da virgoleI valori digitati devono essere dello stesso tipo delle variabili (e anche nello stesso ordine)

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 29: ENIAC Electronic Numerical Integrator And Computer.

Scrittura su schermo

WRITE() listaOutput

Primo argomento dispositivo su cui scrivere le informazioni (se asterisco egrave il dispositivo standard)

Secondo argomento informazioni di formattazione (se asterisco formattazione standard)

listaOutput egrave un elenco di variabili costanti funzioni edespressioni separate da virgole

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 30: ENIAC Electronic Numerical Integrator And Computer.

Ciclo DO implicito

WRITE () (val1val2 i = iniziofine[passo])

READ () (valore(i) i = iniziofine[passo])

WRITE () (valore(i) i = iniziofine[passo])

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 31: ENIAC Electronic Numerical Integrator And Computer.

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

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 32: ENIAC Electronic Numerical Integrator And Computer.

tipo DIMENSION( [estremo inferiore] estremo superiore) nome array

tipo puograve essere qualsiasi (INTEGER REAL LOGICALCHARACTER())

estremo inferiore egrave OPZIONALE implicitamente vale 1

il numero di elementi dellrsquoarray egrave 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

Poicheacute un elemento di array egrave una variabile puograve essere usato ogni volta che egrave lecito usare una variabile

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 33: ENIAC Electronic Numerical Integrator And Computer.

INTEGER DIMENSION(5) a

a(1) a(2) a(3) a(4) a(5)

INTEGER DIMENSION(minus13) b

b(-1) b(0) b(1) b(2) b(3)

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 34: ENIAC Electronic Numerical Integrator And Computer.

Le operazioni aritmetiche possono essere applicate agli arraypurcheacute abbiano la stessa forma

INTEGER DIMENSION(5) risultatoINTEGER DIMENSION(minus13) vettore_1INTEGER DIMENSION(1216) vettore_2risultato = vettore_1 + vettore_2risultato = vettore_1 - vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2risultato = vettore_1 vettore_2

Le operazioni vengono effettuate elemento per elementoPer fare il prodotto scalare occorre usare la funzione implicita DOT PRODUCT(vettore_1 vettore_2)Ersquo sempre possibile effettuare operazioni tra array e scalari

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 35: ENIAC Electronic Numerical Integrator And Computer.

MAXVAL(A D) restituisce un array che contiene i valori massimi di A lungo la dimensione D (se la D egrave 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 egrave 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

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 36: ENIAC Electronic Numerical Integrator And Computer.

Assegnazione di memoria per gli ARRAY

REAL DIMENSION() ALLOCATABLE AhelliphellipALLOCATE(A(N N) STAT = AllocateStatus) IF (AllocateStatus = 0) then WRITE () non abbastanza memoria STOPENDIF helliphellipDEALLOCATE (A Stat = DeAllocateStatus)

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 37: ENIAC Electronic Numerical Integrator And Computer.

SEZIONEdi

SOTTOPROGRAMMI

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 38: ENIAC Electronic Numerical Integrator And Computer.

2 tipi di unitagrave di programma

SUBROUTINE

FUNCTION

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 39: ENIAC Electronic Numerical Integrator And Computer.

SUBROUTINE

SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva [RETURN]END SUBROUTINE nome subroutine

Per invocare una subroutine egrave necessario utilizzare lrsquoistruzione CALL

CALL nome subroutine(lista argomenti)

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 40: ENIAC Electronic Numerical Integrator And Computer.

Esistono tre modalitagrave (INTENT) distinte per ogni parametropassato

INTENT(IN)INTENT(OUT)INTENT(IN OUT)

La modalitagrave va decisa a seconda del verso della comunicazionefra unitagrave chiamante e unitagrave chiamata utilizzando opportunamente lrsquoattributo INTENT

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 41: ENIAC Electronic Numerical Integrator And Computer.

PROGRAM chiama REAL abc a=3 b=5 CALL prod (abc) WRITE () cEND PROGRAM chiama

SUBROUTINE prod (m1m2p) REALINTENT(IN) m1m2 REALINTENT(OUT) p P=m1m2END SUBROUTINE prod

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 42: ENIAC Electronic Numerical Integrator And Computer.

Generazione di numeri casuali con distribuzione uniforme 0-1

REAL casualeCALL RANDOM_SEED CALL RANDOM_NUMBER(casuale)

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 43: ENIAC Electronic Numerical Integrator And Computer.

FUNZIONI

Funzione (ad un solo valore) legge che associa ad ogni gruppo divalori in ingresso un solo valore

Due meccanismi per utilizzare funzioni matematiche Funzioni intrinseche Funzioni esterne

Le funzioni possono essere utilizzate nelle espressioni anche allrsquointerno di altre funzioni nelle espressioni le funzioni possono essere considerate equivalenti ad una costante o una variabile

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 44: ENIAC Electronic Numerical Integrator And Computer.

FUNCTION

FUNCTION nomefunction ( lista argomenti ) sezione dichiarativa TIPO nomefunction sezione esecutiva nomefunction = espressione [RETURN]END FUNCTION [nome function]

Le funzioni definite dallrsquoutente possono essere utilizzate comequalsiasi funzione implicitaNon possono essere utilizzate nella parte sinistra di una istruzionedi assegnazione

Forma equivalenteTIPO FUNCTION nome function( lista argomenti )

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 45: ENIAC Electronic Numerical Integrator And Computer.

Funzione Tipo argomento Tipo di ritorno

ABS(x) realeintero

realeintero

SQRT(x) reale reale

SIN(x) reale reale

COS(x) reale reale

TAN(x) reale reale

ASIN(x) reale reale

ACOS(x) reale reale

ATAN(x) reale reale

EXP(x) reale reale

LOG(x) reale reale

LOG10(x) reale reale

MOD(AB) intero intero

FUNZIONI INTRINSECHE

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
Page 46: ENIAC Electronic Numerical Integrator And Computer.

Differenze delle FUNCTION rispetto alle SUBROUTINE

Restituiscono un valore Il tipo di tale valore va dichiarato opportunamente Vengono chiamate allrsquointerno di espressioni Nellrsquoinvocazione non va usata la parola chiave CALL

I parametri in ingresso non dovrebbero mai essere modificati

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46