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.

158 Array<br />

cicli in quanto non sempre si può fare completo affidamento sulle scelte operate dal compilatore<br />

per cui una buona conoscenza delle problematiche in esame deve essere sempre alla base, da un<br />

lato, dello sviluppo del codice sorgente, dall’altro della scelta (sempre ponderata) delle direttive<br />

di compilazione da impiegare.<br />

3.9 Array e istruzioni di controllo<br />

Esistono molti casi in cui l’uso degli array può aiutare a rendere il codice molto più semplice ed<br />

efficiente. Già si è visto, a proposito delle operazioni globali, come in taluni casi sia possibile<br />

semplificare se non addirittura fare a meno dei cicli a conteggio grazie ad un uso maturo degli<br />

array; spesso è possibile trarre giovamento dall’uso di array ”di appoggio” anche per snellire e<br />

rendere più efficienti altri tipi di costrutti, come quelli condizionali. Si supponga, ad esempio, di<br />

dover assegnare alla variabile stato un valore che dipende, a sua volta, dal valore assunto dalla<br />

variabile intera x. Si supponga, inoltre, che x possa assumere tutti i valori compresi in un certo<br />

intervallo (a tal riguardo, le variabili x e stato potrebbero essere riguardate, rispettivamente,<br />

come il dominio ed il codominio di una funzione di argomento intero). Tanto per fissare le idee<br />

si può fare riferimento al seguente ramo di programma:<br />

INTEGER :: x, stato<br />

...<br />

IF (x == -1) THEN<br />

stato = 1<br />

ELSE IF (x == +1)<br />

stato = 5<br />

ELSE IF (x == 0) then<br />

stato = 0<br />

ELSE<br />

PRINT*, " Valore di x non significativo! "<br />

END IF<br />

<strong>Il</strong> precedente frammento di programma assegna alla variabile stato un diverso valore a seconda<br />

che la variabile intera x valga, rispettivamente, -1, +1 o 0; se, invece, il valore assoluto di x<br />

risulta maggiore di1viene segnalata una condizione di errore. In casi come questi si può ridurre<br />

notevolmente il numero di condizioni da analizzare (e, con esse, il numero di clausole ELSE IF<br />

da introdurre) inserendo i possibili valori di x in un array ed utilizzando questo array alla destra<br />

dell’unica istruzione di assegnazione:<br />

INTEGER x, i, stato<br />

INTEGER, DIMENSION(-1:1) :: lookup = (/1,0,5/)<br />

IF ((ABS(x)

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

Saved successfully!

Ooh no, something went wrong!