BASIC 与 FORTRAN 77:比较来自过去的编程冲击

我通过编写一个示例程序来探索 BASIC 和 FORTRAN 77 中的 FOR 循环,该程序用于将从 1 到 10 的数字列表相加。
3 位读者喜欢这篇文章。
An introduction to GNU Screen

Opensource.com

如果你像我一样在 20 世纪 70 年代和 80 年代接触电脑长大,你可能学过一种用于个人电脑的通用编程语言,称为 BASIC,即初学者通用符号指令代码(Beginner's All-purpose Symbolic Instruction Code)的缩写。你可以在那个时代的每台个人电脑上找到 BASIC 的实现,包括 TRS-80、Apple II 和 IBM PC。那时,我是一名自学成才的 BASIC 程序员,在 Apple II 上尝试 AppleSoft BASIC,然后转向 IBM PC 上的 GW-BASIC,后来又转向 DOS 上的 QuickBASIC。

但曾经有一段时间,FORTRAN 是一种流行的科学编程语言,它是 FORmula TRANslation(公式翻译)的缩写。虽然自 1990 年该语言的规范以来,这个名称更常被风格化为 "Fortran"。

当我在 20 世纪 90 年代初作为大学本科生学习物理时,我利用了我在 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 var = start TO end

在这个示例程序中,指令 for i = 1 to 10 启动一个循环,该循环迭代值 1 到 10。在每次循环遍历时,变量 i 都设置为新值。

在 BASIC 中,直到下一个指令之前的所有指令都作为 FOR 循环的一部分执行。因为你可以在另一个 FOR 循环内部放置一个 FOR 循环,所以 Bywater BASIC 使用语法 NEXT variable 来指定要迭代哪个循环变量。

在提示符下键入 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:\DEVEL\FBC> fbc sum.bas

如果你的代码中没有任何错误,编译器会生成一个你可以运行的程序。例如,我的程序现在称为 sum。运行我的程序会将数字从 1 加到 10

C:\DEVEL\FBC> sum
Add the numbers from 1 to 10 ...
55

FORTRAN 77

FORTRAN 编程语言就像旧式 BASIC 和现代 BASIC 之间的混合体。FORTRAN 早于 BASIC,BASIC 显然从 FORTRAN 中汲取了灵感,就像后来的 FORTRAN 版本从 BASIC 中汲取了灵感一样。你将 FORTRAN 程序编写为文件中的源代码,但你不会在所有地方都使用行号。但是,FORTRAN 77 确实对某些指令使用行号(称为标签),包括 FOR 循环。尽管在 FORTRAN 77 中,FOR 实际上称为 DO 循环,但它执行相同的操作并且具有几乎相同的用法。

在 FORTRAN 77 中,DO 循环语法如下所示

DO label var = start, end

这种情况是你需要行号来指示 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 编译器集合 (GCC) 中安装 GNU Fortran 支持。在 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 deprecated 选项来编译带有行号的程序。

标签
photo of Jim Hall
Jim Hall 是一位开源软件倡导者和开发人员,以 GNOME 中的可用性测试以及作为 FreeDOS 的创始人兼项目协调员而闻名。

评论已关闭。

© . All rights reserved.