sommatoria in fortran

Messaggioda enrico paterna » 12/10/2018, 10:38

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


Codice:
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
enrico paterna
Starting Member
Starting Member
 
Messaggio: 1 di 2
Iscritto il: 12/10/2018, 10:35

Re: sommatoria in fortran

Messaggioda Zero87 » 12/10/2018, 21:38

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.
Ex studente Unicam :heart:
Avatar utente
Zero87
Cannot live without
Cannot live without
 
Messaggio: 5484 di 12931
Iscritto il: 12/01/2008, 23:05
Località: Marche

Re: sommatoria in fortran

Messaggioda feddy » 08/11/2018, 19:36

Testo nascosto, perché contrassegnato dall'autore come fuori tema. Fai click in quest'area per vederlo.
Fortran O.o
Nel 2018? Ma che scherziamo?
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2278 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: sommatoria in fortran

Messaggioda apatriarca » 11/11/2018, 13:52

Non sono un esperto di Fortran ma la mia ipotesi è che questa espressione possa essere valutata a zero:
Codice:
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).
apatriarca
Moderatore
Moderatore
 
Messaggio: 5146 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite