当前位置:网站首页>FORTRAN77从文件中读入若干数据并用heron迭代公式开方

FORTRAN77从文件中读入若干数据并用heron迭代公式开方

2020-11-08 01:33:00 wangxuwei

要求做到:

1.不限制数据个数,自动计数并打印序号

2.遇到负数时,跳过开方,直接打印并标记

3.遇到0.0,程序停止

Heron迭代方法。

  1. 初始化 (X0 = A);(x1 =1/2*{x0+A/ x0});
  2. 计算 (Delta_k = |x1 - x0|;
  3. (Delta_k < epsilon),返回(x),算法结束;
  4. (x1 =1/2*{x0+A/ x0});
  5. 返回第2步;
C
C   heronus1.f
C
C Unlimited number of data, automatic counting and printing serial number
C When negative numbers are encountered,skip square root, print them directly and mark them
C Encountered 0.0, the program stopped

      PROGRAM heronus1
      EPS=.1 E-4
      I=0
      OPEN(11,file='fheronus.dat')
   10 READ(11,*)A
      I=I+1
      IF (A) 1,2,30
   1  WRITE(6,100) I,A
  100 FORMAT(1X, I6,10X,F10.6,'	NEGATIVE NUMBER')
      GO TO 10
   2  STOP 'END OF JOB'
   30 X0=A
   20 X1=.5*(X0+A/X0)
      IF (ABS(X1-X0).LT.EPS) GO TO 40       
      X0=X1
      GO TO 20
   40 WRITE(6,110) I,A,X1
  110 FORMAT(1X, I6,2F10.6)
   3  CONTINUE
      GO TO 10
      END

数据要以行来分割,而不是空格,并用0.0结束:

$ cat fheronus.dat 
1
2
3
4
5
6
7
8
9
10
11
12
12
13
13
14
16
21
22
13
25
22
13
21
52
32
-23
121
12
0.0

运行:

$ f77 heronus1.f
$ a.out 
      1  1.000000  1.000000
      2  2.000000  1.414214
      3  3.000000  1.732051
      4  4.000000  2.000000
      5  5.000000  2.236068
      6  6.000000  2.449490
      7  7.000000  2.645751
      8  8.000000  2.828427
      9  9.000000  3.000000
     10 10.000000  3.162278
     11 11.000000  3.316625
     12 12.000000  3.464102
     13 12.000000  3.464102
     14 13.000000  3.605551
     15 13.000000  3.605551
     16 14.000000  3.741657
     17 16.000000  4.000000
     18 21.000000  4.582576
     19 22.000000  4.690416
     20 13.000000  3.605551
     21 25.000000  5.000000
     22 22.000000  4.690416
     23 13.000000  3.605551
     24 21.000000  4.582576
     25 52.000000  7.211102
     26 32.000000  5.656854
     27          -23.000000	NEGATIVE NUMBER
     28121.000000 11.000000
     29 12.000000  3.464102
STOP END OF JOB

ubutnu18.04下gfortran-10编译通过(vax780的f77也测试过)

版权声明
本文为[wangxuwei]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/2245781/blog/4707791