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.

166 Array<br />

in cui espressione_schema è un array logico avente la stessa forma dell’array da manipolare<br />

nelle istruzioni di assegnazione incluse nel costrutto WHERE. Questo costrutto applica le operazioni<br />

del primo blocco a tutti gli elementi dell’array per i quali espressione_schema risulti<br />

.TRUE., altrimenti applica le operazioni del secondo blocco.<br />

E’ possibile assegnare un nome al costrutto WHERE, in tal caso anche la corrispondente<br />

istruzione END WHERE deve avere lo stesso nome, mentre questo è facoltativo nella clausola<br />

ELSEWHERE.<br />

La clausola ELSEWHERE è, in realtà, opzionale; in sua assenza il costrutto WHERE assume la<br />

forma particolarmente semplice:<br />

[nome:] WHERE (espressione_schema)<br />

istruzioni_di_assegnazione_di_array<br />

END WHERE [nome]<br />

<strong>Il</strong> precedente esempio può, pertanto, essere implementato in maniera estremamente elegante<br />

ed efficiente mediante il seguente costrutto WHERE:<br />

WHERE (matrice>0.)<br />

log_matrice = LOG(matrice)<br />

ELSEWHERE<br />

log_matrice = valore_fittizio<br />

END WHERE<br />

Una particolare forma di costrutto WHERE è quello cosiddetto con maschera, in cui l’espressione_schema<br />

è rappresentata da un array di tipo logico. Un valido esempio è il seguente:<br />

PROGRAM prova<br />

! Demo WHERE con maschera<br />

IMPLICIT NONE<br />

LOGICAL, DIMENSION(5) :: mask=(/.TRUE.,.FALSE.,.TRUE.,.TRUE.,.FALSE./)<br />

REAL, DIMENSION(5) :: x=0.0<br />

! start<br />

WHERE(mask)<br />

x = 1.0<br />

ELSEWHERE<br />

x = 2.0<br />

END WHERE<br />

WRITE(*,*) x<br />

STOP<br />

END PROGRAM prova<br />

il cui output è:<br />

1.000000 2.000000 1.000000 1.000000 2.000000

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

Saved successfully!

Ooh no, something went wrong!