小屋創作

日誌2012-04-02 20:01

【VB6】巴斯卡三角形

作者:解凍豬腳


對於數學有一點程度的人應該都知道巴斯卡三角形這東西,這東西大概長這樣:
 
          1,1
        1,2,1
       1,3,3,1
      1,4,6,4,1
  1,5,10,10,5,1
1,6,15,20,15,6,1

利用這東西可以快速地得出 (x+1)^n 的各項係數(結果必須為降冪或升冪排列,n為正整數)

前幾天看到有人在問如何用VB做出巴斯卡三角形的計算程式

我就稍微研究了一下

依它的規律,我們可以把它靠左對齊(假設第x行的第y個數字用 xCy 表示):

xCy y=1 y=2 y=3 y=4 y=5 y=6 y=7 y=8 y=9 y=10 y=11 y=12 y=13 y=14 y=15 y=16
x=1 1 1
x=2 1 2 1
x=3 1 3 3 1
x=4 1 4 6 4 1
x=5 1 5 10 10 5 1
x=6 1 6 15 20 15 6 1
x=7 1 7 21 35 35 21 7 1
x=8 1 8 28 56 70 56 28 8 1
x=9 1 9 36 84 126 126 84 36 9 1
x=10 1 10 45 120 210 252 210 120 45 10 1
x=11 1 11 55 165 330 462 462 330 165 55 11 1
x=12 1 12 66 220 495 792 924 792 495 220 66 12 1
x=13 1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
x=14 1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1
- - - - - - - - - - - - - - - -

這時候我們發現第x行的第y個數字 = (x-1)C(y-1) + (x-1)Cy

當然最重要的還是怎麼樣在VB裡面寫出這個函式( xCy 在這程式裡面是用 psc(x,y) 表示)。

我就直接貼程式碼上來解釋了:


Dim tmp As Integer '預先宣告一個叫做tmp的整數用來循環

Private Function psc(x, y)
If y = 0 Then
psc = 0 '當要丟出第"0"個數字的時候總是傳回0
ElseIf y = 1 Then
psc = 1 '當要丟出第"1"個數字的時候總是傳回1
ElseIf x = y - 1 Then
psc = 1
'當第x行的第y行中,y=x+1(也就是要求某某行的最後一個數字)時,總是傳回1

Else
psc = psc(x - 1, y - 1) + psc(x - 1, y)
'其他情況則傳回"第(x-1)行的第(y-1)個數字"與"第(x-1)行的第y個數字"的和
End If
End Function

Private Sub Text1_Change()
Text2.Text = ""
For tmp = 1 To Val(Text1.Text)
Text2.Text = Text2.Text + Str(psc(Val(Text1.Text), tmp)) + ","
Next
Text2.Text = Text2.Text + Str(psc(Val(Text1.Text), Val(Text1.Text) + 1))
If Text1.Text = "" Then
Text2.Text = ""
End If
End Sub


為了避免計算的時候產生錯誤,

我們可以在判斷第x行第y個數字之前先偵測:

如果y=0 ,那這個數字 xC0 我們把它定義為0 ,這樣子在進行加法計算的時候才不會錯誤。

這裡指的就是像這樣:

xCy y=0 y=1 y=2 y=3 y=4 y=5 y=6 y=7 y=8
x=1 0 1 1
x=2 0 1 2 1
x=3 0 1 3 3 1
x=4 0 1 4 6 4 1
x=5 0 1 5 10 10 5 1

- -
-
-
-
-
-
-
-

如果y = 1 ,那這個數字就一定會是1

如果x = y - 1,那這個數字也一定會是1(每行的最後一個數字)

再來是其他狀況下,我們就直接定義 xCy = (x-1)C(y-1) + (x-1)Cy



接著是TextBox的部分,我這裡是以Text1作為輸入框、Text2作為輸出框。



再來Text2輸出的部分是很簡單的,我們只要宣告Text1的文字變更時,做這些動作:

把tmp這個數字代入for循環由第一個到最後一個(也就是 xCtmp )

逐一從Text2輸出而中間加入逗號,

這樣子就完成VB6製的巴斯卡三角形程式囉~

以上教學可能不是寫得很容易懂,這個就得自己去了解了

[範例程式載點在此]

6

19

LINE 分享

相關創作

[達人專欄] [ OpenGL 入門到入土 # 2] Compute shader、GPU Instance、DrawIndirect與實作Frustum culling

《生活中的資安風險:偵防技術實戰》

【CS50x作業】自製 Scratch 遊戲:Unfairy Shooting Game

留言

開啟 APP

face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】