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.

338 Array Processing<br />

dove il risultato dell’ultima istruzione dipende dal fatto che l’argomento diUBOUND è una sezione<br />

di array per cui il risultato è dato dal numero di elementi in ciascuna dimensione.<br />

<strong>Il</strong> programma che segue, utile per ”fondere” insieme due array monodimensionali e ordinarne<br />

gli elementi sia in senso crescente che in senso decrescente, mostra un possibile impiego delle<br />

procedure intrinseche UBOUND e LBOUND (si noti che la funzione merge invocata nel programma<br />

è user-defined e non rappresenta, invece, l’omonima funzione intrinseca che si avrà modo di<br />

incontrare nel prossimo paragrafo):<br />

MODULE sort<br />

CONTAINS<br />

RECURSIVE SUBROUTINE sub_merge_sort(a,ascend)<br />

! *** Sezione dichiarativa ***<br />

IMPLICIT NONE<br />

! Parametri formali<br />

INTEGER, DIMENSION(:), INTENT(INOUT) :: a<br />

LOGICAL, INTENT(IN), OPTIONAL :: ascend<br />

! Variabili locali<br />

LOGICAL :: up<br />

INTEGER :: low, high, mid<br />

! *** Sezione esecutiva ***<br />

! Se il parametro "ascend" non viene specificato, allora il criterio<br />

! di ordinamento adottato per default e’ quello nel verso "crescente"<br />

IF (PRESENT(ascend)) THEN<br />

up = ascend<br />

ELSE<br />

up = .TRUE.<br />

ENDIF<br />

low = LBOUND(a,1)<br />

high= UBOUND(a,1)<br />

IF (low

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

Saved successfully!

Ooh no, something went wrong!