24小时热门版块排行榜    

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

songjunann

铜虫 (小有名气)

[求助] Fortran的subroutine和function有什么区别,是在于输入输出的特点吗?

Fortran的subroutine和function有什么区别,我看到有的网页上说是在于输入输出的特点: 即function只能允许一个输出,而subroutine可以有很多输出?是这样吗?

比如一个函数

function   monsim(x,...)

.....

是不是输出变量只能是monisim?
如果x值有变化吗?即输入的x是一个值,但是function里面有关于x的赋值表达式,使得x值发生变化,那么是否 在主程序中call  monsim(x,...),会同时读到新的x值
和monsim的值? (因为我看很多function里面都把输出的结果变量名设成和函数一样的名字)。 请多多指教,谢谢!
回复此楼

» 猜你喜欢

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

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

lurencyj

木虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2012-03-25 01:41:48
songjunann: 金币+20, ★★★很有帮助, 谢谢 2012-03-28 12:29:30
余泽成: 专家考核 2012-03-30 14:07:28
function接受多个参数,返回一个计算结果。调用的时候,可以直接插入表达式,比如x = AVRAGE(a,b,c)。function AVRAGE 的构造如下:
CODE:
REAL FUNCTION AVRAGE(X,Y,Z)
     REAL X,Y,Z,SUM
     SUM = X + Y + Z
     AVRAGE = SUM /3.0
     RETURN
END

Subroutine适用在当需要返回多个变量数值的情形,但是,调用subroutine的时候,只能用call语句,不能像function那样直接插入表达式。 下面这个subroutine是对A,B,C的求和,以及求和的平方。用call语句调用后,位于sum和sumsq的变量将被改变数值:
CODE:
SUBROUTINE CALC(A,B,C, SUM,SUMSQ)
           REAL A,B,C,SUM,SUMSQ
           SUM = A + B + C
           SUMSQ = SUM **2
           RETURN
END

很女子很弓虽大
2楼2012-03-25 00:32:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖

★ ★
zzy870720z: 金币+2, 专家考核, 谢谢指教 2012-03-25 14:59:37
你可以自己做个测试。呵呵。

如何判断参数是否为输出性质的变量,这个从subroutine 的参数列表()里面是看不出来的,除非在给它们取名字时就标识清楚。

Subroutine里面有赋值的变量确实都会输出!

[ 发自手机版 http://muchong.com/3g ]
很女子很弓虽大
4楼2012-03-25 05:34:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖

楼主应该找本教材确认一下

[ 发自手机版 http://muchong.com/3g ]
很女子很弓虽大
5楼2012-03-25 05:36:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖


余泽成: 金币+1, 专家考核, 谢谢参与应助! 2012-03-30 14:08:15
赞同楼上的说法,规矩点好,而且要做好变量命名规则

[ 发自手机版 http://muchong.com/3g ]
很女子很弓虽大
8楼2012-03-25 16:11:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

★ ★
余泽成: 金币+2, 专家考核, 谢谢参与应助! 2012-03-30 14:09:04
引用回帖:
10楼: Originally posted by songjunann at 2012-03-28 12:30:00:
请问,什么是side effect? 谢谢

snoopy (GG/MM) 大概指的是可能会发作的副作用吧。

楼主遇到那种只需要得到一个返回值的情形,那么最好用function这样的小刀。
楼主遇到那种需要得到很多个返回值的情形,那么最好用subroutine这样的牛刀。

牛刀用不好的话,容易割手(可能会改变subroutine里传入参量在主函数里面的数值)。
很女子很弓虽大
12楼2012-03-28 15:54:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)


余泽成: 金币+1, 专家考核, 谢谢参与应助! 2012-03-30 14:09:14
sorry

楼主遇到那种需要得到很多个返回值的情形,那么只能[/]用subroutine这样的牛刀。
很女子很弓虽大
13楼2012-03-28 15:57:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 songjunann 的主题更新
信息提示
请填处理意见