25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

7.9 Funzioni Puntatore 383<br />

PROGRAM zip<br />

IMPLICIT NONE<br />

INTEGER, DIMENSION(10) :: x=(/1, 0, 4, 2, 0, 3, 0, 4, 3, 0/)<br />

WRITE(*,*) x<br />

WRITE(*,*) compact(x)<br />

CONTAINS<br />

FUNCTION compact(x)<br />

! Procedura per rimuovere gli zeri dal vettore x<br />

IMPLICIT NONE<br />

INTEGER, POINTER :: compact(:)<br />

INTEGER x(:)<br />

INTEGER :: n<br />

n = COUNT(x/=0) ! Conta i valori di x diversi da zero<br />

ALLOCATE(compact(n)) ! Alloca un vettore di n elementi<br />

WHERE(x/=0) compact = x ! Copia i valori di x diversi da zero<br />

! nel vettore compact<br />

END FUNCTION compact<br />

END PROGRAM zip<br />

Di seguito si riporta un ulteriore esempio, questa volta di funzione esterna puntatore:<br />

PROGRAM main<br />

IMPLICIT NONE<br />

REAL :: x<br />

INTEGER, TARGET :: a, b<br />

INTEGER, POINTER :: largest<br />

INTERFACE<br />

FUNCTION ptr(a,b)<br />

IMPLICIT NONE<br />

INTEGER, TARGET, INTENT(IN) :: a, b<br />

INTEGER, POINTER :: ptr<br />

END FUNCTION ptr<br />

END INTERFACE<br />

CALL RANDOM_NUMBER(x)<br />

a = 1.0E+04*x<br />

CALL RANDOM_NUMBER(x)<br />

b = 1.0E+04*x<br />

largest => ptr(a,b)<br />

PRINT*, "L’ elemento massimo fra ",a, " e ",b," e’: ", largest<br />

END PROGRAM main<br />

FUNCTION ptr(a,b)<br />

IMPLICIT NONE<br />

INTEGER, TARGET, INTENT(IN) :: a, b

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

Saved successfully!

Ooh no, something went wrong!