跳到內容

Fortran/FAQ

來自華夏公益教科書

本文包含一些關於 Fortran 的常見問題解答 (FAQ) 及其答案。

問。我應該學習 Fortran 嗎?它過時了嗎?

[編輯 | 編輯原始碼]

答:Fortran 並沒有過時,而且在不久的將來也不會過時。Fortran 是一種通用程式語言,適用於許多應用程式。然而,它擅長數值計算和高效能計算。它速度快、可移植性好,並且可以無縫處理陣列。正因為如此,存在許多用於數值演算法的高質量 Fortran 庫,它在科學界廣泛使用(例如數值天氣預報)。該語言本身仍在維護,並定期更新現代功能;最新版本是 Fortran 2018。

問:我應該使用哪個 Fortran 編譯器?

[編輯 | 編輯原始碼]

答:Oracle Solaris Studio、GNU Fortran、G95 和 Silverfrost(僅限 Windows)是免費的 Fortran 95 編譯器,Absoft、IBM、Intel、Lahey、NAG、Pathscale 和 PGI 銷售 Fortran 編譯器。有關 Fortran 編譯器的比較資訊,請訪問 維基百科

問:如何建立帶編號的檔名,例如 out_01.txt、out_02.txt 等?

[編輯 | 編輯原始碼]

答:使用“內部寫入”建立檔名,例如

write (file_name,"('out_',i2.2,'.txt')") i

答:一種更簡潔的方法是

i=<file number>
WRITE(file_name, fmt = '(A4,I0,A4)')'out_',i,'.txt'

這樣格式就很清晰,你正在將正確的字串寫入變數。我假設你想要一個整數作為數字。“I”格式語句需要一個整數長度,或者在某些情況下為零。你可能在想 F,其中小數點表示要考慮的小數位數。

問:使用此技術時 open 語句是什麼樣的?OPEN(UNIT = __, FILE = ???, STATUS='NEW')?

[編輯 | 編輯原始碼]

答:Gfortran 不接受此塊

      write(file_name,'cp',(i5.5),'.out') ITN
      open  (67,file = file_name)

出現錯誤,檔案標籤必須是 CHARACTER 型別

其他人可以幫忙嗎?

答:請參見上面的答案。基本上,你寫入變數 file_name 的方式不正確。

WRITE(file_name,fmt='(A2,I0,A4)')'cp',ITN,'.out'
OPEN(UNIT=67, file=file_name, status='new')

假設 ITN 已宣告為整數並被賦予了值。

問:如何將字串轉換為整數和其他型別?反過來呢?

[編輯 | 編輯原始碼]

答:使用“內部讀取”或“內部寫入”。實際上,你使用一個字元變數作為檔名,並讀取或寫入 I/O 列表。你編寫類似以下的內容

   read (character_variable, format) list of variables

將字串轉換為另一種型別,以及

   write (character_variable, format) list of variables

從另一種型別轉換為字串,如下面的程式所示

program xconvert_integer_string   
character(20) :: cnum 
integer       :: i 
i = 445 
write(cnum,'(i5)') i 
write(*,'(a)') trim(cnum) ! should output "  445" 
write(cnum,'(i5.5)') i 
write(*,'(a)') trim(cnum) ! should output "00445" 
i = 34 
write(cnum,'(i0)') i 
write(*,'(a)') trim(cnum) ! should output "34" 
end program xconvert_integer_string

此答案基於 Paul van Delst 和 Dick Hendrickson 在 comp.lang.fortran 中的郵件。

問。如何在 Fortran 程式中向作業系統發出命令?

[編輯 | 編輯原始碼]

答。Fortran 2008 標準提供 execute_command_line 內在過程來進行系統呼叫。以前的版本沒有標準方法來進行系統呼叫,但許多編譯器都有名為“system”或類似名稱的擴充套件。請查閱編譯器的文件。在 Fortran 2003 中,可以呼叫 C 程式碼,並且可以從 C 中呼叫作業系統。

華夏公益教科書