eniac electronic numerical integrator and computer
Post on 01-May-2015
235 Views
Preview:
TRANSCRIPT
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
top related