Cicli in Fortran - PowerPoint PPT Presentation

About This Presentation
Title:

Cicli in Fortran

Description:

Title: PowerPoint Presentation Last modified by: stefano Created Date: 1/1/1601 12:00:00 AM Document presentation format: Presentazione su schermo – PowerPoint PPT presentation

Number of Views:70
Avg rating:3.0/5.0
Slides: 32
Provided by: disUniro84
Category:
Tags: cicli | fortran | lucid

less

Transcript and Presenter's Notes

Title: Cicli in Fortran


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 indiceinizio,fine,incremento
istruzione 1 istruzione 2
blocco
END DO
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
indiceinizio se indiceincremento lt
fineincremento il programma esegue le
istruzioni allinterno del ciclo
4
Ciclo Iterativo
3) eseguite le istruzioni allinterno del ciclo
il programma pone indiceindiceincrement
o se indiceincremento lt fineincremento
vengono eseguite nuovamente le istruzioni del
ciclo
4) si ripete il punto 3) finchè
indiceincremento lt fineincremento quando
questa condizione non è più vera viene
eseguita la prima istruzione dopo il ciclo
5) Si eseguono n.iter. (fine-inizioincrem
ento)/incremento
5
Ciclo Iterativo (esempi)
DO i1,10,2
istruzione
5 iterazioni
END DO
DO i3,-3,-2
istruzione
4 iterazioni
END DO
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 i1,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 i1,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
blocco
END DO
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
blocco
END DO
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
Ciclo while
PROBLEM esempio DOUBLE PRECISION
var,eps eps1.D0 DO var1.D0eps IF (
var.EQ.1.D0) EXIT epseps/2.d0 END
DO WRITE(,) eps , eps END PROGRAM esempio
13
Cicli DO con nome
nome
DO indice inizio, fine, incremento
... ... IF (espressione logica)
CYCLE
nome
nome
END DO
14
Cicli DO con nome
nome
DO
... IF (espressione logica) CYCLE
nome
... IF (espressione logica) EXIT
nome
nome
END DO
15
SUBROUTINE
SUBROUTINE nome_subr ( lista_argomenti )
sezione dichiarativa
sezione esecutiva
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 n2 DOUBLE PRECISION
f,x(n)
CALL funct( n,x,f )
END PROGRAM main
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 dichiarativa
sezione esecutiva nome_functespressione
RETURN
END FUNCTION nome_funct
22
FUNCTION
PROGRAM nome_prog
varnome_funct( lista_argomenti )
END PROGRAM nome_prog
23
Calcolo del gradiente approssimato
24
Calcolo del gradiente approssimato
25
Calcolo del gradiente approssimato
per valori di sufficientemente piccoli
Forward formula
Backward formula
Symmetric formula
26
subroutine gradapp(n,x,f) .......................
.......... call funct(n,x,f) do
i1,n zx 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,
u10 double precision dnum,x call
RANDOM_NUMBER(num) dnumdble(num)
xldnum(u-l) stop end program num_cas
29
Sequenza pesudo-casuale
circa 1018 numeri
circa 1018 numeri


s



s


s
seed della sequenza
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
(No Transcript)
Write a Comment
User Comments (0)
About PowerShow.com