【问题标题】:Bubble sort an array of strings in commodore 4.0 basic?在 Commodore 4.0 basic 中对字符串数组进行冒泡排序?
【发布时间】:2014-05-08 00:55:00
【问题描述】:

在 Commodore 4.0 basic 中对字符串数组进行冒泡排序;谁能帮帮我?

到目前为止,我拥有算法的“主要”部分,但我对如何将其设为子例程感到困惑,因为如何将字符串数组设为参数,以便之后可以调用它?

rem: s = holder value
for x = 0 to (length of array with strings)
if array(x)<(array(x+1)) then array(x+1)=s
then array(x+1)=array(x)
then array(x)=s
next
end

【问题讨论】:

  • 你想在这里用then而不用if做什么?
  • 它包含在前面的 if 中

标签: arrays sorting bubble-sort commodore


【解决方案1】:

要进行冒泡排序,您必须对数据进行多次遍历,并在每次遍历中跟踪是否进行了任何交换。一旦你完成了零交换的传递,你就知道数组已经排序了。另外,你的交换逻辑有问题;您必须将数组(x+1)存储在 s 中,然后将数组(x)复制到数组(x+1),然后最后将数组(s)放入数组(x)中。

我不太确定您所说的“如何将字符串数组作为参数,以便之后可以调用它?”是什么意思? Commodore BASIC 不像大多数语言那样具有用户定义的函数*,因此“参数”不是一个非常有用的概念。大多数情况下,人们会将要传递给子程序的值存储在变量中(所有变量都是全局变量),然后子程序同样会返回一个或多个值(如果它返回任何内容)。由程序员负责跟踪哪些变量用于什么目的,以及子例程从哪些行号开始(以及条件分支和循环起点的位置)。

这是我制作的一个版本,它采用了我在 BASIC 2.0 中可以管理的“结构化”格式;它应该像 4.0 一样工作:

100 gosub 150:rem set up array
110 gosub 230:rem sort array
120 gosub 420:rem print array
130 end
140 :
150 rem set up array
160 rem l=length of array
170 l=10
180 dim ar(l)
190 for i=0 to l-1:read ar(i):next
200 data 5,1,4,2,8,7,3,6,9,10
210 return
220 :
230 rem sort array
240 if l<2 then return
250 rem else
260 : rem sw=whether this pass has had any swaps
270 : rem start of pass
280 :   sw=0
290 :   for x=0 to l-2
300 :     if ar(x)<=ar(x+1) then goto 380
310 :     rem else
320 :       rem s=placeholder value
330 :       s=ar(x+1)
340 :       ar(x+1)=ar(x)
350 :       ar(x)=s
360 :       sw=-1
370 :     rem endif
380 :   next
390 : if sw then goto 270
400 return
410 :
420 rem print array
430 if l=0 then print "(empty array)":return
440 rem else
450 : for i=0 to l-1:print ar(i);:next
460 : print
470 return

注意:在一行的开头只允许我们插入空白行,或者缩进一行后面的内容;如果您尝试在行首添加额外的空格,BASIC 编辑器稍后会删除它们。这只是让事情看起来更像是一种现代编程语言。

* 有一种方法可以定义接受一个浮点参数并返回一个浮点结果的函数,但是定义必须全部在一行上,不能使用任何条件、循环等。很好对于简单的数学公式。例如:

10 def fn f(x)=x*1.5
20 print f(3)

打印“4.5”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2016-02-09
    • 2021-08-13
    • 2014-05-09
    • 1970-01-01
    • 2017-04-14
    • 2016-12-02
    相关资源
    最近更新 更多