martedì 30 novembre 2010

Programmazione..quale incubo! (fortran2)

Eccoci di nuovo qui.
Ci siamo lasciati nella soddisfazione di aver fatto fare un'operazione aritmetica al nostro computer.
A questo punto vogliamo spingerci oltre. Nel primo passo ci siamo lasciati chiedendoci: "
E se volessimo decidere di cambiare gli addendi di volta in volta?"
E' arrivato il momento di conoscere il potere che abbiamo di cambiare i numeri da utilizzare ogni volta che facciamo girare il programma.
Dunque,
il programma finale della prima 'lezione' era il seguente:


Program nome programma
implicit none
integer::x
x=7+5
write (*,*) 'il risultato della somma 7+5 è', x
End program

Come con il comando "write" diciamo al computer "scrivimi ciò che ti dico", intuitivamente col comando "read" gli possiamo dire "leggi ciò che scrivo". Dove? Sempre dopo la dichiarazione delle variabili:

Program nome programma
implicit none
integer::x
read (*,*), a,b
x=7+5
write (*,*) 'il risultato della somma 7+5 è', x
end program

Gli abbiamo detto leggi i numeri a e b che scriverò sul monitor (primo *) nel formato binario, cioè nel tuo formato standard (secondo *).
Guardando il programma però dovrebbe sorgervi un dubbio: dove li ho messi i numeri a e b che digito all'interno dell'operazione?
Da nessuna parte: in questo modo voi potete digitare quello che volete ma lui farà sempre 7+5.
Dove dobbiamo inserirli? Naturalmente al posto di 7+5.

Program nome programma
implicit none

integer::x
read (*,*), a,b
integer::x
x=a+b
write (*,*) 'il risultato della somma a+b è', x
end program


Ora sì.
Prima domanda: siete sicuri che quando farete partire il programma e vi apparira un trattino lampeggiante sul monitor voi vi ricorderete che dovrete digitare 2 numeri? Magari adesso sì ma vi assicuro che domani lo avete già dimenticato.
Allora chiedete al computer, anzi imponetegli di ricordarvelo, sempre tramite 'write'. Dove? Prima dell'istruzione che glieli fa leggere:

Program nome programma
implicit none

integer::x
write(*,*) 'inserisci due numeri a e b'
read (*,*), a,b
x=a+b
write (*,*) 'il risultato della somma a+b è', x
end program


Abbiamo anche il promemoria.
Cosa carina: nell'ultimo 'write' potremmo, di volta in volta, farci scrivere non 'a+b' ma la somma tra i numeri che noi abbiamo realmente digitato mettiamo, cioè, invece di "'il risultato della somma a+b è',x"


write(*,*) 'il risultato della somma', a, '+', b, 'è',x

Mi raccomando, ATTENZIONE! Tutto ciò che è scritto tra apici ('il risultato della somma ') o virgolette ("il risultato della somma "), il computer lo legge come testo (cosidetta stringa) mentre ciò che è lasciato fuori (a,b,x) come variabile.
Il tutto rigorosamente deve essere separato dalle virgole altrimenti fortran "sbrocca".
Seconda domanda: il computer sa chi sono a e b quando li legge? O meglio, sa che deve associarli a dei numeri? Prima di rispondere ricordatevi l' 'implicit none'.
Non lo sa. Quindi vanno dichiarati:

integer::a,b

Terza domanda: e se volessimo fargli sommare dei reali? Detto fatto.

real::a,b

Ma a questo punto 'x', cioè il risultato della loro somma, potrà essere intero? Eh no.

real::a,b,x

E 'integer::x' scompare.
Ora il nostro programmino è molto pulito:

Program nome programma
implicit none
real::a,b,x
write(*,*) 'inserisci due numeri a e b'
read (*,*), a,b
x=a+b
write (*,*) 'il risultato della somma a+b è', x
end program


Inseriamo al suo interno anche altre operazioni, tanto per imparare come si scrivono in fortran gli operatori matematici. Le scrivo e le commento affianco il comando relativo (i commenti in fortran sono preceduti dal punto esclamativo '!' e non vengono riconosciuti dal computer come linguaggio. Servono a noi come promemoria):

Program nome programma
implicit none
real::a,b,x
write(*,*) 'inserisci due numeri a e b'
read (*,*), a,b

x=a+b !addizione
y=a-b !sottrazione
z=a*b !moltiplicazione
v=a/b !divisione
p=a**2 !elevamento a potenza
r=sqrt(b) !radice quadrata

write (*,*) 'il risultato della somma',a,'+',b,'è', x
end program


Manca qualcosa? Direi di sì. Primo: dichiarazione delle variabili 'y,z,v,p,r' che saranno naturalmente reali. Secondo: vogliamo farcele scrivere.
Allora:

Program nome programma
implicit none
real::a,b,x,y,z,v,p,r
write(*,*) 'inserisci due numeri a e b'
read (*,*), a,b

x=a+b !addizione
y=a-b !sottrazione
z=a*b !moltiplicazione
v=a/b !divisione
p=a**2 !elevamento a potenza
r=sqrt(b) !radice quadrata

write (*,*) 'il risultato della somma',a,'+',b,'è', x
write (*,*) 'il risultato della sottrazione',a,'-',b,'è', y
write (*,*) 'il risultato della moltiplicazione',a,'*',b,'è', z
write(*,*)'il risultato della divisione',a,':',b,'è',v

write(*,*)'il quadrato di',a,'è',p
write(*,*)'la radice di',c,'é',r
end program

La fase di scrittura possiamo comprimerla un pò:

write(*,*) 'somma=',x,'sottrazione=',y,'moltiplicazione=',z,'divisione=',v, 'potenza di',a,'=',p,'radice di',b,'=',r

Quindi:

Program nome programma
implicit none
real::a,b,x,y,z,v,p,r
write(*,*) 'inserisci due numeri a e b'
read (*,*), a,b

x=a+b
y=a-b
z=a*b
v=a/b
p=a**2
r=sqrt(b)


write(*,*) 'somma=',x,'sottrazione=',y,'moltiplicazione=',z,'divisione=',v, 'potenza di',a,'=',p,'radice di',b,'=r'
end program

Arrivati a questo punto, dobbiamo fare un passo avanti.
Vogliamo sfruttare l'operazione somma per farci calcolare dal computer la serie di Fibonacci:

0,1,1,2,3,5,8,13,21,34,55...
Ogni numero è somma dei precedenti.
Ma per farlo ci vediamo alla prossima 'lezione'.

Nessun commento:

Posta un commento