编辑代码

program main
LOGICAL QSWITCH INTEGER STEP OPEN(1, STATUS=' UNKNOWN', FILE=' DATFIL')
XNP=3.
DISPLACE=200.
THOM=1.
VM=3000. 
VT=1000.
RM1=0.
RM2=1000.
RT1=20000.
RT2=1000.
QSWITCH=. FALSE.
VT1=VT
VT2=0.
T=0.
S=0.
RTM1=RT1-RM1
RTM2=RT2-RM2
RTM=SQRT(RTM1**2+RTM2**2)
XLAM=ATAN2(RTM2, RTM1)
VM1=VM
VM2=0.
VTM1=VT1-VM1
VTM2=VT2-VM2
VC=-(RTM1* VTM1+RTM2* VTM2)/RTM 
TGO=RTM/VC 
H=.005
IF(VC<0.) GOTO 999
TGO=RTM/VC 
IF(TGO<.3)H=.00005
IF(TGO<=THOM.AND..NOT.QSWITCH) THEN 
    QSWITCH=.TRUE.
    RT2=RT2+DISPLACE 
ENDIF 
RT1OLD=RT1
RT2OLD=RT2
RM1OLD=RM1
RM2OLD=RM2
VM1OLD=VM1
VM2OLD=VM2
STEP=1
GOTO 200
STEP=2
RT1=RT1+H* VT1
RT2=RT2+H* VT2
RM1=RM1+H* VM1
RM2=RM2+H* VM2
VM1=VM1+H* AM1
VM2=VM2+H* AM2
T=T+H 
GOTO 200
CONTINUE 
RT1=.5*(RT1OLD+RT1+H*VT1)
RT2=.5*(RT2OLD+RT2+H*VT2)
RM1=.5*(RM1OLD+RM1+H*VM1)
RM2=.5*(RM2OLD+RM2+H*VM2)
VM1=.5*(VM1OLD+VM1+H*AM1)
VM2=.5*(VM2OLD+VM2+H*AM2)
S=S+H 
IF(S<.049999)GOTO 10
S=0
WRITE(*,97)T,RM1,RM2,RT1,RT2,XNC/32.2
WRITE(1,97)T,RM1,RM2,RT1,RT2,XNC/32.2
GOTO 10
FORMAT(6F10.3)
CONTINUE 
RTM1=RT1-RM1
RTM2=RT2-RM2
RTM=SQRT(RTM1**2+RTM2**2)
VTM1=VT1-VM1
VTM2=VT2-VM2
VC=-(RTM1*VTM1+RTM2*VTM2)/RTM 
XLAM=ATAN2(RTM2,RTM1)
XLAMD=(RTM1*VTM2-RTM2*VTM1)/(RTM*RTM)
XNC=XNP*VC*XLAMD 
AM1=-XNC*SIN(XLAM)
AM2=XNC*COS(XLAM)
IF(STEP-1)66,66,55
CONTINUE 
WRITE(*,*)T,RTM 
PAUSE 
CLOSE(1)
END

end