Linux中國

BASIC 與 FORTRAN 77:比較過去的編程語言

我通過編寫一個示常式序來探索 BASIC 和 FORTRAN 77 中的 FOR 循環,以將數字列表從 1 加到 10。

但是曾經,一種在科學編程領域受歡迎的語言是 FORTRAN(即 「 公式翻譯 FORmula TRANslation 」)。儘管在 1990 年對該語言進行的規範以後,該名稱更常見的風格是 「Fortran」。

當我在 1990 年代初作為大學本科物理學生學習物理學時,我利用自己在 BASIC 上的經驗學習了 FORTRAN 77。那時我意識到 BASIC 許多概念都來源於 FORTRAN。當然,FORTRAN 和 BASIC 在很多其他方面也存在差異,但我發現了解一點 BASIC 可以幫助我快速學習 FORTRAN 編程。

我想通過使用兩種語言編寫相同的程序,展示它們之間的一些相似之處。通過編寫一個示常式序來探索 BASIC 和 FORTRAN 77 中的 FOR 循環,這個程序將把 1 到 10 之間的數字相加。

Bywater BASIC

BASIC 存在許多種不同的版本,這取決於你的計算機,但該語言總體保持不變。我喜歡的一種 BASIC 版本是 Bywater BASIC,這是一種開源的 BASIC 實現,適用於包括 Linux 和 DOS 在內的不同平台。

要在 FreeDOS 上使用 Bywater BASIC,你必須首先從 FreeDOS 1.3 Bonus CD 中 安裝該軟體包。然後進入 C: 目錄並輸入 bwbasic 命令,這將啟動 BASIC 解釋器。你可以在這個提示符下輸入程序:

bwBASIC:

Bywater BASIC 使用較早的 BASIC 編程標準,需要你在每個程序指令上編寫一個行號。將行號視為索引。你可以使用行號輕鬆地引用程序中的任何指令。當你將程序鍵入 Bywater BASIC 解釋器時,請在每個指令前添加行號:

bwBASIC: 10 print "Add the numbers from 1 to 10 ..."
bwBASIC: 20 sum = 0
bwBASIC: 30 for i = 1 to 10
bwBASIC: 40 sum = sum + i
bwBASIC: 50 next i
bwBASIC: 60 print sum
bwBASIC: 70 end

可以使用 list 命令查看你已經輸入到解釋器中的程序:

bwBASIC: list
10 print "Add the numbers from 1 to 10 ..."
20 sum = 0
30 for i = 1 to 10
40 sum = sum + i
50 next i
60 print sum
70 end

這個簡短的程序演示了 BASIC 中的 FOR 循環。 FOR 是任何編程語言中最基本的循環構造,允許你迭代一組值。在 Bywater BASIC 中,FOR 循環的一般語法看起來像這樣:

FOR 變數 = 起始值 TO 終止值

在這個示常式序中,指令 for i = 1 to 10 開始一個循環,迭代值為 1 到 10。在每個循環中,變數 i 被設置為新值。

在 BASIC 中,所有到 next 指令前的指令都將作為 FOR 循環的一部分執行。因為你可以將一個 FOR 循環放入另一個 FOR 循環中,Bywater BASIC 使用語法 NEXT 變數 來指定要迭代的循環變數。

在提示符下鍵入 run 來執行程序:

bwBASIC: run
Add the numbers from 1 to 10 ...
55

Bywater BASIC 被稱為 BASIC 解釋器,因為只能從 Bywater BASIC 環境中運行程序。這意味著解釋器會處理與操作系統的交互的所有繁重工作,因此你的程序不需要自己完成這個工作。 這樣做的代價是,程序在解釋環境中運行會比它作為編譯程序運行慢一些。

FreeBASIC

另一個流行的 BASIC 實現是 FreeBASIC,這是一個開源的 BASIC 編譯器,適用於多個平台,包括 Linux 和 DOS。要使用 FreeBASIC,你需要從 FreeDOS 1.3 Bonus CD 安裝 FreeBASIC 包,然後進入 C: 目錄,你會在這裡找到 FreeBASIC 程序。

FreeBASIC 是一個編譯器,因此你首先需要創建一個包含程序指令的源文件,然後使用源代碼運行編譯器以創建一個可運行的程序。我編寫了一個類似於「將 1 到 10 的數字相加」的程序版本,將其保存為 BASIC 文件,並命名為 sum.bas

dim sum as integer
dim i as integer
print "Add the numbers from 1 to 10 ..."
sum = 0
for i = 1 to 10
sum = sum + i
next
print sum
end

如果你將這段代碼與 Bywater BASIC 版本的程序進行比較,你可能會注意到 FreeBASIC 不需要行號。FreeBASIC 實現了一種更現代的 BASIC 版本,使得編寫程序時不需要跟蹤行號更容易。

