作者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