變數使用註標時,將註標括在括弧中,列在其名稱之後。 例如,一班各個學生的成績用陣列 SCORE 表示,則其中第三位學生的成績可用 SCORE(3) 表示。 註標可以是整常數,整變數或陳式 (expression)。
使用陣列之前,必須宣告陣列的大小,即註標的最大值。
宣告陣列用 DIMENSION 敘述,其形式如下
DIMENSION a1(l1:u1), ... an(ln:un)
式中 li, ui 為整常數, li 表示 註標的最小值,而 ui 表示最大值。 假如 li 為 1, 則 li: 可省略。
例如,假設全班人數有50人,則陣列 SCORE 應宣告如
DIMENSION SCORE(1:50) REAL SCORE
或 DIMENSION SCORE(50) REAL SCORE
也可簡略為
REAL SCORE(1:50)
或 REAL SCORE(50)
INTEGER LIMIT PARAMETER(LIMIT = 50) REAL SCORE(LIMIT) INTEGER I DO 10 I = 1, LIMIT READ *, SCORE(I) 10 CONTINUE
例題: VLIST1(List of Velocities -- version 1) (source)
READ *, SCORE
例題: VLIST2(List of Velocities -- version 2) (source)
READ *, ( SCORE(I = 1, LIMIT) )
注意,IO 串列要括在括弧中。
例題 : VLIST3(List of Velocities -- version 3) (source)
例如,
DO 10 I = 1, 30 NUMBER(I) = I ** 2 10 CONTINUE
陣列的初值可使用 DATA 敘述,在編譯階段予以指定。
例如,
REAL ALPHA(10) DATA ALPHA /5*0.0, 4*2.5, 3.8/
隱式 DO 迴圈也可用於 DATA 敘述的變數串列。例如,
INTEGER N, I REAL ALPHA(10) DATA N, (ALPHA(I), I=3, 7) /10, 5*0.0/
例如,
INTEGER LIMIT PARAMETER (LIMIT = 50) REAL ITEM(LIMIT), MEAN INTEGER NUM, I PRINT *, 'ENTER NUMBER OF ITEMS AND THE ITEMS' READ *, NUM, (ITEM(I), I = 1, NUM) PRINT 100, NUM, MEAN(ITEM, NUM) <-- ITEM 是實際引數 100 FORMAT(1X, 'MEAN OF THE ', I3, ' NUMBERS IS ', F6.2) END FUNCTION MEAN(X, N) <-- X 是形式引數 INTEGER XLIMIT PARAMETER (XLIMIT = 50) REAL MEAN, X(XLIMIT), SUM INTEGER N, I SUM = 0 DO 10 I = 1, N SUM = SUM + X(I) 10 CONTINUE MEAN = SUM / REAL(N) END
例題: Calculating the mean of a list
REAL A(5) COMMON A
而在另一程式單元中用
REAL ALPHA(5) COMMON ALPHA
COMMON 敘述分配共用區的前五個位置,給陣列 A 和 ALPHA。 換句話說,陣列名稱不同, 但是記憶位置同。
採用直角座標制時, 平面上的向量 a 可用在 x 和 y 座標軸的分量(component) (ax ay)表示。 一般的多維向量可用 (a1, a2, ... , an) 表示, ai 表示在 i 座標軸的分量。 FORTRAN 處理向量時, 可用一維陣列表示。
量值的計算 FUNCTION NORM(A, ARRDIM, N) INTEGER ARRDIM, N, I REAL NORM, SUM, A(ARRDIM) SUM = 0.0 DO 10 I = 1, N SUM = SUM + A(I)**2 10 CONTINUE NORM = SQRT(SUM) END 向量的加減 SUBROUTINE VECSUM(A, B, ARRDIM, N, C) INTEGER ARRDIM, N, I REAL A(ARRDIM), B(ARRDIM), C(ARRDIM) DO 10 I = 1, N C(I) = A(I) + B(I) 10 CONTINUE END
兩向量 A 和 B 相加, 和向量為 C。 兩向量相減, 將上述副程式中 + 號改為 - 號即可。 略為修改上述副程式, 也可處理純量和向量相乘。
例題: simple selection sort
SORTER
(source)
FORTRAN 90 特色
A = (/ 1,2,3,4,5,6,7,8.9.10/ ) A = (/ I, I = 1, 10 /) A = (/ 1, (I, I = 2, 9), 10 /)
A = A + B D = 2 * ABS(B) + 1 P = (C > 0) .AND. (MOD(B, 3) = 0)