24小时热门版块排行榜    

查看: 3262  |  回复: 9
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

夜月丨噩梦

金虫 (初入文坛)

[求助] 为什么Fortran调试无错误运行不出结果 已有2人参与

program main
   parameter  n=600
   double precision u(0:n),u1(0:n),x0,x1,x,t0,t1,h,dett,lambda,y(0:n)
   integer i,j
   x0=0.0d0
   x1=6.0d0                           
   t0=0.0d0
   lambda=0.3d0
   t1=0.5d0
   h=0.01d0
   dett=0.003d0
    x=x0
   !do i=0,n,1
         !if(i<=250)then
     !y(i)=1.0
         !else
        ! y(i)=0
         !end if
        ! end do
        do i=0,n,1
                 if(x>=1 .and. x<=3) then
                 u(i)=1.0d0
                 else
                 u(i)=0.0d0
                 end if
                 x=x+h
         end do
         open(1,file="yingfeng.dat"
         t=t0+dett
         x=x0
         do while(t<=t1)
             x=x0+h
                         do j=1,n,1
                                 u1(j)=u(j)-3*lambda*(u(j)-u(j-1))
                                 
                                   if(abs(t-0.5)<=0.0001)then
                                   write(1,*)x,u1(j),y(j)
                                   end if
                                 x=x+h
                     end do
          do j=1,n-1
                 u(j)=u1(j)
                 u(0)=1
                 u(1)=0
                 end do

             t=t+dett
         end do
stop
end
求大神指导,为啥这个程序运行后yingfeng.dat文件里面啥数据都没有
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fmying

银虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
夜月丨噩梦: 金币+30, ★★★很有帮助 2016-01-05 11:42:26
你的程序中最重要的部分如下:
double precision ...t0,t1,...,dett...
t0=0.0d0
t1=0.5d0
dett=0.003d0
...
t=t0+dett
do while(t<=t1)
...
if(abs(t-0.5)<=0.0001) then
write(1,*)x,u1(j),y(j)
endif
...

可以看到,这个程序能否向yingfeng.dat中写入数据的关键是:t的数值相距0.5的差值是否小到0.0001以内,和其它问题完全无关。

如果分析我给出的这些语句的话,就会发现问题所在:
t从0.003开始累加,要和0.5比???能达到相差小于0.0001的程度么?
相当于500/3,得到的余数是多少?
条件达不到,当然不会输出。程序在逻辑上是没错的。
希望楼主能再审视一下相应的条件,让程序输出你要的结果。

另外,希望楼主能注意以下几个方面:
1 t1和t0都是双精度,但是t却没有定义啊!!!按照默认的I-N规则,t是单精度型,可能会引起误差,从而引起不必要的麻烦哦。
2 open之后没有对应的close语句,这点很不好!!很不好!!很不好!!楼主目前写的是小程序不觉得,程序一大,很容易搞混的,到时候想写这个文件却写到那个文件去了,或者想写却发现文件没打开之类的。而且这种错误会很难调试。
3 stop语句一般只用在这样两个方面:调试程序 或 出错后的强行停止。不建议用stop来结束程序,让程序自己运行完毕后停止岂不更好?
4 前面有program xxx的话,最后建议用end program xxx结束。这样构造一个封闭的block,今后也会很容易读代码,便于维护管理。
5 楼主的程序使用了默认的I-N规则,建议使用Implicit None,取消默认规则,使每个变量都要定义类型(和C一样强类型)。使用默认规则的话,一旦有什么问题都是非常隐蔽极难调试的。

最后,楼主如果有程序方面的问题,欢迎移步“程序语言”版块提问。

» 本帖已获得的红花(最新10朵)

上善若水
5楼2016-01-02 19:32:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 10 个回答

bennett_14

木虫 (正式写手)

x0=0.0d0中的d0是啥????

发自小木虫Android客户端
君子当自强不息,死而后已!
2楼2016-01-02 16:09:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bennett_14

木虫 (正式写手)

【答案】应助回帖

经过测试,可以生成yingfeng.dat文件的,文件和程序在相同的目录下,估计你没有运行,或运行了但是找错了文件夹

发自小木虫Android客户端
君子当自强不息,死而后已!
3楼2016-01-02 16:35:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

夜月丨噩梦

金虫 (初入文坛)

引用回帖:
3楼: Originally posted by bennett_14 at 2016-01-02 16:35:26
经过测试,可以生成yingfeng.dat文件的,文件和程序在相同的目录下,估计你没有运行,或运行了但是找错了文件夹

是可以运行,但是运行结果是0KB,里面啥都没有

发自小木虫Android客户端
4楼2016-01-02 17:51:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见