Fortran Coder

查看: 25654|回复: 10
打印 上一主题 下一主题

[求助] 随机数组 & 接口冲突

[复制链接]

33

帖子

4

主题

0

精华

熟手

F 币
229 元
贡献
117 点
跳转到指定楼层
楼主
发表于 2014-4-4 17:09:56 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
GFortran编译通过,但每次运行结果一样,无变化
IVF无法通过编译,并提示【there is a conflict beetween local interface and external interface [GET_RANDOM]】

文本为输入文件及运行结果[random.dat]
RANDOM.DAT (113 Bytes, 下载次数: 1)
[Fortran] 纯文本查看 复制代码
PROGRAM RANDOMNUM
IMPLICIT NONE
INTERFACE !为函数GET_RANDOM(N,L,U)定义接口
!==================================================
FUNCTION GET_RANDOM(N,L,U)
IMPLICIT NONE
INTEGER N,I
REAL L,U,LENGTH,t
REAL::GET_RANDOM(N)!除了N,L,U外应该不许要声明其他吧??
!RETURN
END FUNCTION 
!==================================================
END INTERFACE
INTEGER N
REAL L,U
REAL,ALLOCATABLE::A(:)!因为我想让这个函数具有通用性,所以用了动态数组

CALL RANDOM_SEED()!随机数种子
!石头大人说可能是没有种子的原因,可是我这里一直都有哇。
!我用的GFortran,后来在IVF上试验,无法编译
OPEN(9,file='random.dat')
READ(9,*)N,L,U
ALLOCATE(A(N))
A=GET_RANDOM(N,L,U)
WRITE(9,90)A
90 FORMAT(/,F7.3)
DEALLOCATE (A)
END

!==================================================
FUNCTION GET_RANDOM(N,L,U)
IMPLICIT NONE
INTEGER N,I
REAL L,U,LENGTH,t
REAL::GET_RANDOM(N)
!L,U分别代表了数组的上下限
LENGTH=U-L
DO I=1,N
CALL RANDOM_NUMBER(t)
GET_RANDOM(I)=L+LENGTH*t
END DO

RETURN
END FUNCTION 
!==================================================


分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

33

帖子

4

主题

0

精华

熟手

F 币
229 元
贡献
117 点
沙发
 楼主| 发表于 2014-4-4 17:10:47 | 显示全部楼层
本帖最后由 hanshikai 于 2014-4-4 17:31 编辑

不好意思,刚刚给代码加上了注释。已更新。

33

帖子

4

主题

0

精华

熟手

F 币
229 元
贡献
117 点
板凳
 楼主| 发表于 2014-4-4 18:08:04 | 显示全部楼层
本帖最后由 hanshikai 于 2014-4-4 18:09 编辑
chuxf 发表于 2014-4-4 18:06
1. GFortran 的 seed 函数需要费点劲,你需要手动获得系统时间并当做种子。它的帮助里给了一个例子,可以复 ...


非常感谢

PS:我的ivf是11.*的

33

帖子

4

主题

0

精华

熟手

F 币
229 元
贡献
117 点
地板
 楼主| 发表于 2014-4-4 18:13:50 | 显示全部楼层
chuxf 发表于 2014-4-4 18:06
1. GFortran 的 seed 函数需要费点劲,你需要手动获得系统时间并当做种子。它的帮助里给了一个例子,可以复 ...

谢谢你指导性的意见【返回数组的话,通常用subroutine,避免使用function。如果非要用 function,可以封装到 module 里】

还有个问题:如果不用interface、module,是不是function不能返回数组?

33

帖子

4

主题

0

精华

熟手

F 币
229 元
贡献
117 点
5#
 楼主| 发表于 2014-4-4 18:48:06 | 显示全部楼层
chuxf 发表于 2014-4-4 18:40
是的,不能。

你把一切都否定了,自然就不能了。

谢谢,明白了。

33

帖子

4

主题

0

精华

熟手

F 币
229 元
贡献
117 点
6#
 楼主| 发表于 2014-4-4 18:49:40 | 显示全部楼层
pasuka 发表于 2014-4-4 18:38
可以预先定义结构体,里面设置一个动态分配数组
然后function里面分配动态数组并返回该结构体,只是有必 ...

谢谢。
结构体是什么? 英文?

33

帖子

4

主题

0

精华

熟手

F 币
229 元
贡献
117 点
7#
 楼主| 发表于 2014-4-4 18:52:59 | 显示全部楼层
chuxf 发表于 2014-4-4 18:51
C 里面叫 struct
Fortran 里面叫 type(中文通常叫派生类型)

3Q.又长知识了。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-19 11:10

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表