創作內容

6 GP

【VB6】巴斯卡三角形

作者:解凍豬腳│2012-04-02 20:01:45│巴幣:210│人氣:3387

對於數學有一點程度的人應該都知道巴斯卡三角形這東西,這東西大概長這樣:
 
          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製的巴斯卡三角形程式囉~

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

[範例程式載點在此]

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=1570121
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:VB|VB6|程式|程式語言

留言共 19 篇留言

狂狂
你這種寫法 就是遞回(recursive)
其他遞回的例子 費氏數列 你也可以去嘗試~~

04-06 02:40

解凍豬腳
就是指類似循環式的函式吧~04-06 18:19
解凍豬腳
不過我覺得費氏數列比巴斯卡三角形還要簡單得多
因為一個是一維的 一個是二維的04-07 23:42
七鍵
null耶
= ="[e8]
安安有怎不早說呢

04-07 22:53

解凍豬腳
ㄎㄎ04-07 23:06
狂狂
給你點建議 高中的話 建議 數學向量部分 要學好 外積 內積 幾何學 的觀念 電腦圖學一定有幫助..

04-07 23:46

解凍豬腳
OK 3Q[E16]04-07 23:51
狂狂
忘了說 電腦圖學 和 3d 有關 有興趣你可以去買書研究 不過阿 我覺得你可以學C#
VB.net 可以做的 C#.net也可以 都是.net架構 對工作比較有幫助

04-07 23:54

解凍豬腳
當然 C語言性能什麼的幾乎都比VB還要好
不過C語言太難我都看不懂[e42]04-07 23:57
狂狂
若想寫外掛的話 可以研究Win32api

04-07 23:55

解凍豬腳
這我知道~很多都是調用API來的
例如ReadProcessMemory04-07 23:57
狂狂
Win32api 基礎上C語言 但可以使用在C# VB Ruby ...etc的語言
許多腳本播放影片腳本都有用到他~~

04-07 23:58

狂狂
恩恩

04-07 23:58

狂狂
還有C# 不等於C語言= =..

04-08 00:01

解凍豬腳
C/C++才算是吧[e34]04-08 00:05
七鍵
C#根本已經綜合了,而且也很強大.
維G也有寫[e6]

04-08 12:19

解凍豬腳
那這我等有空再來研究看看好了[e5]04-08 12:34
七鍵
安安我是打算練好C++再去學C#[e5]

04-08 12:37

解凍豬腳
我連C++的基礎都只有打一半而已[e36]04-08 12:38
七鍵
我才3分之2[e3],慢慢自學真的好累[e36]

04-08 12:41

解凍豬腳
哈 不過這壓力也比較不會那麼大04-08 12:42
飛天吉娃娃
第一次有人數學比我高一層樓....
大師!我給你200巴幣
麻煩交我國中的數學

04-26 23:02

解凍豬腳
啊??!如果有問題是歡迎問的 我現在國三
6冊也都教完了應該沒什麼問題04-27 20:14
飛天吉娃娃
我國一 數學程度很爛
麻煩發表一的有關數學的文章給我(教學的)
使用寄信給我

04-28 14:06

解凍豬腳
可是你突然叫我教
我不知道從何開始 因為課本上面就很夠了
不然你問我答 這樣子比較好04-28 14:36
飛天吉娃娃
... 好啦
我其實小六
總行了吧
我想學國中的數學
我數學全班第2

04-28 14:56

解凍豬腳
這種東西還是不要太早搶著學
我當初小六的時候是全科都第一
天天在那邊想說不知道國中的數學會教什麼
結果到後來還是有往下掉

