La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Cicli in Fortran I cicli consentono di eseguire una sequenza di istruzioni più di una volta due tipi: Cicli iterativi Cicli while.

Presentazioni simili


Presentazione sul tema: "Cicli in Fortran I cicli consentono di eseguire una sequenza di istruzioni più di una volta due tipi: Cicli iterativi Cicli while."— Transcript della presentazione:

1 Cicli in Fortran I cicli consentono di eseguire una sequenza di istruzioni più di una volta due tipi: Cicli iterativi Cicli while

2 Ciclo Iterativo DO indice=inizio,fine,incremento istruzione 1 istruzione 2 …………… END DO blocco indice è una variabile intera ed è utilizzatata come contatore del ciclo inizio, fine, incremento sono parametri incremento è facoltativo se è omesso si assume che è uguale a 1

3 Ciclo Iterativo 1) inizio, fine, incremento possono essere costanti, variabili o espressioni; se sono variabili o espressioni devono essere valutate prima del ciclo 2) allinizio del ciclo il programma pone indice=inizio se indice*incremento =< fine*incremento il programma esegue le istruzioni allinterno del ciclo

4 Ciclo Iterativo 3) eseguite le istruzioni allinterno del ciclo il programma pone indice=indice+incremento se indice*incremento =< fine*incremento vengono eseguite nuovamente le istruzioni del ciclo 4) si ripete il punto 3) finchè indice*incremento =< fine*incremento quando questa condizione non è più vera viene eseguita la prima istruzione dopo il ciclo 5) Si eseguono n.iter.= (fine-inizio+incremento)/incremento

5 Ciclo Iterativo (esempi) DO i=1,10,2 istruzione …………… END DO 5 iterazioni DO i=3,-3,-2 istruzione …………… END DO 4 iterazioni

6 Istruzione CYCLE Istruzione CYCLE interrompe lesecuzione delle istruzioni del ciclo e fa ritornare allinizio del ciclo Lindice del ciclo viene incrementato e lesecuzione delle istruzioni del ciclo riprende se lindice non ha raggiunto il suo valore

7 Istruzione CYCLE (esempio) PROBLEM esempio INTEGER :: I DO i=1,10 IF ( i == 3 ) CYCLE WRITE(*,*) i END DO END PROGRAM esempio Si stampano tutti i numeri interi compresi tra 1 e 10 Escluso il numero 3

8 Istruzione EXIT Istruzione EXIT interrompe lesecuzione delle istruzioni del ciclo, fa uscire dal ciclo Viene eseguita la prima istruzione dopo END DO del ciclo

9 Istruzione EXIT (esempio) PROBLEM esempio INTEGER :: I DO i=1,10 IF ( i == 3 ) EXIT WRITE(*,*) i END DO END PROGRAM esempio Si stampa solamente il numero 1

10 Ciclo while DO WHILE (espressione logica) istruzione 1 istruzione 2 …………… END DO blocco quando lespressione logica è.TRUE. il blocco delle istruzioni del ciclo vengono ripetute quando lespressione logica è.FALSE. viene eseguita la prima istruzione dopo END DO

11 Ciclo while DO …………... IF (espressione logica) EXIT …………… END DO blocco quando lespressione logica è.TRUE. il blocco delle istruzioni del ciclo vengono ripetute quando lespressione logica è.FALSE. viene eseguita la prima istruzione dopo END DO

12 PROBLEM esempio DOUBLE PRECISION :: var,eps eps=1.D0 DO var=1.D0+eps IF ( var.EQ.1.D0) EXIT eps=eps/2.d0 END DO WRITE(*,*) eps =, eps END PROGRAM esempio Ciclo while

13 Cicli DO con nome DO indice = inizio, fine, incremento …………... IF (espressione logica) CYCLE …………… END DO [nome]

14 Cicli DO con nome DO …………... IF (espressione logica) CYCLE …………… END DO …………... IF (espressione logica) EXIT …………… [nome]

15 SUBROUTINE SUBROUTINE nome_subr ( lista_argomenti ) sezione esecutiva sezione dichiarativa RETURN END SUBROUTINE nome_subr

16 SUBROUTINE PROGRAM nome_prog CALL nome_subr ( lista_argomenti ) END PROGRAM nome_prog

17 SUBROUTINE 1) ogni subroutine è compilata separatamente dal programma principale e da altre subroutine quindi può usare le stessi nomi delle variabili e le stesse etichette utilizzate dal programma principale o da altre subroutine 2) lordine e il tipo degli argomenti della chiamata devono corrispondere a quelli della definizione

18 SUBROUTINE PROGRAM main INTEGER, PARAMETER :: n=2 DOUBLE PRECISION :: f,x(n) END PROGRAM main CALL funct( n,x,f ) SUBROUTINE funct(n,x,f ) INTEGER :: n DOUBLE PRECISION :: f,x(n)

19 Istruzione INTENT INTENT(IN) largomento è un dato di input INTENT(OUT) largomento è un dato di output INTENT(IN OUT) largomento è sia un dato di input che di output se listruzione INTENT è assente largomento è sia un dato di input che di output

20 Istruzione INTENT SUBROUTINE funct(n,x,f ) INTEGER, INTENT(IN) :: n DOUBLE PRECISION, INTENT(IN) :: x(n) DOUBLE PRECISION, INTENT(OUT) :: f

21 FUNCTION FUNCTION nome_funct ( lista_argomenti ) sezione esecutiva nome_funct=espressione sezione dichiarativa RETURN END FUNCTION nome_funct

22 PROGRAM nome_prog var=nome_funct( lista_argomenti ) END PROGRAM nome_prog FUNCTION

23 Calcolo del gradiente approssimato

24

25 per valori di sufficientemente piccoli Forward formula Backward formula Symmetric formula Calcolo del gradiente approssimato

26 subroutine gradapp(n,x,f)................................. call funct(n,x,f) do i=1,n z=x z(i)=x(i)+eps call funct(n,z,fp) g(i)=(fp-f)/eps end do return end subroutine gradapp

27 Generatore di Numeri Pseudo-casuali RANDOM_NUMBER(x) x è un REAL ritorna un valore estratto da una sequenza di numeri pseudo-casuali il valore restituito nella variabile x è compreso tra 0 (incluso) e 1 (escluso)

28 Gen. di Num. Cas. (esempio di numero in [l,u) ) PROGRAM num_cas implicit none real :: num double precision, parameter :: l=-10, u=10 double precision :: dnum,x call RANDOM_NUMBER(num) dnum=dble(num) x=l+dnum*(u-l) stop end program num_cas

29 Sequenza pesudo-casuale seed della sequenza … s ……s……s circa 10 18 numeri

30 Inizializzazione della sequenza RANDOM_SEED() imposta linnesco della sequenza random s ad un valore ottenuto sulla base del tempo di sistema. se CALL RANDOM_SEED() precede listruzione CALL RANDOM_NUMBER(num) ad ogni esecuzione del programma vengono generati numeri differenti altrimenti vengono generati gli stessi numeri

31


Scaricare ppt "Cicli in Fortran I cicli consentono di eseguire una sequenza di istruzioni più di una volta due tipi: Cicli iterativi Cicli while."

Presentazioni simili


Annunci Google