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.

340 Array Processing<br />

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

PRINT*, "Dimensione dell’array:"<br />

READ(*,*) n<br />

ALLOCATE(array(n))<br />

DO i=1,n<br />

CALL RANDOM_NUMBER(r)<br />

array(i) = INT(r*100.)<br />

END DO<br />

PRINT ’(20I3)’, array(1:20)<br />

time = second()<br />

CALL sub_merge_sort(array)<br />

PRINT*, "Ordinamento crescente"<br />

PRINT ’("(Tempo impiegato = ",F10.3," secondi )")’, second()-time<br />

PRINT ’(20I3)’, array(1:20)<br />

time = second()<br />

CALL sub_merge_sort(array, .FALSE.)<br />

PRINT*, "Ordinamento decrescente"<br />

PRINT ’("(Tempo impiegato = ",F10.3," secondi )")’, second()-time<br />

PRINT ’(20I3)’, array(1:20)<br />

CONTAINS<br />

REAL FUNCTION second()<br />

IMPLICIT NONE<br />

INTEGER :: i, timer_count_rate, timer_count_max<br />

CALL SYSTEM_CLOCK( i, timer_count_rate, timer_count_max )<br />

second = REAL(i)/timer_count_rate<br />

END FUNCTION second<br />

END PROGRAM merge_sort<br />

6.6.3 Procedure di costruzione<br />

MERGE(TSOURCE,FSOURCE,MASK)<br />

Seleziona tra due valori, o tra gli elementi corrispondenti di due array, in accordo con la<br />

condizione specificata da una maschera.<br />

TSOURCE può essere uno scalare o un array di tipo qualsiasi.<br />

FSOURCE è uno scalare o un array avente stesso tipo e parametri di kind di TSOURCE.<br />

MASK è un array logico.<br />

<strong>Il</strong> risultato (che ha lo stesso tipo diTSOURCE) viene determinato prendendo, elemento×elemento,<br />

il valore corrispondente di TSOURCE (se MASK è .TRUE.) o di FSOURCE (se MASK è .FALSE.).<br />

Ad esempio, se la variabile intera r ha valore -3, allora il risultato di<br />

MERGE(1.0,0.0,r

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

Saved successfully!

Ooh no, something went wrong!