Fortran Coder

查看: 215|回复: 9
打印 上一主题 下一主题

[求助] 求问这段代码怎么改呀

[复制链接]

6

帖子

1

主题

0

精华

新人

F 币
28 元
贡献
13 点
跳转到指定楼层
楼主
发表于 2024-11-14 21:54:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
照着课件打改了16处还是出错了,实在没看明白一样的代码老师可以运行出来而我却不能

屏幕截图 2024-11-14 214935.png (48 KB, 下载次数: 36)

屏幕截图 2024-11-14 214935.png
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2024-11-15 08:19:54 | 只看该作者
代码最好是复制粘贴,发在帖子里,而不要截图。

尝试把 do 11 后面的 11 删掉。enddo 11 后面的11删掉。

6

帖子

1

主题

0

精华

新人

F 币
28 元
贡献
13 点
板凳
 楼主| 发表于 2024-11-15 14:41:59 | 只看该作者
fcode 发表于 2024-11-15 08:19
代码最好是复制粘贴,发在帖子里,而不要截图。

尝试把 do 11 后面的 11 删掉。enddo 11 后面的11删掉。 ...

试过了还是出错

6

帖子

1

主题

0

精华

新人

F 币
28 元
贡献
13 点
地板
 楼主| 发表于 2024-11-15 14:42:32 | 只看该作者
watson 发表于 2024-11-15 14:41
试过了还是出错

[Fortran] 纯文本查看 复制代码
FUNCTION ran2(idum)
INTEGER idum, IM1, IM2, IMM1, IA1, IA2, IQ1, IQ2, IR1, IR2, NTAB, NDIV 
REAL ran2, AM, EPS, RNMX
PARAMETER (IM1=2147483563,IM2=2147483399,AM=1./IM1, IMM1=IM1-1, &
        IA1=40014,IA2=40692,IQ1=53668,IQ2=52774,IR1=12211,       &
        IR2=3791, NTAB=32,NDIV=1+IMM1/NTAB,EPS=1.2e-7,RNMX=1.-EPS)       
INTEGER idum2, j, k, iv(NTAB), iy 
SAVE iv, iy, idum2
DATA idum2/123456789/, iv/NTAB*0/,iy/0/
if (idum.le.0) then                
idum=max(-idum,1)                
idum2=idum         
do 11 j=NTAB+8,1,-1                
k=idum/IQ1                
idum=IA1*(idum-k*IQ1)-k*IR1                
if (idum.lt.0) idum=idum+IM1                
if (j.le.NTAB) iv(j)=idum                
enddo 11            
iy=iv(1)                
endif                
k=idum/IQ1
idum=IA1*(idum-k*IQ1)-k*IR1
if (idum.lt.0 ) idum=idum+IM1
k=idum2/IQ2
idum2=IA2*(idum2-k*IQ2)-k*IR2
if (idum2.lt.0) idum2=idum2+IM2
j=1+iy/NDIV       
iy=iv(j)-idum2
iv(j)=idum
if (iy.lt.1) iy=iy+IMM1
ran2=min(AM*iy, RNMX)
return
END

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

5#
发表于 2024-11-15 16:26:59 | 只看该作者
在我这里去掉之后就正常了啊。
如果你改了之后错误提示有变化,请给出新的错误提示。(而不是简单的说“还是出错”)

[Fortran] 纯文本查看 复制代码
FUNCTION ran2(idum)
  INTEGER idum, IM1, IM2, IMM1, IA1, IA2, IQ1, IQ2, IR1, IR2, NTAB, NDIV
  REAL ran2, AM, EPS, RNMX
  PARAMETER (IM1=2147483563,IM2=2147483399,AM=1./IM1, IMM1=IM1-1, &
    IA1=40014,IA2=40692,IQ1=53668,IQ2=52774,IR1=12211,       &
    IR2=3791, NTAB=32,NDIV=1+IMM1/NTAB,EPS=1.2e-7,RNMX=1.-EPS)
  INTEGER idum2, j, k, iv(NTAB), iy
  SAVE iv, iy, idum2
  DATA idum2/123456789/, iv/NTAB*0/,iy/0/
  if (idum.le.0) then
    idum=max(-idum,1)
    idum2=idum
    do j=NTAB+8,1,-1
      k=idum/IQ1
      idum=IA1*(idum-k*IQ1)-k*IR1
      if (idum.lt.0) idum=idum+IM1
      if (j.le.NTAB) iv(j)=idum
    enddo
    iy=iv(1)
  endif
  k=idum/IQ1
  idum=IA1*(idum-k*IQ1)-k*IR1
  if (idum.lt.0 ) idum=idum+IM1
  k=idum2/IQ2
  idum2=IA2*(idum2-k*IQ2)-k*IR2
  if (idum2.lt.0) idum2=idum2+IM2
  j=1+iy/NDIV
  iy=iv(j)-idum2
  iv(j)=idum
  if (iy.lt.1) iy=iy+IMM1
  ran2=min(AM*iy, RNMX)
  return
