配合 Numerical Recipe 書的其他 Fortran 指令

 

parameter

將己經宣告了數值型態(如 real 或 integer)的某個變數,設定給它一個固定的常數值,在整個程式內這個值都不會再被變更。

parameter 常用於宣告陣列時的維度定義之用,比方說,通用副程式�埵頂搨n用到一個 A 的陣列,它在這個副程式中是宣告成 A(NMAX),其中 NMAX 當然是因應不同之問題所需有不同大小,而通用副程式我們使用的時候應該是不必改寫它的。但是,宣告總是要預留記憶體內的位置,因此要用實際的值而不是只講一個代號 NMAX。怎麼辦呢?解決的方案是,在主程式中對於 NMAX 除了宣告數值型態 integer 之外,再多用 parameter 指令把大小指定好。編譯器在連結副程式時,會知道 NMAX 已經定成多少的值,如此完成該有的記憶體保留工作,也就是達成 A(NMAX) 的宣告。如下例:

program param_demo
integer NMAX
parameter (NMAX=20)
real A(NMAX),B(NMAX)
call sub01(A,B,NMAX)
do i=1,NMAX
 write (*,*) A,B
end do
end

subroutine sub01(A,B,NMAX)
ingeter NMAX,i
real A(NMAX),B(NAMX)
do i=1,NMAX
  B(i)=A(i)**2
end do
end

 

function

定義函數(函式),它的作法有點像是副程式,允許使用者定義自己的函數(不必定義的那些,如 sin,則叫做內建函數),以定義實數函數 f(x) = 2x+1,其作法如下:

function f(x)
real f,x
f = 2*x+1
end

在用於程式中時,則像是下列這個樣子

program use_ext
real f,x
external f
write(*,*) 'Please give a real number x :'
read (*,*) x
if(f(x).gt.0.0) then
write(*,*) 'f(x) is positive.'
else
write(*,*) 'f(x) is negative.'
end if
end

這�媟|用到 external 是因為 f 本身不像 sin 是內建函數,但卻要以函數的方式用在這個程式中,因此是 "外部" 自行定義的函數。

 

extrenal

宣告引用一個已經在外部定義好了的函數在這個程式或副程式中使用,例子請見上一段。

 

common

主程式與副程式之間,以及副程式與副程式之間,通常是以呼叫時傳遞引數的方式來讓下層副程式用得到所需的變數。如果這樣的副程式及變數有很多,程式寫起來很麻煩,甚至通用、特用混在一起也容易出錯。

另一種方法是宣告公共區塊(common block), 其語法是 common /name_a/ x, y, z, 這�� name_a 是自定的公共區塊名,以 / / 包起來,後面 x,y,z 則是要陳列於公共區的變數(變數才可以放,以 parameter 設過的參數不可以放在 common block 中)。一個程式可以宣告好幾個 common block 來分類存放變數。