我在用fortran编程调试程序的时候有一个错误不知道怎么改,希望有高手可以帮忙!

我在用fortran编程调试程序的时候有一个错误不知道怎么改,希望有高手可以帮忙!,第1张

end用于结束一段程序或子程序,上边提示错误信息undefined label 4,也就是说前边有一个4号标签是未定的:比方说上边的这个循环,如果写成:

DO 73 I = 1, N

WRITE(,) TTTTTTTTTT

74 CONTINUE

由于73号标签不能与CONTINUE前的74号对应,也会出现上述错误。一楼说的是针对另一种没有标签的DO循环,跟问题中的错误并不对应。

你的do 写成 d0 了 !

PROGRAM CREEPLIFETOOL 

IMPLICIT DOUBLE PRECISION(A-H,O-Z) 

DIMENSION DV(1000),D(1000),SG(100),TF(100),NS(100),ES(100) 

WRITE(,)'ULTIMATE AND MINIMUM STRESS /MPA' 

READ(,) SB,SMIN 

WRITE(,)'TIME INCREMENT /S' 

READ(,) DT 

WRITE(,) 'NECKLING STRAIN EV' 

READ(,) EV

c! LINEAR CREEP LIMIT 

SV=1000

c! 幂蠕变线性蠕变特性 

B=30E-20 

B0=30E-12 

CM=50

c! 幂蠕变损伤累积特性 

CC=18E-19 

BT=50

c! 线性蠕变损伤累积特性 

CL=33E-13 

BT2=20 

GAM=50 

SF=650

c! 应力计算点设定 

Do 100 I=1,100 

SG(I)=SMIN+I(SB-SMIN)/1000 

ES(I)=00

100  CONTINUE 

Do 200 I=1,100 

DV(1)=00 

D(1)=00 

DVC=00 

DC=00 

CR0=SG(I)/SB 

EV0=00 

EVC=EV/B/SG(I)CM 

Do 300 J=2,10000000 

ST=SG(I)/(1-DV(J-1))/(1-D(J-1)) 

DDV=DTB(10-DV(J-1))STCM 

IF(STLESV) DDV=DTB0ST 

IF(STLESV) THEN 

DV(J)=DV(J-1)+DTB0ST(10-DV(J-1)) 

ENDIF 

IF(STGTSV) THEN 

DV(J)=DV(J-1)+DTB(10-DV(J-1))STCM 

ENDIF 

H=00 

IF(STGTSF) H=10-(SF/ST)GAM 

IF(STGTSV) THEN 

D(J)=D(J-1)+DTCCSTBTH 

ES(I)=ES(I)+BSTCMDT(10-DV(J-1)) 

ELSE 

D(J)=D(J-1)+DTCLSTBT2H 

ES(I)=ES(I)+B0STDT(10-DV(J-1)) 

ENDIF 

CR1=(10-DV(J))(10-D(J)) 

IF(CR1LTCR0ORD(J)GT05) THEN 

NS(I)=0 

TF(I)=(J-2)DT 

WRITE(,210) I,J,NS(I),DV(J),D(J),ES(I) 

GOTO 200 

ENDIF 

IF(ES(I)GTEV) THEN 

NS(I)=1 

TF(I)=(J-2)DT 

WRITE(,210) I,J,NS(I),DV(J),D(J),ES(I) 

GOTO 200 

ENDIF

300  CONTINUE

200  CONTINUE

210  FORMAT(1X,2(I7,1X),I3,1X,3(F63,1X)) 

OPEN(3,FILE='CREEPLIFE') 

WRITE(3,) ' SG CRLIFE CRSTYE'

c! CRSTYLE=0 NO OBVIOUS NECKLING

c! CRSTYLE=1 NECKING BEFORE FAIURE 

DO 500 I=1,100 

WRITE(3,400) SG(I), TF(I), NS(I), ES(I)

500  CONTINUE

400  FORMAT(2X,2(E125,2X),I2,1X,E125) 

CLOSE(3,STATUS='KEEP') 

END

答: 具体的两个错误已经用方框圈出来了

错误信息

第1个错误就是你少了一个右括号,或者说多了一个左括号,实际上在我们用程序写一个表达式的时候,特别容易出这个错误,因为太多括号了容易丢,所以这个时候你去检查一下就行,这个不算很难,另外其实有些编译器当你打括号的时候都会自动补全另一半,所以也不容易出现这样的错误了;第2个错误根据他的英文提示,同时看我的第2个方框框出来的,他的意思是PI没有定义为一个函数或者变量,我感觉你本来是想把PI定义成那个圆周率的常量,对吧?那如果是常量的话,PI和后面的东西相乘时要加一个,即变成PI(1-e(-30)),不然的话,PI就会被误以为成一个函数,后面的是它的参数。总的来说,英文的错误提示已经非常详细了,这也告诉我们以后要通过这个错误来进行分析,授人以鱼,不如授人以渔,希望帮助到你。

数据溢出了,整型变量的的范围在-2^31~2^31-1,即-2147483648~2147473647之间,当计算到2的31次方时,数据大于2147473647,被自动设置为-2147483648,因此出错,将变量sum换为实型或者双精度型可解决。

代码修改为:

program found

implicit none

integer::n

real::sum

do n=0,63

sum=sum+20n

print,n,sum

end do

end program

调用子程序RDDATA时,实参和形参的不匹配。

有可能是与形参的数量或顺序不匹配。

请检查一下被调用的子程序RDDATA的代码,将call语句调用时的实参与该子程序形参的数量、类型、顺序做一个检查、对比,找出问题所在。

以上就是关于我在用fortran编程调试程序的时候有一个错误不知道怎么改,希望有高手可以帮忙!全部的内容,包括:我在用fortran编程调试程序的时候有一个错误不知道怎么改,希望有高手可以帮忙!、fortran程序总是出现四个错误,求大神帮忙看看哪里出错啦,拜托拜托、焊接子程序FORTRAN语言出错:This name has not been declared as an array or a function. [PI]等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10082441.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存