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

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.

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.

FORTRAN

int

INTEGER

( )

float

REAL

( )

double

DOUBLE PRECISION
REAL*8

123,-1,+1
12.3,-1.,-1.0E6,
1E-6
3.141592654,
6.23D12

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

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 ( )

Iw

Fw.d

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

10

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

:
99The number pi is:93.14

7.
:
.TRUE. .FALSE.
( )
( ).
FORTRAN
C.
FORTRAN
C

.EQ.
==

.NE.
!=

.GT.
>

.LT.
<

.GE.
>=

.LE.
<=

FORTRAN
C.
FORTRAN
C

.NOT.
!

.AND.
&&

.OR.
||

.. (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

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

9. DO
:

DO s = 1, 2, 3

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.
:

10

200

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

T ( ) 1,2,3

DO 200 K=10,2,-1
Y = 2.0*K
T ( ) 20,18,...,4
WRITE(6,*) Y
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)

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
1
1
2
2
4
3
3
6
9
4
4
8 12 16
5
5 10 15 20
6
6 12 18 24
7
7 14 21 28
8
8 16 24 32
9
9 18 27 36

25
30
35
40
45

36
42
48
54

49
56
63

64
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

30

50
40

60

70

80

STILI(I) = 0.
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)
CONTINUE
CONTINUE
DO 60 I=1,4
WRITE(*,*) (A(I,J), J=1,4)
CONTINUE
WRITE(*,*)
DO 70 I=1,4
WRITE(*,*) ,I, :, GRAMMI(I)
CONTINUE
DO 80 I=1,4
WRITE(*,*) ,I, :, STILI(I)
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
-2
-0.5
1
0.5

0
2
1

1
-1
0

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

10
12

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

2 ( ): n
k (n k) 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

10

INTEGER RESPON
RESPON = 1
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

C
C
C
C

SUBROUTINE PLOTW(FX,AX,BX,NINT)
PLOTW FX
NINT+1 [AX,BX]
X FX(X)
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

ABS(X)


, -11
0 .



IABS
ABS
DABS

1
1
1

I
R
DP

I
R
DP

1
1
1
1
1
1
1
1

R
DP
R
DP
R
DP
R
DP

R
DP
R
DP
R
DP
R
DP

ASIN(X)

, -11
/2 /2 .

ACOS
DACOS
AINT
DINT
ANINT
DNINT
ASIN
DASIN

ATAN(X)

.
/2 /2 .

ATAN
DATAN

1
1

R
DP

R
DP

COS(X)

( rad).

COSH(X)

DBLE(X)

COS
DCOS
COSH
DCOSH
-

1
1
1
1
1
1
1

R
DP
R
DP
I
R
DP

R
DP
R
DP
DP
DP
DP

EXP(X)

ex

FLOAT(X)

EXP
DEXP
-

1
1
1
1

R
DP
I
R

R
DP
R
R

ACOS(X)
AINT(X)
ANINT(X)

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

INT
INT
IDINT

1
1
1

I
R
DP

I
I
I

ALOG
DLOG
ALOG10
DLOG10
MAX0
AMAX1
DMAX1

1
1
1
1
2
2
2

R
DP
R
DP
I
R
DP

R
DP
R
DP
I
R
DP

X1,,Xn.

MIN0
AMIN1
DMIN1

2
2
2

I
R
DP

I
R
DP

MOD(X,Y)

(/)*

MOD
AMOD
DMOD

2
2
2

I
R
DP

I
R
DP

NINT(X)

NINT
IDNINT

1
1

R
DP

I
I

REAL(X)

SNGL

1
1
1

I
R
DP

R
R
R

SIGN(X,Y)

ABS(X) Y 0
-ABS(X) Y 0.

ISIGN
SIGN
DSIGN

2
2
2

I
R
DP

I
R
DP

SIN(X)

H ( rad).

SQRT(X)

SINH(X)

SIN
DSIN
SQRT
DSQRT
SINH
DSINH

1
1
1
1
1
1

R
DP
R
DP
R
DP

R
DP
R
DP
R
DP

INT(X)

LOG(X)

e.

LOG10(X)

10.

MAX(X1,,Xn)

X1,,Xn.

MIN(X1,,Xn)

23

TAN(X)

( rad).

TANH(X)

TAN
DTAN
TANH
DTANH

24

1
1
1
1

R
DP
R
DP

R
DP
R
DP

You might also like