编程小博士(17)

软件世界

  学会创造条件

  问:上次小博士让我对三个数字进行排序,我便使用了分支语句来排,但排着排着问题就出来了,感觉必须要创造条件,不知道这方面有有什么窍门吗?”

  小博士:你用分支语句来做这个例子是可以完成的。而要用好分支语句,就要创造好条件和梳理好条件,这就是诀窍了。我们就用三个数字排序的例子来讲讲。

  我们先来看看用分支语句解决a、b、c排序问题的程序:

  Private Sub CmdExit_Click() '退出

  Unload Me

  End Sub

  Private Sub CmdSort_Click() '排序

  ' 输入

  a = Val(TxtA.Text)

  b = Val(TxtB.Text)

  c = Val(TxtC.Text)

  '比较

  If a > b Then

  If c > a Then

  TxtList.Text = Str(c) + "," + Str(a) + "," + Str(b)

  Else

  If c > b Then

  TxtList.Text = Str(a) + "," + Str(c) + "," + Str(b)

  Else

  TxtList.Text = Str(a) + "," + Str(b) + "," + Str(c)

  End If

  End If

  Else

  If c > b Then

  TxtList.Text = Str(c) + "," + Str(b) + "," + Str(a)

  Else

  If c > a Then

  TxtList.Text = Str(b) + "," + Str(c) + "," + Str(a)

  Else

  TxtList.Text = Str(b) + "," + Str(a) + "," + Str(c)

  End If

  End If

  End If

  '输出

  End Sub

  (以上程序在Win2000、VB6.0下调试通过。)

  上面这个问题,通过排列组合的知识可知,可能有六种情况出现,abc、acb、cab、cba、bac和bca中的一种,我们要用单分支来解决,须先将六种分成两大类。

  用一个数轴来表示,现在情况分成了如下两种(如图):

  第1种情况又可分成三种,正是c放在a、b上的三个位置(如图中的(1)),再将它合并成两种:c>a作为一类,其他的作为另一类;另一类又可以c>b作为依据分成两类。

  第2种情况也如法炮制。

  从上面的分析中不难看出,首先分成两大类,每类包含三种情况;分出的每一个类又可分成两大类,一个为一种,一个为两种;第三步还要将两种合并的情况再分开,到此,六种方案全部解决。

  思考

  条件多了并不可怕,关键是根据条件的特点,正确用分支结构。但是解决上述这么简单的问题我们需要比较复杂的思路吗?其实还有更简单的方法,大家可以继续思考一下。