另一個主要的區別是你必須在源代碼中定義或聲明變數。使用 DIM 指令在 FreeBASIC 中聲明變數,例如 dim sum as integer,以定義一個名為 sum 的整數變數。

現在可以在命令行上使用 fbc 編譯 BASIC 程序:

C:DEVELFBC> fbc sum.bas

如果你的代碼沒有任何錯誤,編譯器將生成一個可以運行的程序。例如,我的程序現在稱為 sum。運行我的程序將從 1 加到 10:

C:DEVELFBC> sum
Add the numbers from 1 to 10 ...
55

FORTRAN 77

FORTRAN 編程語言類似於舊式和現代 BASIC 之間的混合體。FORTRAN 比 BASIC 更早出現,而 BASIC 顯然從 FORTRAN 中汲取靈感,就像後來的 FORTRAN 版本從 BASIC 中獲得啟示一樣。你可以將 FORTRAN 程序以源代碼的形式寫成文件,但並不需要在每個地方使用行號。但是,FORTRAN 77 在某些指令中使用行號(稱為標籤),包括 FOR 循環。在 FORTRAN 77 中,FOR 實際上被稱為 DO 循環,它執行相同的功能並具有幾乎相同的用法。

在 FORTRAN 77 中,DO 循環的語法如下:

DO 行號 變數 = 起始值, 終止值

這種情況是需要行號來指示 DO 循環結束位置的一種情況。你在 BASIC 中使用了 NEXT 指令,但 FORTRAN 需要一個行標籤。通常,該行是一個 CONTINUE 指令。

查看這個示例 FORTRAN 程序,了解如何使用 DO 循環來循環一組數字。我將此源文件保存為 sum.f

PROGRAM MAIN
      INTEGER SUM,I
      PRINT *, 'ADD THE NUMBERS FROM 1 TO 10 ...'
      SUM = 0
      DO 10 I = 1, 10
        SUM = SUM + I
   10 CONTINUE
      PRINT *, SUM
      END

在 FORTRAN 中,每個程序都需要以 PROGRAM 指令開始,並指定程序名稱。你可能會將此程序命名為 SUM,但隨後在程序中不能使用變數 SUM。當我學習 FORTRAN 時,我從 C 編程中借鑒了一些東西,並以 PROGRAM MAIN 開始了我的所有 FORTRAN 程序,做法類似於 C 程序中的 main() 函數,因為我不太可能使用名為 MAIN 的變數。

FORTRAN 中的 DO 循環類似於 BASIC 中的 FOR 循環。它迭代從 1 到 10 的值。變數 I 在每次循環中獲取新值。這樣可以將 1 到 10 的每個數字相加,並在完成時列印總和。

你可以在每個平台上找到適合的 FORTRAN 編譯器,包括 Linux 和 DOS。FreeDOS 1.3 的 Bonus CD 中包括 OpenWatcom FORTRAN 編譯器。在 Linux 上,你可能需要安裝一個包來安裝 GNU Fortran 支持(在 GNU 編譯器集合(GCC)中)。在 Fedora Linux 上,你可以使用以下命令添加 GNU Fortran 支持:

$ sudo dnf install gcc-gfortran

然後你可以使用以下命令編譯 sum.f 並運行程序:

$ gfortran -o sum sum.f
$ ./sum
ADD THE NUMBERS FROM 1 TO 10 ...
55

一點不同之處

我發現 FORTRAN 和 BASIC 非常相似,但也存在一些不同之處。這些語言的核心是不同的,但如果你了解一些 BASIC,你可以學習 FORTRAN,同樣,如果你了解一些 FORTRAN,你也可以學習 BASIC。

如果你想探索這兩種語言,有幾點需要注意:

  • FORTRAN 77 使用全大寫,但後來的 FORTRAN 版本允許大小寫混用,只要對變數、函數和子程序使用相同的大小寫。大多數 BASIC 實現都不區分大小寫,這意味著你可以自由地混合大小寫字母。
  • 有許多不同版本的 BASIC,但它們通常做同樣的事情。如果你學會了一種 BASIC 實現方式,很容易學會另一種。注意 BASIC 解釋器或編譯器的警告或錯誤信息,查閱手冊了解差異。
  • 某些 BASIC 實現需要使用行號,例如 Bywater BASIC 和 GW-BASIC。更現代的 BASIC 版本允許你編寫不使用行號的程序。FreeBASIC 需要使用 -lang 廢棄選項編譯帶有行號的程序。

(題圖:MJ/dba28597-dd62-4ffe-bb4a-e38874a65239)

via: https://opensource.com/article/23/4/basic-vs-fortran-77

作者:Jim Hall 選題:lkxed 譯者:ChatGPT 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國