Fortran Coder

查看: 6169|回复: 2
打印 上一主题 下一主题

[数值问题] 计算结果只有一个,而应该有多个?

[复制链接]

35

帖子

12

主题

0

精华

熟手

F 币
173 元
贡献
117 点
跳转到指定楼层
楼主
发表于 2014-10-29 19:24:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想要運用list.txt和list2.txt加上do while迴圈進行檔案名稱的讀取
再讀取檔案內的數值進行公式運算
但發現運行出來的結果只有一行,真心不知道到底錯在哪?
明明運行出來的結果應該會有很多筆資料。

先在這邊跟幫忙我、集思廣益解決問題的大家說聲謝謝。

作業系統:windows7
complier:Silverfrost FTN95

程式碼如下:
[Fortran] 纯文本查看 复制代码
program baseline
implicit none

integer :: stat,k,stat2,m,stat3,stat4
character :: filename_1*13,gps1*4,filename_2*13,gps2*4,filename_new*13
real*8 :: x1,y1,z1,x2,y2,z2,dis,time_all_1,time_all_2

  open (11,file='list.txt')
  close (11,status='delete')
  open (22,file='list2.txt')
  close (22,status='delete')
  call system ('for %f in (ts_*_b.dat) do echo %f >> list.txt')
  call system ('for %f in (ts_*_b.dat) do echo %f >> list2.txt')
  open (11,file='list.txt')
  open (22,file='list2.txt')
  
  stat=0
  k=0
  do while (stat==0)
    read (11,'(a13)',iostat=stat) filename_1
    read (filename_1(4:7),'(a4)') gps1
    if (stat/=0) exit
    k=k+1  

    stat2=0
    m=0
    do while (stat2==0)
      m=m+1
      read (22,'(a13)',iostat=stat2) filename_2
      read (filename_2(4:7),'(a4)') gps2
      if (stat2/=0) exit
      if (gps1 /= gps2 .and. k < m) then
        filename_new = gps1//'_'//gps2//'.dat'
        open (33,file=filename_1)
        open (44,file=filename_2)
        open (55,file=filename_new)

        stat3=0
        do while(stat3==0)
          read (33,50,iostat=stat3) time_all_1,x1,y1,z1
50        format (f10.5,2x,f13.4,11x,f12.4,11x,f12.4)  
          if (stat3/=0) exit

          stat4=0
          do while (stat4==0)
            read (44,100,iostat=stat4) time_all_2,x2,y2,z2
100         format (f10.5,2x,f13.4,11x,f12.4,11x,f12.4)
            if (stat4/=0) exit           
            if ( DABS (time_all_1 - time_all_2 ) < 0.00001D0 ) then
              dis = DSQRT ( (x1*1D0-x2*1D0)**2+(y1*1D0-y2*1D0)**2+(z1*1D0-z2*1D0)**2 )
              write (55,'(f10.5,3x,f12.7)') time_all_1,dis
            end if 
            exit
          end do
          rewind(44)
        end do   
      end if
      close(33)
      close(44)
      close(55)
    end do
    rewind(22)      
  end do
  close(11)
  close(22)
end program

以下為附檔




baseline.rar

19.86 KB, 下载次数: 3

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

100

帖子

0

主题

0

精华

专家

F 币
550 元
贡献
291 点

规矩勋章元老勋章

QQ
沙发
发表于 2014-10-30 09:35:20 | 只看该作者
[Fortran] 纯文本查看 复制代码
if ( DABS (time_all_1 - time_all_2 ) < 0.00001D0 ) then 
  dis = DSQRT ( (x1*1D0-x2*1D0)**2+(y1*1D0-y2*1D0)**2+(z1*1D0-z2*1D0)**2 ) 
  write (55,'(f10.5,3x,f12.7)') time_all_1,dis 
end if 
exit  

这个 exit  放错地方了吧?放到 endif  前面去吧。楼主很粗心哦~~

评分

参与人数 1F 币 +9 贡献 +9 收起 理由
fcode + 9 + 9

查看全部评分

35

帖子

12

主题

0

精华

熟手

F 币
173 元
贡献
117 点
板凳
 楼主| 发表于 2014-10-30 10:48:45 | 只看该作者
百事可乐 发表于 2014-10-30 09:35
[mw_shl_code=fortran,true]if ( DABS (time_all_1 - time_all_2 ) < 0.00001D0 ) then
  dis = DSQRT ( ( ...

感謝你,著實幫我解決一個粗心的問題。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-24 07:34

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表