如何學會程式語言FORTRAN

出自Dr. Liao Research Center

跳轉到: 導航, 搜尋

每年「計算機程式Fortran」第一次上課時,學生一定會反應:Fortran不是已經老掉牙的語言了,是以前的人才會使用的,現代人應該學C/C++。每當學生這樣問時,我總會回答:在工程和科學的應用上,Fortran還是最好的程式語言,它簡單易學,容易從事數學運算,比C來得高階。當你學會Fortran以後,其他語言就很容易學習了。Fortran是FORmula TRANslation的縮寫,是由IBM公司的John Backus所率領的一個十三人小組,從1953年開始發展,1957年才正式誕生的高階程式語言。經過多次的改進,目前通用的標準是Fortran 77。1991年新的Fortran語言標準發表,稱為Fortran 90,主要特色是加入物件導向的觀念及工具,加強了陣列的功能,使Fortran的功能增強許多。當然,若是你想學習的是控制電腦硬體運作,或是研究作業系統、發展商業軟體、介面程式,那你就必須學習C語言。但是我們想利用電腦來解決理論性的問題時,那Fortran就會是一個很好的語言。

如何學會Fortran程式設計?簡單歸納以下幾點:

一、安裝Fortran編譯器 所謂「工欲善其事,必先利其器」,要學好程式語言,當然你必須要有相關的編譯器(compiler),才能將你寫的原始程式(source program),編譯成電腦能執行的程式。在電腦教室中安裝的是Microsoft Fortran 5.1,是在MS-DOS模式下的Fortran Compiler,我們在課堂上就是利用它來跑(run) Fortran程式,同學應該都很熟悉了。此外,市面上較常用的還有Lahey Fortran Compiler, MS Fortran PowerStation, Visual Fortran 6.0, Watcom Fortran Compiler等。在自己的電腦安裝Fortran編譯器,是學習電腦的第一步。若是你還沒有電腦,那只好勤快的到電腦教室去上機了。

二、認識基本程式設計法

程式設計的目的是利用電腦幫我們解決問題,在整個過程中,我們分成四個步驟進行:

1. 問題的分析和說明:認清楚到底你要求解什麼問題?該輸入什麼資料?想得到什麼答案?充分瞭解你的問題,才能提出你的求解方法。

2. 演算法的建立:解決問題的方法,以文字敘述的方式,一步一步的描述稱為演算法(algorithm)。若將演算法以圖形來表示,則稱為流程圖(flow chart)。流程圖對於撰寫程式的初學者,有很大的幫助,它使一個人的思考系統化,不致遺漏某些情況。

3. 撰寫程式:將演算法或流程圖根據Fortran語法寫成程式。

4. 程式的執行和測試:將程式輸入電腦,進行編譯、執行,檢查run出來的結果是否無誤。

三、熟記Fortran基本語法

跟學習外國語言一樣,你要熟記單字、文法。程式語言你要知道關鍵字及規則,即所謂的語法(syntax)。你必須知道的基本語法有:

1. 資料的型別及宣告:整數、實數、倍精度、複數、文字、邏輯六種。

2. 算術、關係、邏輯運算子及運算式。

3. 控制結構:算術IF、邏輯IF、IF-THEN-ELSE-ENDIF、DO-ENDDO、 DO-WHILE-ENDDO等敘述。

4. 輸入與輸出:READ、WRITE、FORMAT、OPEN等敘述。

5. 陣列的宣告與用法。

6. 函數與副程式:庫存函數、敘述函數、FUNCTION副程式、SUBROUTINE副程式。

7. 其他FORTRAN敘述:IMPLICIT、DATA、GOTO、COMMON、EQUIVALENCE等。

詳細的語法在此不做說明。當然,最好你也要有使用者手冊(User Manual)或相關書籍,程式編譯有錯誤時可以查出錯誤原因,讓你的程式可以正確的執行。

四、時常上機練習

不管是書上的例題或是自己寫的程式,一定要上機練習。試著明瞭別人的程式,最好能將例題key in,然後編譯、執行。若能順利run出結果,再進一步研究程式的每一個敘述。若有錯誤(編譯器會指出哪裡有誤),更正再跑,一定要run出結果來。

我以一個實例來做說明:

問題:寫一程式找出一萬以內的質數。

分析:首先要知道什麼是質數?除了1及本身以外,沒有其他因數的數就是質數。其次要知道一個關於質數的定理:若N不能被質數2, 3, 5, …, p 整除,且P**2>N,則N是質數,否則N就不是質數。

想法:宣告一維整數陣列P來儲存質數,以一邏輯FUNCTION副程式PRIME的真或假,來判定某數N是否為質數。當然判斷的規則就是在分析時有關質數的定理,我們必須將它程式化。

程式說明:

INTEGER P(3000) !宣告整數陣列P,陣列大小依問題而定
 
LOGICAL PRIME !宣告邏輯變數PRIME
 
MAX=10000 !給定MAX之值,代表要找出MAX以內的質數
 
P(1)=2 !先設定2357 四個質數並存入P中
 
P(2)=3
 
P(3)=5
 
P(4)=7
 
NUMBER=4NUMBER代表質數個數,目前有四個
 
DO I=9,MAX,2DO迴圈:由9開始,直到MAX,每次增加2,
 
IF(PRIME(P,NUMBER,I)) THEN !開始找質數。判斷PRIME值(呼叫FUNCTION
 
NUMBER=NUMBER+1 !PRIME),若為真則質數個數加1,並存入P中。
 
P(NUMBER)=I !注意:已經排除所有偶數
 
ENDIF
 
ENDDO
 
WRITE(*,10) (P(I),I=1,NUMBER) !輸出所有質數
 
WRITE(*,20) NUMBER !輸出質數個數
 
10 FORMAT(3X,'Prime number under 10000 :'//(10I7))
 
20 FORMAT(/3X,'Total prime number found = ',I4)
 
END
 
LOGICAL FUNCTION PRIME(P,NUMBER,X) !宣告邏輯函數PRIME
 
INTEGER X,NUMBER,P(1:NUMBER)
 
DO I=1,NUMBER !開始檢查X是否是質數
 
IF(P(I)*P(I).GT.X) THEN !當P**2大於X時,X為質數
 
PRIME=.TRUE. !PRIME為真
 
RETURN !返回主程式
 
ELSE IF (MOD(X,P(I)).EQ.0) THEN !X能被P整除,則X為合成數
 
PRIME=.FALSE. !PRIME為假
 
RETURN !返回主程式
 
ENDIF
 
ENDDO
 
END

程式執行結果為:

Prime number under 10000 :
 
2 3 5 7 11 13 17 19 23 29 ………………………………9901 9907 9923 9929 9931 9941 9949 9967 9973
 
Total prime number found = 1229

由於總共有1229個質數,我只將輸出結果的首、尾幾列印出,在K7-500 PC上RUN不到1秒就已執行完畢。若題目改成找出一百萬以內的質數,則總共有78498個,最大的質數是999983,只要13秒就可得到結果。限於篇幅我就不再舉其他例子。現在,我已經將上課的相關講義及程式範例上網,網址為:http://cbliao.wre.fcu.edu.tw,有興趣的同學可上網參觀,程式範例也可直接下載練習。俗話說:有志者,事竟成,只要肯下功夫,一定可以學會Fortran程式語言。

個人工具
碩士班課程