看板 Fortran 關於我們 聯絡資訊
如題 之前用副程式計算矩陣 在主程式呼叫都可以傳回來整個矩陣的元素 可是這次只是用一維的陣列從(0:10) 在主程式呼叫卻無法回傳值 0 errors ; 0 warings 只好貼上程式檔請大家看看 謝謝<(_ _)> http://www.badongo.com/cn/file/22202617 -- 鮮花無限好 只是進牛糞 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.176.57
motoman:不能抓... 04/23 18:24
motoman:不會用CVF...冏 原po先寫interface看看 我遇過類似問題 04/23 18:37
motoman:對了 可以抓 04/23 18:38
motoman:你xl,xr,dx是real N是整數...還有你func宣告要加external 04/23 18:43
tp6b123:抱歉還是新手,不太懂m大說的方法 04/24 00:27
motoman:不同變數型態不能混合運算 你寫了 (xl-xr)/dx=N 04/24 09:19
motoman:要把real變integer或integer變real 還有你allocate時 04/24 09:20
motoman:裡面的N一定要整數才行 函數宣告時要寫 real,external::f 04/24 09:21
motoman:最後一個很細節的問題是allocatble進出函式時某些編譯器 04/24 09:22
motoman:會出問題或者編譯過但執行有問題 解決方法是把這變數放在 04/24 09:23
motoman:module或寫個interface 04/24 09:23
tp6b123:那請問如何寫module or interface 我剛試過把n的運算式 04/24 10:50
tp6b123:改成N=int((xr-xl)/dx) func也加了real,external::f 04/24 10:51
tp6b123:還是不能跑出來= = 04/24 10:51
Semisphere:請問你說的不能跑出來,是指哪個變數有問題? 04/24 12:49
Semisphere:在主程式呼叫卻無法回傳值,這句是指陣列Euler嗎 04/24 12:50
Semisphere:Euler只有在副程式Euler1裡面有計算,但你沒傳Euler進去 04/24 12:51
Semisphere:自然沒有回傳,你的Euler只能算是副程式Euler1所宣告的 04/24 12:52
Semisphere:區域變數,主程式main雖然也宣告Euler,但你沒傳進副程式 04/24 12:53
Semisphere:接收,也沒初始化,所以看起來有問題 04/24 12:54
tp6b123:對就是Euler 04/24 12:56
tp6b123:Euler只有在副程式Euler1 這段是什麼意思 04/24 12:57
tp6b123:之前我副程式用這樣寫兩個矩陣的相乘傳出第三個矩陣 04/24 12:58
tp6b123:直接用這種方式就可以傳回了 04/24 12:59
矩陣相乘: http://www.badongo.com/cn/file/22216647 ※ 編輯: tp6b123 來自: 220.136.169.251 (04/24 13:02)
tp6b123:感謝大家回答讓我又學習到東西 ︿︿ 04/24 13:03
Semisphere:你之所以可以從副程式Mu中回傳C,就是因為你有傳C進去 04/24 13:23
Semisphere:但你現在這支程式你沒傳Euler進去Euler1,她沒辦法回傳 04/24 13:23
Semisphere:你沒把Euler宣告成全域變數,她只是各副程式中的區域變 04/24 13:24
Semisphere:數,自然不會有你要的效果 04/24 13:25
tp6b123:知道了!!要改成Euler1(Euler,N,x,dx) 04/24 13:37
tp6b123:感謝 04/24 13:37