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.

118 Istruzioni di controllo<br />

DO i=1,n<br />

x(i) = x(i)*myfunc(n)<br />

END DO<br />

In questo caso il compilatore potrebbe non essere in grado di stabilire se il risultato della<br />

funzione myfunc dipenda o meno da i o da x. In casi come questo deve essere responsabilità<br />

del programmatore sapere se il risultato del fattore è invariante o meno e, in caso affermativo,<br />

spostarne il calcolo all’esterno del ciclo.<br />

Un’altra caratteristica che rende spesso poco efficiente un ciclo è il fatto che, al suo interno,<br />

un grande sforzo di calcolo è dedicato a compiti banali, compiti che spesso possono essere<br />

rimossi semplicemente cambiando l’utilizzo di alcune variabili. Ad esempio, per rimuovere<br />

l’assegnazione i = j, basta trattare, nella successiva parte di codice, la variabile j come se<br />

fosse niente di più che un alias di i. Un esempio, concepito per la valutazione dei numeri di<br />

Fibonacci, aiuterà a meglio comprendere questo concetto. I numeri di Fibonacci, si ricorda,<br />

sono definiti, in forma ricorsiva, al modo seguente:<br />

<br />

1, se n = 1 o se n = 2<br />

fib(n) =<br />

fib(n − 1) + fib(n − 2), se n > 2<br />

Un semplice programma per il loro calcolo potrebbe essere:<br />

PROGRAM fibonacci<br />

IMPLICIT NONE<br />

INTEGER :: n ! valore di input<br />

INTEGER :: fib ! numero di Fibonacci<br />

INTEGER :: a, b ! variabili di appoggio<br />

PRINT*, " Inserisci n > 2: "<br />

READ(*,*) n<br />

a = 1<br />

b = 1<br />

DO i = 3,n<br />

c = a+b<br />

a = b<br />

b = c<br />

END DO<br />

fib = c<br />

PRINT*, fib<br />

END PROGRAM fibonacci<br />

Come si può notare, per ogni ”spazzata” del ciclo vengono effettuate tre assegnazioni, di cui<br />

due ”banali”; ebbene, queste ultime possono essere facilmente rimosse e rimpiazzate da un’unica<br />

istruzione di assegnazione, al modo seguente:<br />

PROGRAM fibonacci<br />

IMPLICIT NONE

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

Saved successfully!

Ooh no, something went wrong!