不過如果你真的很想要知道國中數學在教什麼
可以去網路上查查看04-28 15:04
解凍豬腳
大致上國中在教的數學有這些:
正負數加減乘除以及四則運算、
最大公因數、最小公倍數、因數、倍數、
圖形座標、一元一次方程式、科學記號、一元一次不等式、
函數及函數圖形、二元一次聯立方程式、一元二次方程式、
多項式乘除、多項式的公式、等差數列、
等差級數、商高定理(勾股定理)、
三角形的內心外心與重心、圖形推理、
根號的運算、統計圖表、圓形或三角形的性質等等。04-28 15:10
解凍豬腳
基本上國中的根號運算部分
只會教到一般用到的二次根號(平方根)04-28 15:11
解凍豬腳
至於高中數學的話我是在資優班裡面有學過一點點
沒錯的話高中數學應該是有對數、圓方程式之類的
不過因為我也還沒上高中所以不太清楚04-28 15:16
飛天吉娃娃
喔...那
圖形座標、一元一次方程式、科學記號、一元一次不等式、
函數及函數圖形、二元一次聯立方程式、一元二次方程式、
多項式乘除、多項式的公式、等差數列、
等差級數、商高定理(勾股定理)、
三角形的內心外心與重心、圖形推理、
根號的運算、統計圖表、圓形或三角形的性質
這些交一下

04-28 18:03

解凍豬腳
等我把你教到會為止你也早就國中畢業了
我教人是只教題目不教課綱的04-28 18:05
飛天吉娃娃
好啦...不學就不學

04-28 18:28

老痞子
樓上頗屁
窩想b樓上
可惜沒bp可用

08-15 14:05

解凍豬腳
ㄏㄏㄏ08-15 16:13
Sofa
MD,抗不懂…

窩只會1元1次方程式[e20]

想噓樓上上+1

08-28 01:05

解凍豬腳
頗ㄏ
我很不喜歡就是那種「只想學新的東西」的態度,
因為這樣子一看就知道絕對不是完全出自於興趣,
教起來絕對會有一堆問題產生。08-28 16:13
Sofa
每個計算式中的數字和運算符號中間都要空一格嗎?
還是說,如果沒空也沒差?

01-24 18:20

解凍豬腳
沒有差01-24 18:22
我要留言提醒:您尚未登入,請先登入再留言

6喜歡★johnny860726 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:啊!忘記剪指甲了... 後一篇:為什麼會有人喜歡外八走路...

追蹤私訊切換新版閱覽

作品資料夾

------------------ (0)

豬腳生活 (1)
日常雜談、巴哈大小事 (193)
煞氣a國中生 (7)
高中生活日誌 (55)
大學生活日誌 (34)
冬令營回憶錄 (19)
也許藏有一些小祕密吧? (3)
各式各樣的開箱文 (11)
貓科動物時間 (15)

------------------ (0)

繪圖創作 (1)
電繪插圖、草稿 (199)
短篇漫畫、單幅標語 (61)
上課太無聊的手繪塗鴉 (8)
不知道該怎麼分類的綜合作品 (18)

文字創作 (1)
草莓兵的國軍紀實 (14)
我與らい的點點滴滴 (12)
那些榮耀的時刻與心跳加速的瞬間 (60)
有感而發的隨筆之作、無法分類的短文 (17)

------------------ (0)

語言學習 (1)
日語:天気がいいから (5)
粵語:唔好再淨係識講粗口喇 (6)
英語:Hey, you! (1)

程式設計及電腦網路 (1)
系列文:跟著豬腳 C 起來 (10)
系列文:論壇網站運作原理 (3)
Go(Golang) (11)
Ruby / RGSS (7)
Visual Basic (13)
JavaScript (1)
各種原理 (17)

思想:多思考一下,世界會更不一樣 (1)
網路經驗、社會觀察 (23)
檸檬庫 (21)

數學:我來拯救你的期中考了 (1)
各類基礎觀念 (5)
國中生也能懂的微積分 (9)
微分方程 (0)

小說:用筆鋒劃出新世界的入口 (1)

繪圖:我也想畫出私巴拉西的美圖 (10)

------------------ (0)

施工中 (22)

不堪回首的痕跡、雜物堆放 (31)

------------------ (0)

未分類 (1)

ilove487  
【讀墨】2023年台灣大眾小說人氣票選ーー《致一百光年外的你》名列候補!!看更多我要大聲說昨天16:00


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

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