FORTRAN 語言簡介 By 陳鯨太
Outline 語言簡介、編譯器簡介 Fortran 基本事項 輸出、輸入及宣告 格式化輸出 程式結構 流程控制 陣列 函式
Fortran 簡介 全名-Formula Translator IBM 1954 ~ 1957 第一個被廣泛使用的高階語言 演化
FORTRAN COMPILER 簡介1 Visual FORTRAN Microsoft Digital Compaq HP? Microsoft Visual Studio 完整的windows程式開發工具 可與Visual C++相互連結使用
FORTRAN COMPILER 簡介2 計中工作站 編譯方式 提供Fortran 90 及 Fortran 77 輸出至a.out f77 filename.for f90 filename.f90 輸出至指定檔案(sample) f77 filename.for -o sample f90 filename.for -o sample
FORTRAN COMPILER 簡介3 計中工作站之 Fortran 登入 只提供在 ccsun26~35 總數:2套 telnet ccsun27.cc.nctu.edu.tw 帳號:u9031XXX 密碼:預設值是身份証字號
FORTRAN 基本事項1 字元集 英文字母:A~Z (大小寫不分) 數字:0~9 特殊符號:冒號、等號、加、減、乘、除、底線 …etc
FORTRAN 基本事項2 程式碼寫作格式 Fixed Format Free Format Fortran 77 的舊格式 為了使用打孔卡而發明 詳細規定每個字元的“用法” Free Format Fortran 90之後的新格式 提供較大彈性
FORTRAN 基本事項3 Fixed Format 第1個字元 第1-5個字元 第6個字元 第7-72個字元 第73個字元之後 如果是字母c,C或*(星號),表示此行是註解 第1-5個字元 如果這邊是數字,表示這一行的代號,否則應為空白 第6個字元 如果是0以外的字元,表示這一行程式會接續上一行 第7-72個字元 FORTRAN程式碼的寫作區域 第73個字元之後 不使用,超過部份會被忽略,有的編譯器會有錯誤訊息
FORTRAN 基本事項4 Free Format 不規定每一行第幾字元有什麼作用 驚嘆號 ! 後面文字是註解 每行可寫作132個字元 行號在每行程式最前面 一行程式碼的最後如果是符號&,代表下一行程式會和這一行連接。
FORTRAN 基本事項5 ! Free Format program main write(*,*) “hello” ! 列印出hello這個字 write(*,*) & “hello” wri& te(*,*) “hello” end
輸出1 program main write(*,*) “hello” stop end
輸出2 Write(*,*) 第一個參數:輸出的位置 第二個參數:輸出格式 相等寫法: WRITE(*,*) “HELLO” WRITE(UNIT=6, FMT=*) “HELLO”
輸出3 關於write(*,*) 自動換行 印出雙引號使用連續2個雙引號 FORTRAN 90 雙引號/單引號 WRITE(*,*) “ MY NAME IS “”CASTER””. ” FORTRAN 90 雙引號/單引號 FORTRAN 77 單引號
輸出4 PRINT 語法:PRINT *, ”輸出字串” 專門對螢幕輸出
結束程式 結束程式 Fortran 90 1, 2, 3 Fortran 77 1 END END PROGRAM END PROGRAM MAIN ! MAIN是主程式的名字 Fortran 90 1, 2, 3 Fortran 77 1
資料型態1 整數(integer) 宣告方式:integer a 內定範圍為2^32~ -2^32
資料型態2 浮點數 宣告方式:real a 或 real*4 a 單精確度 雙精確度:real*8 a 3.4*10^38 ~ -3.4*10^38 有效位數6~7位 雙精確度:real*8 a 1.79*10^308 有效位數15~16位
資料型態3 複數 宣告:complex a 使用:a=(x,y) !x為實部,y為虛部 program main complex a,b write(*,*) “a+b=”, a+b write(*,*) “a-b=”, a-b write(*,*) “a*b=”,a*b write(*,*) “a/b=”, a/b stop end
資料型態4 執行結果: a+b= (4.0,5.3) a-b= (-2.0,-3.3000001)
資料型態5 字元及字串 其它寫法 給予初始值 Character a !宣告字元 Character*10 a !宣告長度為10的字串 CHARACTER(LEN=10) CHARACTER*(10) 給予初始值 A=”字串內容”
輸入指令 輸入指令的基本語法如下: INTEGER A READ (*,*) A !讀入一個整數,並存到A內 READ(UNIT=5, FMT=*) A !同上
格式化輸出1 關於I WRITE(*,”(I5)”) 100 !用5個字元的欄位來輸出一個整數 OUTPUT : _ _ 1 0 0 !輸出五個字元欄位,至少輸出4位,不足補0 OUTPUT: _ 0 0 0 3
格式化輸出2 關於F 關於E WRITE(*,”(F9.3)”) 123.45 !輸出9個字元欄位,包括小數部份3個位數 OUTPUT: _ _ 1 2 3 . 4 5 0 關於E WRITE(*,”(E15.7)”) 123.45 !用科學計號表示法,輸出15個字元欄位,小數部份佔7位 OUTPUT : _ _ 0 . 1 2 3 4 5 0 0 E + 0 3
格式化輸出3 關於A WRITE (*,”(A10)”) “HELLO” !用10個字元寬度輸出字串 OUTPUT: _ _ _ _ _ H E L L O WRITE (*,”(A3)”) “HELLO” OUTPUT : H E L
格式化輸出4 關於B WRITE (*,”(B6.5)”) 3 !把3變成二進位輸出,字6個字元寬,至少輸出5位 OUTPUT : _ 0 0 0 1 1
格式化輸出5 關於X WRITE (*,”(3X)”) 20 !輸出前先填3個空白字元 OUTPUT: _ _ _ 2 0
變數名稱取名原則1 長度限制 不需宣告就能使用 FORTRAN 77 至少6 FORTRAN 90 至少31 第一個字母為I, J, K, L, M, N 整數 其它浮點數
變數名稱取名原則2 PROGRAM MAIN I=11+22 WRITE(*,*) “11+22=”, J STOP END 結果: 11+22=0
變數名稱取名原則3 關閉內定型態的功能 IMPLICIT NONE 每個變數必需事先宣告 位置:PROGRAM指令的下一行
常數的宣告 方式一 方式二 REAL PI PARAMETER(PI=3.14159) REAL, PARAMETER ::PI=3.14159
程式結構
FLOW CONTROL1 IF … THEN… ELSE語法: IF(邏輯判斷式) THEN 執行動作1 ELSE 執行動作2 END IF
FLOW CONTROL2 PROGRAM MAIN IMPLICIT NONE REAL HIEGHT REAL WEIGHT READ(*,*) HEIGHT READ(*,*) WEIGHT IF (WEIGHT > HEIGHT-100) THEN WRITE(*,*) “TOO FAT!” ELSE WRITE(*,*) “UNDER CONTROL” END IF STOP END
FLOW CONTROL3 邏輯運算式 = = 相等 / = 不相等 > 大於 > = 大於等於 < 小於 = = 相等 / = 不相等 > 大於 > = 大於等於 < 小於 < = 小於等於 .AND. 如果兩邊式子都成立,整個條件就成立 .OR. 兩邊的式子只要有一個成立,整個條件就成立 .NOT. 如果後面的式子不成立,整個式子就算成立 .EQV. 兩邊式子的邏輯運算結果相同時,整個式子就成立 .NEQV. 兩邊式子的邏輯運算結果不同時,整個式子就成立
FLOW CONTROL4 FORTRAN 77的邏輯運算式 .EQ. 等於 .NE. 不等於 .GT. 大於 .GE. 大於等於 .LT. 小於 .LE. 小於等於
FLOW CONTROL5 DO迴圈語法: 例: DO 起始值, 終止值, 累加值 執行程式碼 END DO DO I=10, 5, -1 WRITE(*,*) I
FLOW CONTROL6 結果: 10 9 8 7 6 5
FLOW CONTROL7 Do…while語法: DO WHILE (邏輯運算) 程式碼 END DO
陣列1 FORTRAN 90 陣列的宣告 FORTRAN 77 陣列的宣告 注意!!index值從1開始算起!! integer a(10) !宣告a這個陣列有10個元素 integer , dimension(10) :: a ! 同上,另一種作法 FORTRAN 77 陣列的宣告 integer a dimension a(10) 注意!!index值從1開始算起!!
陣列2 使用陣列 a(1)=18 INTEGER A(3) DATA A /36, 24, 36/ 在FORTRAN 90中,還可以省略DATA這個敘述 INTEGER :: A(3) = (/36, 26, 36/) ◎ 括號跟除號之間不能有空格,並且冒號不能省略。
函式1 副程式(SUBROUTINE)的使用:(可錯位) PROGRAM MAIN 主程式碼 END SUBROUTINE SUB1()
函式2 特性: CALL BY REFERENCE 無回傳值 副程式最後一個指令通常是RETURN 在主程式呼叫副程式:CALL
函式3 PROGRAM MAIN IMPLICIT NONE INTEGER :: A=1 WRITE (*,*) “A的初始值是”, A CALL ADD(A) WRITE(*,*) “A後來的值是”, A STOP END SUBROUTINE ADD(NUM) INTEGER NUM NUM = NUM + 1 RETURN END SUBROUTINE
函式4 這個程式的輸出: A的初始值是 1 A後來的值是 2 因為呼叫了subroutine,使得A的值被改變!
函式5 自訂函數(function) 類似SUBROUTINE 不同點 宣告方式 呼叫前必需宣告 有回傳值 Fortran 90 REAL , EXTERNAL :: ADD Fortran 77 REAL ADD EXTERNAL ADD
函式6 PROGRAM MAIN IMPLICIT NONE REAL, EXTERNAL:: TRIPPLE real:: A=1.38 WRITE (*,*) "A的初始值是", A WRITE (*,*) "呼叫函數",TRIPPLE(A) WRITE(*,*) "A後來的值是", A STOP END REAL FUNCTION TRIPPLE(NUM) REAL NUM TRIPPLE = NUM * 3 RETURN END
執行結果 A的初始值是 1.38 呼叫函數 4.14 A後來的值是 1.38
作業 圓面積計算公式 輸入:半徑(浮點數),輸出:圓面積(浮點數) 必需使用subroutine, function其中一種方式 圓周率使用課堂上教的方法宣告 Pi=3.1416
Any Question Please email : caster@cis.nctu.edu.tw