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.

94 Istruzioni di controllo<br />

d = b**2-4.*a*c<br />

IF (d > 0.) THEN<br />

PRINT*, "Radici reali e distinte"<br />

x1 = (-b-SQRT(d))/(2.*a)<br />

x2 = (-b+SQRT(d))/(2.*a)<br />

ELSE IF (d == 0.) THEN<br />

PRINT*, "Radici reali e coincidenti"<br />

x1 = -b/(2.*a)<br />

x2 = x1<br />

ELSE<br />

PRINT*, "Radici complesse coniugate"<br />

x1 = CMPLX(-b,-SQRT(-d))/(2.*a)<br />

x2 = CONJG(x1)<br />

END IF<br />

WRITE(*,*) x1, x2<br />

STOP<br />

END PROGRAM eq_2<br />

E’ importante osservare che, per motivi di efficienza, sarebbe opportuno che venissero esaminate<br />

(e quindi scritte) per prime le espressioni logiche a più elevata probabilità di risultare<br />

vere, in modo da rendere probabilisticamente minimo il numero di espressioni da calcolare fino<br />

a trovare quella vera. Si noti ancora che non è necessario che le espressioni logiche siano mutuamente<br />

esclusive, ma è solo necessario che per j > i espressione_logica_j possa risultare<br />

vera se espressione_logica_i è falsa (ma potrebbe esserlo anche se espressione_logica_i<br />

risultasse vera). Infine, si consideri che se la valutazione di un’espressione logica è onerosa, essa<br />

può essere conveniente sostituirla con un’altra espressione ”algebricamente” equivalente che sia,<br />

però, di più semplice valutazione. Ad esempio, piuttosto che verificare che risulti √ x > 2, si<br />

può in maniera più efficiente controllare che sia x > 4.<br />

Come visto precedentemente, la forma generale dei costrutti IF e IF THEN ELSE prevede<br />

anche la presenza di un nome opzionale. Assegnare un nome a questi costrutti può tornare<br />

particolarmente utile in presenza di blocchi IF innestati. Si fa presente che due costrutti IF<br />

si dicono innestati o ”annidati” quando uno di essi giace completamente all’interno dell’altro.<br />

In questi casi la presenza di un ”riferimento” ai singoli blocchi può contribuire a rendere un<br />

programma più semplice da gestire e da interpretare, come mostrato dal seguente esempio:<br />

outer: IF (x > 0.0) THEN<br />

...<br />

ELSE outer<br />

inner: IF (y < 0.0) THEN<br />

...<br />

ENDIF inner<br />

ENDIF outer<br />

E’ sempre consigliabile assegnare dei nomi ai costrutti IF quando questi sono annidati in quanto<br />

il nome indica esplicitamente a quale costruttoIF è associata una determinata clausolaELSE IF

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

Saved successfully!

Ooh no, something went wrong!