Download as pdf or txt
Download as pdf or txt
You are on page 1of 24

FORTRAN 77

. . , . . , . .

2002

...............................................................................................................3
1. ..........................................................................................................4
2. H ....................................................................4
2.1. .................................................................................5
3. ...................................................................................................5
3.1. - ....................................................5
3.2. ..........................................................................................5
3.3. ......................................................................................6
4. ................................................................................6
5. ........................................................................................7
6. ..........................................................................7
6.1. READ ............................................................................................7
6.2. WRITE...........................................................................................7
6.3. H FORMAT .....................................................................7
7. ........................................................................................8
8. H IF ....................................................................................9
9. DO.........................................................................10
9.1. (implied) DO ...................................................................11
10. " WHILE"..............................................................11
11. ...............................................................................13
12. - ..................................................................15
13. - ......................................................................17
13.1. (Intrinsic functions) .............................................17
13.2. (Statement functions) ...............................................17
13.3. .....................................................................................17
13.3.1. .......................................................17
13.3.2. To SUBROUTINE .......................................................18
13.4. H XTERNAL ................................................................................20
: .....................................................................22



. FORTRAN
.
,
, FORTRA.

.
,
.

, ,
, , C.

(, ...)
FORTRAN 77 .

http://www.star.le.ac.uk/~cgp/prof77.ps
http://www.kcl.ac.uk/kis/support/cit/fortran/f77book.pdf

3
1.
FORTRAN (FORmula TRANslation) 1950.
FORTRAN ,
. ,
(.. ), FORTRAN
. , FORTRAN
( !).
, ,

.
compilers
.
FORTRAN
.
- FORTRAN,
.
,
FORTRAN 77.

2. H
FORTRAN ASCII
:
.
7 72.
72
( 0)
6 .
C * 1 .

(label), .
1 5 (
5 .)
compiler (
CHARACTER).
H PROGRAM .
STOP . END
compiler.
STOP, END.

4
2.1.
C234567
PROGRAM FIRST
C
INTEGER I
DO 10 I = 1,3
WRITE(*,*) Hello World
10 CONTINUE
* Hello World 3
STOP
END

3.
3.1. -
:
A,,Z 0,...,9.
.
( standard FORTRAN 77) 6
. ( compilers 31
,
).
. compiler
.
(..
FORTRAN).

:
: GEORGE, A3, PROD, sum_1, SINUS, IWRITE
: A$3, sum-1, SIN, WRITE, 3a, 1WRITE

:
0 , 1 .

3.2.
FORTRAN
C.


C FORTRAN

int INTEGER 123,-1,+1

12.3,-1.,-1.0E6,
float REAL
( ) 1E-6

DOUBLE PRECISION 3.141592654,


double
( ) REAL*8 6.23D12

5
- COMPLEX (0.,1.)

int LOGICAL .TRUE. , .FALSE.

char CHARACTER DONALD KNUTH

3.3.
, o
compiler
. C,
:
AH, OZ.
I,J,K,L,M,N.

INTEGER I, SUM
REAL SINUS,X1,X2
LOGICAL FLAG
DOUBLE PRECISION PI

4.
+, -,
*, /, **. .. A+B-C, A*(-B),
A*B/C, Z**I.
:

) ( ).
) .
) .
) .

:

.
.
. (.. 10/3
3).
,
compiler
. (.. 3.0*1/3 3.0*1.0/3 3.0*1.0/3.0 1.0).

:
A*B-C/D : (A*B)-(C/D)
A/B*C : (A/B)*C

6
5.
FORTRAN
=
.

.. RES = B + C*D**3 RES = B + C D3 .

.

.
..
B = 9 B 9.0.
= 1.9 1

6.
,
.
, .. .
.

6.1. READ
: READ(a,b) 1, 2, ...
a .
a=5 a=*.
b=* .
b , FORMAT
.

6.2. WRITE
: WRITE(a,b) 1,2, ...
a . a=6
a=*.
b=* .
b , FORMAT
.

6.3. H FORMAT
/
FORMAT :

FORMAT ( )

7

Iw
Fw.d
A

w d
(). ( w d + 3). nX n
( n ). FORMAT
READ WRITE,
FORMAT ( 1 5)
READ WRITE.

PI = 3.141593
WRITE(*,10) The number pi is:,PI
10 FORMAT(2X,A,F5.2)

99The number pi is:93.14

7.
: .TRUE. .FALSE.
( )
( ).

FORTRAN
C.

FORTRAN .EQ. .NE. .GT. .LT. .GE. .LE.


C == != > < >= <=

FORTRAN
C.

FORTRAN .NOT. .AND. .OR.


C ! && ||

.. (A .GE. B)
.

:
( )

