25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

258 Unità di Programma<br />

CALL do_math(num1,num2,reciproc,add_nums,reciproc_ans)<br />

! Ora la variabile reciproc_ans contiene la somma dei<br />

! reciproci di num1 e di num2<br />

CALL do_math(num1,num2,SIN,add_nums,sin_ans)<br />

! Ora la variabile reciproc_ans contiene la somma dei<br />

! "seni" di num1 e di num2<br />

PRINT*, reciproc_ans, sin_ans<br />

END PROGRAM proc_pass<br />

5.9 Funzioni array<br />

Una function può fornire non soltanto un valore scalare ma anche un puntatore, un array o<br />

una variabile di un tipo derivato. Per le funzioni che restituiscono un array le dimensioni<br />

del risultato possono essere determinate allo stesso modo con cui viene dichiarato un array<br />

automatico, come si avrà modo di capire nel prossimo capitolo.<br />

La seguenti funzioni rappresentano semplici esempio di array valued function:<br />

FUNCTION prod(a,b)<br />

IMPLICIT NONE<br />

REAL, DIMENSION(:), INTENT(IN) :: a, b<br />

REAL DIMENSION(SIZE(a)) :: prod<br />

prod = a * b<br />

END FUNCTION prod<br />

FUNCTION Partial_sum(p)<br />

IMPLICIT NONE<br />

REAL :: p(:) ! Assumed-shape dummy array<br />

REAL :: Partial_sum(size(p)) !<br />

INTEGER :: k<br />

Partial_sum = (/(sum(p(1:k),k=1,size(p))/)<br />

! Si sarebbe potuto ottenere lo stesso risultato<br />

! anche con il seguente ciclo for:<br />

! DO k=1,size(P)<br />

! Partial_sum(k) = sum(P(1:k))<br />

! END DO<br />

! tuttavia il DO-loop specifica un insieme di operazioni<br />

! sequenziali invece di operazioni parallele<br />

RETURN<br />

END FUNCTION Partial_sum<br />

<strong>Il</strong> seguente programma mostra, in più, anche un esempio di programma principale che utilizza<br />

di funzione array:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!