周先生 发表于 2019-11-9 13:48:25

在循环语句中分别计算上千次,需要将数据输出到文本文...

请问大神们,怎样把计算数据直接输出到文本或指定文件。

li913 发表于 2019-11-9 15:43:48

看书,文件操作部分。
program test
open(10,file='out.txt')
do i=1,n
write(10,*) i
end do
close(10)
end program

周先生 发表于 2019-11-9 17:02:30

li913 发表于 2019-11-9 15:43
看书,文件操作部分。
program test
open(10,file='out.txt')

前辈你好,如果将你所回答的输出为文件的代码正确加入具体程序在怎么加,下面是我具体程序;如能帮助,大恩大德,没齿难忘。
IMPLICIT NONE
      REAL*8 N1,N2,MU1,MU2,EPS1,EPS2
      REAL*8 ETA1,ETA2,C11,C12,C21,C22
      REAL*8 LAM,D,PI,C,OME
      REAL*8 K1,K2
      REAL*8 R,T,A
      COMPLEX*16 i,B11,B12,B21,B22,T11,T12,T21,T22
      PARAMETER(PI=3.14159D0)
      PARAMETER(C=3.99792D8)
      N1=1.00D0
      N2=1.50D0
      MU1=1.00D0
      MU2=1.00D0
      i=(0,1)
      EPS1=(N1)**2
      EPS2=(N2)**2
      ETA1=DSQRT(EPS1/MU1)*N1
      ETA2=DSQRT(EPS2/MU2)*N2
      C11=(ETA1+ETA2)/(2*ETA1)
      C12=(ETA1-ETA2)/(2*ETA1)
      C21=(ETA1-ETA2)/(2*ETA1)
      C22=(ETA1+ETA2)/(2*ETA1)
      LAM=3.00D-7
      DO LAM = 3.00D-7,12.00D-7,0.01D-7
                D=2.00D-7
          OME=2*PI*C/LAM
                K1=(OME*N1)/C
                K2=(OME*N2)/C
                B11=CDEXP(i*K1*D)*DEXP(-K2*D)
                B12=(0,0)
                B21=(0,0)
                B22=CDEXP(-i*K1*D)*DEXP(K2*D)
                T11=C11*B11+C12*B21
                T12=C11*B12+C12*B22
                T21=C21*B11+C22*B21
                T22=C21*B12+C22*B22
                R=(CDABS(-T12/T22))**2
                T=(CDABS(T11-(T12*T21)/T22))**2
                A=1-R-T
      WRITE(*,100)R,T,A
100      FORMAT(1X,F8.3,2X,F8.3,2X,F8.3)
      END DO
      WRITE(*,*)'FINISH'
      END

周先生 发表于 2019-11-9 17:03:54

li913 发表于 2019-11-9 15:43
看书,文件操作部分。
program test
open(10,file='out.txt')


我是FORTRAN77,书上的我看了试不成功。

fcode 发表于 2019-11-10 10:35:44

注意 !/////======= 注释的行
IMPLICIT NONE
      REAL*8 N1,N2,MU1,MU2,EPS1,EPS2
      REAL*8 ETA1,ETA2,C11,C12,C21,C22
      REAL*8 LAM,D,PI,C,OME
      REAL*8 K1,K2
      REAL*8 R,T,A
      COMPLEX*16 i,B11,B12,B21,B22,T11,T12,T21,T22
      PARAMETER(PI=3.14159D0)
      PARAMETER(C=3.99792D8)
      N1=1.00D0
      N2=1.50D0
      MU1=1.00D0
      MU2=1.00D0
      i=(0,1)
      EPS1=(N1)**2
      EPS2=(N2)**2
      ETA1=DSQRT(EPS1/MU1)*N1
      ETA2=DSQRT(EPS2/MU2)*N2
      C11=(ETA1+ETA2)/(2*ETA1)
      C12=(ETA1-ETA2)/(2*ETA1)
      C21=(ETA1-ETA2)/(2*ETA1)
      C22=(ETA1+ETA2)/(2*ETA1)
      LAM=3.00D-7
      open(12,file='out.txt')!/////=======
      DO LAM = 3.00D-7,12.00D-7,0.01D-7
                D=2.00D-7
          OME=2*PI*C/LAM
                K1=(OME*N1)/C
                K2=(OME*N2)/C
                B11=CDEXP(i*K1*D)*DEXP(-K2*D)
                B12=(0,0)
                B21=(0,0)
                B22=CDEXP(-i*K1*D)*DEXP(K2*D)
                T11=C11*B11+C12*B21
                T12=C11*B12+C12*B22
                T21=C21*B11+C22*B21
                T22=C21*B12+C22*B22
                R=(CDABS(-T12/T22))**2
                T=(CDABS(T11-(T12*T21)/T22))**2
                A=1-R-T
      WRITE(12,100)R,T,A !/////=======