:
.LE. B .AND. B .LE. C
( .LE. B) .AND. (B .LE. C)

8. H IF
:

IF ( )
( )
ENDIF

IF ( )
( )
ELSE
( )
ENDIF

IF (. . 1)
( 1 )
ELSE IF (. . 2)
( 2 )

ELSE IF (. . n)
( n )
ELSE
( 1,2,,n )
ENDIF

:
SIGNUM NUMBER (SIGNUM=1
NUMBER>0, SIGNUM=-1 NUMBER<0, SIGNUM=0 NUMBER=0)
:

IF (NUMBER .LT. 0)
SIGNUM = -1
ELSE IF (NUMBER .GT. 0)
SIGNUM = 1
ELSE
SIGNUM = 0
ENDIF

9
C :

if (number < 0){


signum = -1;
} else if (number > 0) {
signum = 1;
} else {
signum = 0;
}

9. DO
:

DO s = 1, 2, 3

s CONTINUE

:
1 , 2
, 3 . 3 .
1.
, :
= (INT((2 1 + 3)/3) , 0)
DO
.
:
o 1, 2 .
o 1 .
o > 0 DO.
CONTINUE:
o (3).
o 1.
o > 0 ,

CONTINUE.

DO 10 I=1,3
WRITE(*,*)I T ( ) 1,2,3
10 CONTINUE

DO 200 K=10,2,-1
Y = 2.0*K T ( ) 20,18,...,4
WRITE(6,*) Y
200 CONTINUE

10
PI = 3.141593
DO 19 KAPPA=3,9,3
RES = COS(KAPPA*PI) T -1,1,-1
WRITE(*,*) RES
19 CONTINUE

C :

pi = 3.141593;
for (kappa = 3; kappa <= 9; kappa + = 3) {
res = cos(kappa*pi);
printf(%f\n,res);
}

9.1. (implied) DO
:

/, ( = 1,2,3)

DO, 1 ,
2 , 3 . 3 .
1.

:
WRITE(*,*) (I*I, I=1,3) T
1 4 9

10. " WHILE"


C while:

while ( ) {
()
}

FORTRAN 77
while :

s IF ( ) THEN
()
GOTO s
ENDIF

11
1: FORTRAN
a b

C234567
PROGRAM SUMAB
C a b.
INTEGER A, B, SUM, I
WRITE(*,*) ' : '
READ(*,*) A, B
SUM = 0
IF (A .LT. B) THEN
DO 10 I= A,B
SUM = SUM + I
10 CONTINUE
ELSE
DO 20 I = A, B,-1
SUM = SUM + I
20 CONTINUE
ENDIF
WRITE(*,*) ' : ',SUM
STOP
END

2: FORTRAN
1 + 1/2 + 1/3 + 1/4 + ,
= 0.005

*234567
PROGRAM SEIRA
REAL SUM,OROS,EPSLON
INTEGER COUNT
EPSLON = 5.E-3
OROS = 1.
COUNT = 1
SUM = 0. 10
10 IF (OROS .GE. EPSLON) THEN
SUM = SUM + OROS
COUNT = COUNT + 1
OROS = 1./FLOAT(COUNT)
GOTO 10
ENDIF
WRITE(*,*) ' = ', SUM,' = ',COUNT-1
STOP
END

12
3:
:
0 1 2 3 4 5 6 7 8 9
1 1
2 2 4
3 3 6 9
4 4 8 12 16
5 5 10 15 20 25
6 6 12 18 24 30 36
7 7 14 21 28 35 42 49
8 8 16 24 32 40 48 56 64
9 9 18 27 36 45 54 63 72 81

*234567
PROGRAM MMATR
c .
INTEGER I, J
WRITE(*,*) (I, I=0,9)
DO 10 I = 1,9
WRITE(*,*) I, (I*J,J=1,I)
10 CONTINUE
STOP
END

11.
(array)
.
, .

(l1:u1,l2:u2,,ln:un)

, li
i (i =1,2, ,n) ui
i (i =1,2, ,n).
li 1.

1:
REAL A(4) 1, 2, 3, 4.
DIMENSION A(4) 1, 2, 3, 4.
REAL (3,0:3) 12 X10, X20, X30, X11, X21, X31,
X12, X22, X32, X13, X23, X33
.

.

13
2:
FORTRAN R3
.

C234567
PROGRAM INPROD
REAL A(3), B(3)
INTEGER I
REAL ES_GIN
WRITE(*,*) :
DO 10 = 1,3
READ(*,*) A(I)
10 CONTINUE
WRITE(*,*) :
DO 20 I = 1,3
READ(*,*) B(I)
20 CONTINUE
ES_GIN = 0.
DO 30 I = 1,3
ES_GIN = ES_GIN + A(I)*B(I)
30 CONTINUE
WRITE(*,*) A = (,(A(I), I=1,3), )
WRITE(*,*) B = (,(B(I), I=1,3), )
WRITE(*,*) . : ,ES_GIN
STOP
END