END

1.png (211.33 KB, 下载次数: 34)

1.png

6

帖子

1

主题

0

精华

新人

F 币
28 元
贡献
13 点
6#
 楼主| 发表于 2024-11-15 16:58:56 | 只看该作者
fcode 发表于 2024-11-15 16:26
在我这里去掉之后就正常了啊。
如果你改了之后错误提示有变化,请给出新的错误提示。(而不是简单的说“还 ...

啊~我试了一遍确实代码没问题,一直显示错误可能是这里出错了,我不知道是少安装了什么

屏幕截图 2024-11-15 165418.png (18.1 KB, 下载次数: 35)

屏幕截图 2024-11-15 165418.png

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

7#
发表于 2024-11-15 17:16:03 | 只看该作者
你这个程序只有子程序,没有主程序,不能独立运行呢。看看输出窗口,应该有类似
libifcoremdd.lib(for_main.obj) : error LNK2019: 无法解析的外部符号 _MAIN__,该符号在函数 _main 中被引用

这种错误提示,就是在告诉你找不到主程序。

6

帖子

1

主题

0

精华

新人

F 币
28 元
贡献
13 点
8#
 楼主| 发表于 2024-11-19 00:23:13 | 只看该作者
fcode 发表于 2024-11-15 17:16
你这个程序只有子程序,没有主程序,不能独立运行呢。看看输出窗口,应该有类似

这种错误提示,就是在告诉 ...

[Fortran] 纯文本查看 复制代码
program main
    implicit none
    integer :: idum
    real :: random_number
   ! 初始化随机数种子,这里可自行设置合适的整数值
    idum = 1234
   ! 调用ran2函数获取随机数
    random_number = ran2(idum)
    print *, "生成的随机数为:", random_number
    end program main
FUNCTION ran2(idum)
INTEGER idum, IM1, IM2, IMM1, IA1, IA2, IQ1, IQ2, IR1, IR2, NTAB, NDIV
REAL ran2, AM, EPS, RNMX
PARAMETER (IM1=2147483563,IM2=2147483399,AM=1./IM1, IMM1=IM1-1,IA1=40014,IA2=40692,IQ1=53668,IQ2=52774,IR1=12211,        IR2=3791, NTAB=32,NDIV=1+IMM1/NTAB,EPS=1.2e-7,RNMX=1.-EPS)       
INTEGER idum2, j, k, iv(NTAB), iy
SAVE iv, iy, idum2
DATA idum2/123456789/, iv/NTAB*0/,iy/0/
if (idum.le.0) then                
idum=max(-idum,1)                
idum2=idum         
do j=NTAB+8,1,-1                
k=idum/IQ1                
idum=IA1*(idum-k*IQ1)-k*IR1                
if (idum.lt.0) idum=idum+IM1                
if (j.le.NTAB) iv(j)=idum                
enddo                 
iy=iv(1)                
endif                
k=idum/IQ1
idum=IA1*(idum-k*IQ1)-k*IR1
if (idum.lt.0 ) idum=idum+IM1
k=idum2/IQ2
idum2=IA2*(idum2-k*IQ2)-k*IR2
if (idum2.lt.0) idum2=idum2+IM2
j=1+iy/NDIV       
iy=iv(j)-idum2
iv(j)=idum
if (iy.lt.1) iy=iy+IMM1
ran2=min(AM*iy, RNMX)
return
END

这样还是出错了,这个程序我跑不起来呀

6

帖子

1

主题

0

精华

新人

F 币
28 元
贡献
13 点
9#
 楼主| 发表于 2024-11-19 00:37:13 | 只看该作者
watson 发表于 2024-11-19 00:23
program main
    implicit none
    integer :: idum

显示这两个错误
Compilation Aborted (code 1)
error #6404: This name does not have a type, and must have an explicit type.   [RAN2]

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

10#
发表于 2024-11-19 08:42:58 | 只看该作者
外部函数需要定义使用。

real :: random_number 后面加一个 ran2 就行了。
也就是:
real :: random_number , ran2

此外,语法提供对随机数的支持,如下代码即可:
详解:http://random.w.fcode.cn/
[Fortran] 纯文本查看 复制代码
program main
  implicit none
  real :: rnd
  call random_seed()! 初始化随机数种子
  ! 调用ran2函数获取随机数
  call random_number(rnd)
  print *, "生成的随机数为:", rnd
end program main




您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-22 21:42

Powered by Tencent X3.4

© 2013-2024 Tencent

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