主题:有个错误,我怎么都检查不出来
纷飞冷雨
[专家分:100] 发布于 2011-07-05 16:51:00
subroutine rk(a,b,f,n,y0)
real*8 a,b,f,y0
real*8 x,y,x0,h,k1,k2,k3,k4
integer i,n
h=(b-a)/n
x0=a
do 100 i=1,n
x=x0+h
k1=f(x0,y0)
k2=f(x0+0.5*h,y0+0.5*h*k1)
k3=f(x0+0.5*h,y0+0.5*h*k2)
k4=f(x0+h,y0+h*k3)
y=y0+h*(k1+2*(k2+k3)+k4)/6
x0=x
y0=y
write(*,*)x,y
100 continue
end
c===============================
function f(x,y)
real*8 f,x,y
f=x-y
return
end
c=================================
program main
external f
real*8 a1,b1,y10
integer n1
n1=10
a1=0.0
b1=1.0
y10=0.0
call rk(a1,b1,f,n1,y10)
end
这是龙格-库塔法求微分方程的程序,编译器提示倒数第二行“call rk(a1,b1,f,n1,y10)”有“匹配错误”。但我觉得是正确的。
回复列表 (共12个回复)
沙发
bshine1225 [专家分:720] 发布于 2011-07-05 17:01:00
可能是变量f的数据类型不一致
板凳
yeg001 [专家分:14390] 发布于 2011-07-05 22:04:00
记得用函数名作为变量传递要写个interface(接口), 但不记得是不是硬性一定要. 很久没用过这个用法, 不是很记得了.
楼主, 你的代码已经很"现代"了, 但为什么不用implicit none呢, 不用它导致看你代码的时候不得不关于是否有变量没有被定义. 这样不利于交流, 如果代码在长一点我就不看了.
3 楼
纷飞冷雨 [专家分:100] 发布于 2011-07-06 00:13:00
2楼,我从来没用过interface,也没用过implicit none。
徐士良编著的《FORTRAN常用算法程序集》里面的源程序也是我这种格式的,发行了几千几万本了。
其实1楼已经说明问题了,我应该在主程序的变量定义部分说明外部函数F的数据类型,我疏忽了。
4 楼
yeg001 [专家分:14390] 发布于 2011-07-06 00:20:00
[quote]2楼,我从来没用过interface,也没用过implicit none。
徐士良编著的《FORTRAN常用算法程序集》里面的源程序也是我这种格式的,发行了几千几万本了。
其实1楼已经说明问题了,我应该在主程序的变量定义部分说明外部函数F的数据类型,我疏忽了。[/quote]
如果你能保证不打错一个字母把完整的徐士良《FORTRAN常用算法程序集》copy下来, 那没话说, 但如果打错字母呢?
那个人风格, 你觉得没问题就行. 只是建议. 反正帖给人看的东西不考虑到看代码的人的代价, 那提供帮助的人自然少.
5 楼
cgl_lgs [专家分:21040] 发布于 2011-07-07 23:57:00
[quote]记得用函数名作为变量传递要写个interface(接口), 但不记得是不是硬性一定要. 很久没用过这个用法, 不是很记得了.
楼主, 你的代码已经很"现代"了, 但为什么不用implicit none呢, 不用它导致看你代码的时候不得不关于是否有变量没有被定义. 这样不利于交流, 如果代码在长一点我就不看了.[/quote]
如果写到module里就不用interface了:)
6 楼
纷飞冷雨 [专家分:100] 发布于 2011-07-08 17:48:00
1、fortran77格式的源程序,简洁明了,可读性强,新编译器同样可以识别;大部分人都喜欢
2、我不是拷贝的老徐的源程序,是我自己写的,况且每个人都会出错;
3、出错了来求助,是我的事,是否愿意帮忙,则是大家的事情;
4、我相信论坛里还是热心人多
7 楼
dongyuanxun [专家分:7180] 发布于 2011-07-08 18:08:00
让人困扰的不是fixed或者free格式,而是程序员对各种标准的滥用、对编程陷阱视而不见,编译器的bug、对一些特性的废弃,以及pfan可恶的代码排版。
8 楼
yeg001 [专家分:14390] 发布于 2011-07-08 21:00:00
LZ你的前三个观点我都不同意.
我没说不帮忙, 现在我在写文章所以论坛上面要我测试代码或者写代码的我就不做. 但是我做过的有经验的就留言. 你不接受是你的事. 不代表我的回帖没帮助过你.
你注册pfan的时间比我还早, 竟然没用过interface, 跟我感觉就是停留在90年代的水平(没错, 这是你的事, 你喜好).
少写些东西叫简洁, 那只为什么不直接用默认类型定义? 其实program main也可以不用写的. 写那么多貌似冗余的信息就是尽量详尽地告诉编译器你有什么更关键的一点是让别人容易看你的代码.
徐士良《FORTRAN常用算法程序集》我不好评价, 但只凭那个销量就说他的代码风格好? 那些全球卖出数十万的外国fortran书是不是要哭了?
你是否接受建议是你的事, 我提建议是我的事. 既然你的帖子发在网络论坛我就有权回复. 不爽你可以删贴.
由你第一帖回复表示出不接受建议就算了, 而且带有攻击性语气. 我就打消了去找之前写过的代码帖上来参考的念头.
好吧, 祝热心人帮你解决问题吧.
9 楼
cgl_lgs [专家分:21040] 发布于 2011-07-08 21:28:00
给楼主一个建议:既然来问问题就要有足够的心理准备,不要过于要求回帖人的语气及言论。再者说夜格兄也只是陈述客观事实而已啊:)
10 楼
zinsser_1982 [专家分:400] 发布于 2011-07-09 00:02:00
楼主态度确实有问题。
夜格兄很热心的帮忙解决问题,且指出了编程风格不足的地方,楼主不但不虚心接受,居然还很挑衅,实在不解。
我来回复