3: 44
, .

C234567
PROGRAM M ATR
REAL A(4,4)
INTEGER I, J
REAL SUM
C STILI GRAMMI
C .
REAL STILI(4),GRAMMI(4)
DO 10 I=1,4
DO 20 J=1,4
WRITE(*,*) (,I,,,J,)=
READ(*,*) A(I,J)
20 CONTINUE
10 CONTINUE
DO 30 I=1,4
GRAMMI(I) = 0.

14
STILI(I) = 0.
30 CONTINUE
SUM = 0.
DO 40 I=1,4
DO 50 J=1,4
GRAMMI(I) = GRAMMI(I) + A(I,J)
STILI(I) = STILI(I) + A(J,I)
SUM = SUM + A(I,J)
50 CONTINUE
40 CONTINUE
DO 60 I=1,4
WRITE(*,*) (A(I,J), J=1,4)
60 CONTINUE
WRITE(*,*)
DO 70 I=1,4
WRITE(*,*) ,I, :, GRAMMI(I)
70 CONTINUE
DO 80 I=1,4
WRITE(*,*) ,I, :, STILI(I)
80 CONTINUE
WRITE(*,*) ,SUM
STOP
END

12. -

,
,
.
,

.
/
/ a (. READ, WRITE). H
.

:
O(a, FILE='arxeio')


a CLOSE.

:
CLOSE(a)

15
a 5 6,
, (
READ,WRITE.)

: ,
CLOSE. ,
.

: FORTRAN
input.dat n, (nn) (n1) ,
output.dat

C234567
PROGRAM MATVEC
REAL A(30,30), X(30), S
OPEN(1,FILE=input.dat)
READ(1,*) N
DO 10 I=1,N
READ(1,*) (A(I,J), J=1,N)
10 CONTINUE
READ(1,*) (X(I), I=1,N)
CLOSE(1)
OPEN(2,FILE=output.dat)
WRITE(2,*) :
DO 20 I=1,N
S=0.0
DO 30 J=1,N
S = S + A(I,J)*X(J)
30 CONTINUE
WRITE(2,*) S
20 CONTINUE
STOP
END

T input.dat .. :

3
1 0 1
0 2 -1
-2 1 0
-0.5
1
0.5

16
1 0 1 0.5

n=3, A = 0 2 1 B = 1 ,
2 1 0 0.5

output.dat

0
1.5
2

13. -
13.1. (Intrinsic functions)
FORTRAN
.
ABS(X), TAN(X), SIN(X), COS(X), EXP(X), LOG(X)(
e), MIN(X1,X2,...), MAX(X1,X2,...), INT(X), FLOAT(I), SQRT(X),
MOD(X,Y).
.
,
. .. SQRT(9). To
SQRT(9.0), SQRT .

.

13.2. (Statement functions)


(statement functions)
( )
.
.

. FORTRAN
,
.

:
F(X) = X*X + 3.0*X 2.0
D(,) = ABS(-)

13.3.
FORTRAN
.
: (functions)
(subroutines).

13.3.1.
,
.

17
:

[] FUNCTION (1, 2,, )


1, 2,,

=
RETURN ( RETURN )
END

13.3.2. To SUBROUTINE
SUBROUTINE
:
) ,
.
, , ..
.
) ,
.
) ,
CALL.
:

SUBROUTINE (1, 1,, )


1, 1,,



RETURN
END

:
CALL (1, 1,, )

1 ( ):
F(X), G(X), Xi,
i=0,1,,100, [0,2].
result.dat .

C234567
PROGRAM SYNART
F(X) = COS(X) + SIN(X)
G(X) = X**2 - 3.0*x + 2.
REAL X,H,TMP
INTEGER I
H = 2./100.

18
OPEN(1,FILE=result.dat)
DO 10 I=0,100
X = H*I
TMP = F(X)*G(X)
WRITE(1,12) X, , TMP
10 CONTINUE
CLOSE(1)
12 FORMAT(F10.5,A,F10.5)
STOP
END

2 ( ): n
k (n k) n
n n!
k : = .
k k!(n k )!

C234567
PROGRAM COMB
INTEGER K,N,RES,FACTOR
WRITE(*,*) K N <=
IF (K .GT. N) THEN
WRITE(*,*)
STOP
ENDIF
RES = FACTOR(N)/(FACTOR(K)*FACTOR(N-K))
WRITE(*,*) n k :,RES
STOP
END

