1 / 20

第 8 章 模組化程式設計 I -副程式與自定函數

第 8 章 模組化程式設計 I -副程式與自定函數. 大型程式. 模組 1. 模組 2. 模組 3. …. 模組 n. 一、模組化設計的概念. 模組 通常是指一段具有某種 特定功能、大小適中、容易 閱讀及維護的程式 將程式切割成許多個子功能 後,便可分別撰寫成模組程 式. 二、模組設計的原則. 設計功能單純的模組程式,以便提供給更多程式使用 儘量減少模組之間相互影響的程度,以使模組成為獨立的程式基本單元 將模組控制在適當的大小 ( 例如不超過 50 行敘述 ) ,以方便閱讀與維護. 模組 A. 模組 A'. 模組 B. 模組 B. 呼叫. 呼叫.

Download Presentation

第 8 章 模組化程式設計 I -副程式與自定函數

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第8 章模組化程式設計I-副程式與自定函數

  2. 大型程式 模組1 模組2 模組3 … 模組n 一、模組化設計的概念 • 模組通常是指一段具有某種特定功能、大小適中、容易閱讀及維護的程式 • 將程式切割成許多個子功能後,便可分別撰寫成模組程式

  3. 二、模組設計的原則 • 設計功能單純的模組程式,以便提供給更多程式使用 • 儘量減少模組之間相互影響的程度,以使模組成為獨立的程式基本單元 • 將模組控制在適當的大小(例如不超過50行敘述),以方便閱讀與維護

  4. 模組A 模組A' 模組B 模組B 呼叫 呼叫 … … 產品編號的檢查規則改變時 模組F 模組F 呼叫 呼叫 … … 模組A具有檢查產品編號功能 只要修改模組A即可 三、使用模組的優點 • 程式易於測試與偵錯 • 可簡化維護的工作 • 模組可重覆使用 • 程式開發易於分工

  5. 程式專案P2 程式專案P1 表單檔 表單檔 模組檔 撰寫模組程式 匯入現有模組檔 模組檔 四、模組設計的方法 • 在專案中加入空白模組檔,撰寫副程式或自定函數,以設計模組程式(如左下圖) • 在專案中匯入某個專案中的模組檔(如右下圖)

  6. 呼叫 Call副程式A Sub副程式A End Sub 執行 …… ….. 返回 主程式 副程式 五、副程式(1/6) • 副程式是一段具有特定功能的程式區塊;它通常必須透過主程式的呼叫才能被啟動起來執行

  7. 五、副程式(2/6) • 語法:《定義副程式的語法》Sub副程式名稱 ([形式參數1 [As資料型別],   形式參數2 [As資料型別], …]) 程式敘述區塊End Sub 《呼叫副程式的語法》Call副程式名稱 ([實際參數1, 實際參數2, …])

  8. 五、副程式(3/6) • 範例:計算家庭用電費與營業用電費 Private Sub Form1_Activated…… 讀取用電類型 讀取用電量 If 用電類型為家庭用電 Then 呼叫副程式F_Expense( ) ElseIf用電類型為營業用電 Then 呼叫副程式C_Expense( ) End If End Sub '計算家庭用電費 SubF_Expense…… End Sub '計算營業用電費 SubC_Expense…… End Sub … … … 主程式 副程式

  9. 五、副程式(4/6) • 副程式F_Expense( ) Sub F_Expense(ByVal volume As Single) '計算家庭用電 110: Dim fee As Integer 120: If volume > 500 Then'用電量超過500度 130: fee = 110 * 2.1 + 390 * 2.875 + (volume - 500) * 3.6 140: ElseIf volume > 110 Then'用電量超過110度 150: fee = 110 * 2.1 + (volume - 110) * 2.875 160: Else'用電量在110度以內 170: fee = volume * 2.1 180: End If 190: MsgBox("電費為" & fee & " 元", , "電費試算") End Sub

  10. 五、副程式(5/6) • 副程式C_Expense( ) Sub C_Expense(ByVal volume As Single) '計算營業用電費 200: Dim fee As Integer 210: Const rate As Single = 3.1 220: fee = rate * volume '計算電費 230: MsgBox("電費為" & fee & " 元", , "電費試算") End Sub

  11. 五、副程式(6/6) • 主程式 Private Sub Form1_Activated(ByVal sender ……) Handles Me.Activated 10: Dim ecase As Short 20: Dim usage As Single 30: ecase = InputBox("請輸入用電類型:1)家庭用電2)營業用電", _ "電費試算") 40: usage = InputBox("請輸入用電量,單位:度", "電費試算") 50: If ecase = 1 Then 60: Call F_Expense(usage) '呼叫副程式計算家庭用電費 70: Else 80: Call C_Expense(usage) '呼叫副程式計算營業用電費 90: End If 100: End End Sub

  12. 主程式 自定函數 1.呼叫 Public ClassForm1 X = 自定函數A( ) End Class Function 自定函數A( ) AsShort 自定函數A = 100 End Function … … 2.執行 3.返回並將值100傳回給變數X … … 4.執行下一行程式敘述 六、自定函數(1/3) • 自定函數的功能與副程式類似;差別在於自定函數在執行結束後會產生一個傳回值給呼叫它的程式

  13. 六、自定函數(2/3) • 語法:《定義自定函數的語法》Function 自定函數名稱([形式參數1[As 資料型別], 形式參數2_[As 資料型別], …]) As 資料型別 程式敘述區塊自定函數名稱 = 傳回值End Function《呼叫自定函數的語法》 變數名稱 = 自定函數名稱([實際參數1, 實際參數2, …])

  14. 六、自定函數(3/3) • 範例:華氏溫度換算為攝氏溫度 Function Convert_temp(ByVal F As Short) As Short'F為形式參數 60: Convert_temp = (F - 32) * 5 / 9 '攝氏溫度= (華氏溫度- 32 ) * 5 / 9 End Function Private Sub Form1_Activated(ByVal sender …) Handles Me.Activated 10: Dim F_temp, C_temp As Short 20: F_temp = InputBox("請輸入華氏溫度:", "溫度換算") 30: C_temp = Convert_temp(F_temp) 'F_temp為實際參數 40: MsgBox("華氏" & F_temp & " 度= 攝氏" & C_temp & " 度", , _ "溫度換算") 50: End End Sub

  15. 隨機不重覆 Dim rnd_n As Short Dim ck(4) As Short For i = 1 To 4 rnd_n = Int(Rnd() * 4) + 1 Do While ck(rnd_n) = 1 rnd_n = Int(Rnd() * 4) + 1 Loop N(i) = rnd_n ck(rnd_n) = 1 Next

  16. 副程式(版本一) Sub Generate_Random_Number() Dim rnd_n As Short Dim ck(4) As Short For i = 1 To 4 rnd_n = Int(Rnd() * 4) + 1 Do While ck(rnd_n) = 1 rnd_n = Int(Rnd() * 4) + 1 Loop N(i) = rnd_n ck(rnd_n) = 1 Next End sub 使用方法:Call Generate_Random_Number()

  17. 副程式(版本二-加入模組) Sub Generate_Random_Number() Dim rnd_n As Short Dim ck(4) As Short For i = 1 To 4 rnd_n = Int(Rnd() * 4) + 1 Do While ck(rnd_n) = 1 rnd_n = Int(Rnd() * 4) + 1 Loop Form1.N(i) = rnd_n ck(rnd_n) = 1 Next End sub 使用方法:1. 在專案中加入空白模組檔”Module1.vb” 2. Public N(4) as short 3. Call Generate_Random_Number()

  18. 副程式(版本三-加入參數) Sub Generate_Random_Number(ByVal num as short) Dim rnd_n As Short Dim ck(4) As Short For i = 1 To num rnd_n = Int(Rnd() * num) + 1 Do While ck(rnd_n) = 1 rnd_n = Int(Rnd() * num) + 1 Loop Form1.N(i) = rnd_n ck(rnd_n) = 1 Next End sub 使用方法:1. 在專案中加入空白模組檔”Module1.vb” 2. Public N(4) as short 3. Call Generate_Random_Number(4)

  19. 副程式(版本四-加入陣列參數) Sub Generate_Random_Number(ByVal k() as short, ByVal num as short) Dim rnd_n As Short Dim ck(4) As Short For i = 1 To num rnd_n = Int(Rnd() * num) + 1 Do While ck(rnd_n) = 1 rnd_n = Int(Rnd() * num) + 1 Loop K(i)= rnd_n ck(rnd_n) = 1 Next End sub 使用方法:1. 在專案中加入空白模組檔”Module1.vb” 2. Public N(4) as short 3. Call Generate_Random_Number(4)

  20. 自定函數 Function money(ByVal all As Integer, ByVal ans As Boolean) As Integer Dim rate As Integer If RadioButton1.Checked = True Then rate = 1 ElseIf RadioButton2.Checked = True Then rate = 10 ElseIf RadioButton3.Checked = True Then rate = 100 ElseIf RadioButton4.Checked = True Then rate = 1000 End If If ans = True Then all = all + rate Else all = all - rate End If money = all End Function 使用方法: all_money = money(all_money, ans)

More Related