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.

3.13 Costrutto e istruzione WHERE 167<br />

<strong>Il</strong> <strong>Fortran</strong> <strong>95</strong> ha esteso il costrutto WHERE dando la possibilità di lavorare anche con più<br />

clausole ELSEWHERE e di assegnare un nome al costrutto. La forma generale di un costrutto<br />

WHERE, secondo lo standard del <strong>Fortran</strong> <strong>95</strong>, è pertanto:<br />

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

istruzioni di assegnazione di array ! primo blocco<br />

ELSEWHERE (espressione_schema_2)[nome]<br />

istruzioni_di_assegnazione_di_array ! secondo blocco<br />

ELSEWHERE [nome]<br />

istruzioni_di_assegnazione_di_array ! terzo blocco<br />

...<br />

END WHERE [nome]<br />

Un costrutto WHERE può avere, così, tutte le clausole ELSEWHERE con maschera che si desiderano<br />

ma ad ogni elemento di array saranno applicate le operazioni di uno ed un solo<br />

blocco. Questo costrutto applica le operazioni del primo blocco a tutti gli elementi dell’array<br />

per i quali espressione_schema_1 risulti .TRUE. e espressione_schema_2 risulti<br />

.FALSE., applica le operazioni del secondo blocco a tutti gli elementi dell’array per i quali<br />

espressione_schema_1 risulti .FALSE. e espressione_schema_2 risulti .TRUE., e applica,<br />

infine, le operazioni delterzo blocco a tutti gli elementi dell’array per i quali risultino.FALSE.<br />

contemporaneamente espressione_schema_1 ed espressione_schema_2. Inoltre, il <strong>Fortran</strong><br />

<strong>95</strong> ha anche introdotto la possibilità di lavorare con costrutti WHERE innestati, possibilità questa<br />

non prevista dal <strong>Fortran</strong> <strong>90</strong> standard, potendo così dare vita a costrutti del tipo:<br />

assign1: WHERE(cnd1)<br />

... ! maschera: cnd1<br />

ELSEWHERE(cnd2)<br />

... ! maschera: cnd2.AND.(.NOT.cnd1)<br />

assign2: WHERE(cnd4)<br />

... ! maschera: cnd2.AND.(.NOT.cnd1).AND.cnd4<br />

ELSEWHERE<br />

... ! maschera: cnd2.AND.(.NOT.cnd1).AND.(.NOT.cnd4)<br />

END WHERE assign2<br />

...<br />

ELSEWHERE(cnd3) assign1<br />

... ! maschera: cnd3.AND.(.NOT.cnd1).AND.(.NOT.cnd2)<br />

ELSEWHERE assign1<br />

... ! maschera: .NOT.cnd1.AND.(.NOT.cnd2).AND.(.NOT.cnd3)<br />

END WHERE assgn1<br />

Oltre che il costrutto WHERE, il <strong>Fortran</strong> <strong>90</strong>/<strong>95</strong> mette a disposizione anche l’istruzione WHERE che<br />

permette di controllare casi meno complessi. Anche l’istruzione WHERE può essere usata per<br />

eseguire una istruzione di assegnazione ”controllata”, ossia un’istruzione che venga applicata<br />

soltanto se una condizione logica risulti vera. L’istruzione WHERE è, pertanto, un altro modo

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

Saved successfully!

Ooh no, something went wrong!