yifanxing1992 发表于 2014-10-21 20:30:30

关于输出格式控制方面的问题

求助:大神们,我想把t和y(1)到y(6)这样7组数据输出到txt文件当中,其中我想达到的目的是,在txt文件当中,7个数据输出到同一行,另外就是t这个数据保留5位小数,而后面y(1)到y(6)这六组数据保留8位小数。。。
但是我写的程序,最后面7个数据分为三行输出,而且保留了好多位小数,并不是我想要的结果。哪位大神能帮忙解决一下呀。。万分感谢。

源程序如下:
module m_rk4_ods
    implicitnone
    integer::M=100
contains

subroutine solve(func,t0,tt,y0,N)
   implicit none
   external func
   integer::N
   real*8::y0(N),y(N)
   real*8::k1(N),k2(N),k3(N),k4(N)
   real*8::h,tt,t0,t
   integer::i

   h=(tt-t0)/M
t=t0
   y=y0
   do i=1,M
         call func(k1,t,y,N)
         call func(k2,t+h/2,y+h/2*k1,N)
         call func(k3,t+h/2,y+h/2*k2,N)
         call func(k4,t+h,y+h*k3,N)
         y=y+(k1+2*k2+2*k3+k4)*h/6
         t=t0+i*h
         write(11,*)t,y(1),y(2),y(3),y(4),y(5),y(6)
      100 FORMAT(1X,T3,F10.5,F12.8)
   end do

   end subroutine solve

subroutine fun1(f,t,y,N)
   implicit none
   integer::N
   real*8::f(N),y(N)
   real*8::t,t0,tt


   f(1)=cos(t-y(6))-y(3)**2/sqrt(1+y(3)**2)*cos(t-y(6))/(3*10**8)
   f(2)=0
   f(3)=y(1)/sqrt(1+y(1)**2)*cos(t-y(6))
   f(4)=y(1)/sqrt(1+y(1)**2)
   f(5)=y(2)/sqrt(1+y(2)**2)
   f(6)=y(3)/sqrt(1+y(3)**2)
end subroutine fun1

   end module m_rk4_ods


program main
   use m_rk4_ods
implicit none
   integer::N
   real*8::y(6),y0(6)
   real*8::t0,tt

   open(unit=11,file='result10.txt')

   N=6
   t0=0.0
   tt=12.0
   y0=(/0,0,0,0,0,0/)
   call solve(fun1,t0,tt,y0,N)
   end program main

楚香饭 发表于 2014-10-21 21:22:26

第 25,26 行
write(11,*)t,y(1),y(2),y(3),y(4),y(5),y(6)
100 FORMAT(1X,T3,F10.5,F12.8)

改为

write(11,100)t,y(1:6)
100 FORMAT(1X,F10.5,6F12.8)

yifanxing1992 发表于 2014-10-22 00:26:09

谢谢大神哦!!!已经可以啦。。
页: [1]
查看完整版本: 关于输出格式控制方面的问题