100      FORMAT(1X,F8.3,2X,F8.3,2X,F8.3)
      END DO
      close(12) !/////=======
      WRITE(*,*)'FINISH'
      END

周先生 发表于 2019-11-10 12:54:00

fcode 发表于 2019-11-10 10:35
注意 !/////======= 注释的行
IMPLICIT NONE
      REAL*8 N1,N2,MU1,MU2,EP ...

感谢前辈。我改试了,加了一行在屏幕输出,发现屏幕输出结果与输出文本中的数据不一致(一共输出三列数据,第一列R一样,到第二三列的T,A不一样)这是什么原因,怎么修改?

fcode 发表于 2019-11-10 13:06:10

给出你修改后的代码

周先生 发表于 2019-11-10 15:40:52

fcode 发表于 2019-11-10 13:06
给出你修改后的代码
就加了一行屏幕输出,屏幕输出和文本居然不一样
IMPLICIT NONE
      REAL*8 N1,N2,MU1,MU2,EPS1,EPS2
      REAL*8 ETA1,ETA2,C11,C12,C21,C22
      REAL*8 LAM,D,PI,C,OME
      REAL*8 K1,K2
      REAL*8 R,T,A
      COMPLEX*16 i,B11,B12,B21,B22,T11,T12,T21,T22
      PARAMETER(PI=3.14159D0)
      PARAMETER(C=3.99792D8)
      N1=1.00D0
      N2=1.50D0
      MU1=1.00D0
      MU2=1.00D0
      i=(0,1)
      EPS1=(N1)**2
      EPS2=(N2)**2
      ETA1=DSQRT(EPS1/MU1)*N1
      ETA2=DSQRT(EPS2/MU2)*N2
      C11=(ETA1+ETA2)/(2*ETA1)
      C12=(ETA1-ETA2)/(2*ETA1)
      C21=(ETA1-ETA2)/(2*ETA1)
      C22=(ETA1+ETA2)/(2*ETA1)
      LAM=3.00D-7
      OPEN(12,FILE='out.txt')
      DO LAM = 3.00D-7,12.00D-7,0.01D-7
                D=2.00D-7
          OME=2*PI*C/LAM
                K1=(OME*N1)/C
                K2=(OME*N2)/C
                B11=CDEXP(i*K1*D)*DEXP(-K2*D)
                B12=(0,0)
                B21=(0,0)
                B22=CDEXP(-i*K1*D)*DEXP(K2*D)
                T11=C11*B11+C12*B21
                T12=C11*B12+C12*B22
                T21=C21*B11+C22*B21
                T22=C21*B12+C22*B22
                R=(CDABS(-T12/T22))**2
                T=(CDABS(T11-(T12*T21)/T22))**2
                A=1-R-T
      WRITE(*,100)R,T,A
      WRITE(12,100)R,T,A
100      FORMAT(1X,F8.3,2X,F8.3,2X,F8.3)
      END DO
      CLOSE(12)
      WRITE(*,*)'FINISH'
      END

fcode 发表于 2019-11-10 17:15:55

我试了一下,是一样的。
如果你的不一样,可否告知你的屏幕输出和文件输出分别是什么?
(以最后十行为例)

在我这里,最后十行内容为:
    0.148   0.081   0.771
    0.148   0.081   0.771
    0.148   0.081   0.771
    0.148   0.081   0.771
    0.148   0.082   0.771
    0.148   0.082   0.770
    0.148   0.082   0.770
    0.148   0.082   0.770
    0.148   0.082   0.770
    0.148   0.083   0.769

周先生 发表于 2019-11-10 17:56:10

fcode 发表于 2019-11-10 17:15
我试了一下,是一样的。
如果你的不一样,可否告知你的屏幕输出和文件输出分别是什么?
(以最后十行为例) ...

后面部分的确是相同的,但是开始部分不一样
屏幕上是
0.148   0.0290.823
文本是
0.148   0.0000.852
页: [1] 2
查看完整版本: 在循环语句中分别计算上千次,需要将数据输出到文本文...