FUNCTION FACTOR(L)
* L!
INTEGER FACTOR,L,I
FACTOR = 1
DO 10 I=2,L
FACTOR = FACTOR * I
10 CONTINUE
RETURN
END

3 ():

. subroutine CONVER.

C234567
PROGRAM POLCAR
REAL RCOORD, TCOORD, XCOORD, YCOORD

19
INTEGER RESPON
RESPON = 1
10 IF (RESPON .EQ. 1) THEN
WRITE(*,*) / ( rad)
READ(*,*) RCOORD,TCOORD
CALL CONVER(RCOORD,TCOORD,XCOORD,YCOORD)
WRITE(*,*) /:
WRITE(*,*) XCOORD,YCOORD
WRITE(*,*)
WRITE(*,*) ;
WRITE(*,*) 1, 0
READ(*,*) RESPON
GOTO 10
ENDIF
STOP
END

SUBROUTINE CONVER(R,THETA,X,Y)
REAL R,THETA,X,Y
X = R*COS(THETA)
Y = R*SIN(THETA)
RETURN
END

13.4. H XTERNAL
(-FUNCTION -SUBROUTINE)
,
EXTERNAL. :
EXTERNAL onoma1, onoma2,..., onoman
EXTERNAL .

:
f GRAPH.DAT,
x f(x), , n+1
. a, b,
n PLOTW
GRAPH.DAT .
PLOTW .

C234567
PROGRAM MYPLOT
C .
C .
EXTERNAL F
REAL A, B

20
INTEGER N
WRITE(*,*) a,b
READ(*,*) A, B
WRITE(*,*) o n
READ(*,*) N
C PLOTW
CALL PLOTW(F, A, B, N)
STOP
END

SUBROUTINE PLOTW(FX,AX,BX,NINT)
C PLOTW FX
C NINT+1 [AX,BX]
C X FX(X)
C GRAPH.DAT
EXTERNAL FX
REAL AX,BX,H,X
INTEGER NINT,I
OPEN(1, FILE='GRAPH.DAT')
H = ABS(BX-AX)/FLOAT(NINT)
X = AX
DO 10 I = 0, NINT
WRITE(1, *) X, FX(X)
X = X + H
10 CONTINUE
CLOSE(1)
RETURN
END

REAL FUNCTION F(X)


C F(X).
C , .
REAL X
F = SIN(X*X) + COS(X)**2
RETURN
END

21
:






IABS 1 I I
ABS(X) ABS 1 R R
DABS 1 DP DP
, -11 ACOS 1 R R
ACOS(X)
0 . DACOS 1 DP DP
AINT 1 R R
AINT(X)
DINT 1 DP DP
ANINT 1 R R
ANINT(X)
DNINT 1 DP DP
, -11 ASIN 1 R R
ASIN(X)
/2 /2 . DASIN 1 DP DP
. ATAN 1 R R
ATAN(X)
/2 /2 . DATAN 1 DP DP
COS 1 R R
COS(X) ( rad).
DCOS 1 DP DP
COSH 1 R R
COSH(X) .
DCOSH 1 DP DP
- 1 I DP
DBLE(X) . - 1 R DP
- 1 DP DP
EXP 1 R R
EXP(X) ex
DEXP 1 DP DP
- 1 I R
FLOAT(X)
- 1 R R

I = INTEGER, R = REAL, DP = DOUBLE PRECISION


INT 1 I I

INT(X) INT 1 R I
.
IDINT 1 DP I
ALOG 1 R R
LOG(X) e.
DLOG 1 DP DP
ALOG10 1 R R
LOG10(X) 10.
DLOG10 1 DP DP
MAX0 2 I I
MAX(X1,,Xn) X1,,Xn. AMAX1 2 R R
DMAX1 2 DP DP
MIN0 2 I I
MIN(X1,,Xn) X1,,Xn. AMIN1 2 R R
DMIN1 2 DP DP
MOD 2 I I
MOD(X,Y) (/)* AMOD 2 R R
DMOD 2 DP DP
NINT 1 R I
NINT(X)
IDNINT 1 DP I
- 1 I R
REAL(X) . - 1 R R
SNGL 1 DP R
ISIGN 2 I I
ABS(X) Y 0
SIGN(X,Y) SIGN 2 R R
-ABS(X) Y 0.
DSIGN 2 DP DP
SIN 1 R R
SIN(X) H ( rad).
DSIN 1 DP DP
SQRT 1 R R
SQRT(X) T
DSQRT 1 DP DP
SINH 1 R R
SINH(X) .
DSINH 1 DP DP

23
TAN 1 R R
TAN(X) ( rad).
DTAN 1 DP DP
TANH 1 R R
TANH(X) .
DTANH 1 DP DP

24

You might also like