Sommatoria in fortran

enrico paterna
salve ragazzi, sono un neofita di fortran e non capisco perchè il seguente codice nonostante compli e mi calcoli Q_fin e Q_in pone Q=0. Cioè legge l inizializzazione fuori dal ciclo do e rimane tale. please help


program readwrite
      implicit none
      real a(200,4),Q_in,Q_fin,Q,Q_tot,v_med
      integer i,j,nj

      character*40 nome

      write(6,*) 'nome file'
      read(5,'(a)') nome
      open(unit=16,file=nome)

      nj=180
      
      do i=1,nj
      read(16,*) (a(i,j),j=1,4)
      enddo

			Q_in=(a(1,1)-a(1,3))/2*a(1,2)
			Q_fin=(2-a(180,1))/2*a(180,2)
			
      Q=0.
      
      do i=1,nj-1
      
      Q=Q+1/2*((a(i+1,2)+a(i,2))*(a(i+1,1)-a(i,1)))
      
      enddo
      
			Q_tot=Q+Q_in+Q_fin

			v_med=Q_tot/2
			
			
       write(6,*) 'velocita media', v_med
     	 write(6,*) 'Q', Q
       write(6,*) 'Q_in', Q_in
       write(6,*) 'Q_fin', Q_fin
			end

Risposte
Zero87
Benvenuto al forum e buona permanenza; visto che è il tuo primo messaggio, te lo sposto io nella sezione adatta (informatica), per le prossime volte ti invito a dare un'occhiata al regolamento e a postare nella sezione corretta.

feddy
[ot]Fortran O.o
Nel 2018? Ma che scherziamo?[/ot]

apatriarca
Non sono un esperto di Fortran ma la mia ipotesi è che questa espressione possa essere valutata a zero:
1/2*((a(i+1,2)+a(i,2))*(a(i+1,1)-a(i,1)))

Se il calcolo venisse in effetti fatto valutando prima \(1/2\) come numeri interi e poi facendo la moltiplicazione avresti uno zero. Ti consiglio di usare \(0.5\) se vuoi moltiplicare per un mezzo o inserire delle parentesi se vuoi fare qualcosa di diverso.

@feddy: Anche se non è certamente tra i linguaggi più comuni, ci sono ancora diversi settori in cui Fortran viene usato (HPC principalmente) e ha subito diversi miglioramenti negli anni (l'ultimo standard è del 2010).

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.