作者tp6b123 (Luke)
看板Fortran
标题[请益] subroutine 无法回传值
时间Fri Apr 23 16:17:21 2010
如题
之前用副程式计算矩阵
在主程式呼叫都可以传回来整个矩阵的元素
可是这次只是用一维的阵列从(0:10)
在主程式呼叫却无法回传值
0 errors ; 0 warings
只好贴上程式档请大家看看
谢谢<(_ _)>
http://www.badongo.com/cn/file/22202617
--
鲜花无限好
只是进牛粪
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.121.176.57
1F:→ motoman:不能抓... 04/23 18:24
2F:→ motoman:不会用CVF...冏 原po先写interface看看 我遇过类似问题 04/23 18:37
3F:→ motoman:对了 可以抓 04/23 18:38
4F:→ motoman:你xl,xr,dx是real N是整数...还有你func宣告要加external 04/23 18:43
5F:→ tp6b123:抱歉还是新手,不太懂m大说的方法 04/24 00:27
6F:→ motoman:不同变数型态不能混合运算 你写了 (xl-xr)/dx=N 04/24 09:19
7F:→ motoman:要把real变integer或integer变real 还有你allocate时 04/24 09:20
8F:→ motoman:里面的N一定要整数才行 函数宣告时要写 real,external::f 04/24 09:21
9F:→ motoman:最後一个很细节的问题是allocatble进出函式时某些编译器 04/24 09:22
10F:→ motoman:会出问题或者编译过但执行有问题 解决方法是把这变数放在 04/24 09:23
11F:→ motoman:module或写个interface 04/24 09:23
12F:→ tp6b123:那请问如何写module or interface 我刚试过把n的运算式 04/24 10:50
13F:→ tp6b123:改成N=int((xr-xl)/dx) func也加了real,external::f 04/24 10:51
14F:→ tp6b123:还是不能跑出来= = 04/24 10:51
15F:→ Semisphere:请问你说的不能跑出来,是指哪个变数有问题? 04/24 12:49
16F:→ Semisphere:在主程式呼叫却无法回传值,这句是指阵列Euler吗 04/24 12:50
17F:→ Semisphere:Euler只有在副程式Euler1里面有计算,但你没传Euler进去 04/24 12:51
18F:→ Semisphere:自然没有回传,你的Euler只能算是副程式Euler1所宣告的 04/24 12:52
19F:→ Semisphere:区域变数,主程式main虽然也宣告Euler,但你没传进副程式 04/24 12:53
20F:→ Semisphere:接收,也没初始化,所以看起来有问题 04/24 12:54
21F:→ tp6b123:对就是Euler 04/24 12:56
22F:→ tp6b123:Euler只有在副程式Euler1 这段是什麽意思 04/24 12:57
23F:→ tp6b123:之前我副程式用这样写两个矩阵的相乘传出第三个矩阵 04/24 12:58
24F:→ tp6b123:直接用这种方式就可以传回了 04/24 12:59
矩阵相乘:
http://www.badongo.com/cn/file/22216647
※ 编辑: tp6b123 来自: 220.136.169.251 (04/24 13:02)
25F:→ tp6b123:感谢大家回答让我又学习到东西 ︿︿ 04/24 13:03
26F:→ Semisphere:你之所以可以从副程式Mu中回传C,就是因为你有传C进去 04/24 13:23
27F:→ Semisphere:但你现在这支程式你没传Euler进去Euler1,她没办法回传 04/24 13:23
28F:→ Semisphere:你没把Euler宣告成全域变数,她只是各副程式中的区域变 04/24 13:24
29F:→ Semisphere:数,自然不会有你要的效果 04/24 13:25
30F:→ tp6b123:知道了!!要改成Euler1(Euler,N,x,dx) 04/24 13:37
31F:→ tp6b123:感谢 04/24 13:37