lunedì 20 dicembre 2010

Programmazione..quale incubo! Serie di Fibonacci.

Eccoci di nuovo qui!
Come promesso, a questo punto possiamo affrontare un programma che ci calcoli la serie di Fibonacci:
0,1,1,2,3,5,8,13,21,34,55..

Primo passo: iniziate a ragionare con carta e penna alla mano.
Vogliamo generare dei numeri, a partire dallo zero, tali per cui ognuno sia la somma dei precedenti 2.
Perciò, se poniamo a=0 e b=1 avremo c=0+1=1. Ed ecco i primi 3 numeri.
Per passare ai successivi?
Porremo a=b=1 e b=c=1 e quindi la nuova c sarà 2. E così via.

Bene. Ora che abbiamo in mente la relazione fondamentale cominciamo a costruire il programma.
Un consiglio che posso darvi è quello di dichiarare le variabili mano mano che le aggiungete, nè prima (non saprete mai all'inizio del programma di quante e di che tipo avrete bisogno) né dopo (ve lo dimenticherete).
Il corpo del programma naturalmente sarà:

program fibonacci
implicit none

end progam

Perfetto! Aggiungiamoci la relazione che abbiamo scritto sul foglio, dichiarando le variabili: dato che stiamo parlando di interi saranno intere.

program fibonacci
implicit none
integer::a,b,c
a=0
b=1
c=a+b
a=b
b=c
end program


Ok. Cosa fa così il programma?Vediamo. Parte da a=0 e b=1, ne fa la somma una volta uguagliandola a c e poi pone a=b e b=c.
Corretto ma lo fa una volta soltanto. Noi vogliamo almeno 10 numeri della serie, cioè vogliamo fargli fare questa operazione 10 volte.
Come glielo diciamo? Con un ciclo:

do i=1,10,1
end do

Gli stiamo dicendo: fai l'operazione seguente da per 10 volte a partire da 1 e fallo a passi di 1 (l'ultimo numero). Quindi, ricordandoci di avere inserito la variabile i e quindi di dichiararla come un intero:

program fibonacci
implicit none
integer::a,b,c,i
a=0
b=1
do i=1,10,1
c=a+b
a=b
b=c
end do
end program


Perché lì? Perché se l'avessimo messo prima di a=0 e b=1, all'inizio di ogni ciclo avremmo avuto sempre a=0 e b=1 e perciò c sarebbe sempre stato 1.
In questo modo invece 0 e 1 sono i primi due numeri della serie, poi calcola i successivi.
Benissimo. Se volessimo decidere di volta in volta quanti numeri vogliamo calcolare?
Semplice. Gli diamo noi un numero 'n' all'inizio del programma. Come? Vi ricordate l'istruzione write/read?

program fibonacci
implicit none
integer::a,b,c,i
write(*,*) "quanti numeri vuoi calcolare?"
read(*,*), n
a=0
b=1
do i=1,10,1
c=a+b
a=b
b=c
end do
end program


Ora, al posto del 10 all'interno del ciclo ci andrà 'n' che andrà anche dichiarata.


program fibonacci
implicit none
integer::a,b,c,i,n
write(*,*) "quanti numeri vuoi calcolare?"
read(*,*), n
a=0
b=1
do i=1,n,1
c=a+b
a=b
b=c
end do
end program


Ultimo passaggio: volgio che il computer mi scriva i numeri.
Cosa uso? L'istruzione write.

program fibonacci
implicit none
integer::a,b,c,i,n
write(*,*) "quanti numeri vuoi calcolare?"
read(*,*), n
a=0
b=1
write(*,*),a
write(*,*),b
do i=1,n,1
c=a+b
a=b
b=c
write(*,*),c
end do
end program


I primi 2 write sono fuori dal ciclo perché voglio che mi stampi anche i primi due numeri che uso perché sono i primi due numeri della serie.
L'altro write è nel ciclo perché voglio che lui mi scriva tutti gli n numeri.

Ecco qui. Ce l'abbiamo fatta!

E la prossima volta, vedremo come generare n numeri primi, introducendo un'altra istruzione.

Nessun commento:

Posta un commento