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

20
第 8 第 第第第第第第第 I 第第第第第第第

Upload: avram-caldwell

Post on 03-Jan-2016

42 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

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

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

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

一、模組化設計的概念

模組通常是指一段具有某種特定功能、大小適中、容易閱讀及維護的程式

將程式切割成許多個子功能後,便可分別撰寫成模組程式

模組 1

模組 2

模組 3

模組 n

大型程式

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

二、模組設計的原則

設計功能單純的模組程式,以便提供給更多程式使用

儘量減少模組之間相互影響的程度,以使模組成為獨立的程式基本單元

將模組控制在適當的大小(例如不超過 50行敘述),以方便閱讀與維護

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

三、使用模組的優點

模組可重覆使用程式開發易於分工

程式易於測試與偵錯可簡化維護的工作

呼叫

模組 A

模組 B

模組 F

…呼叫

模組 A'

模組 B

模組 F

…呼叫

呼叫

模組 A具有檢查產品編號功能

產品編號的檢查規則改變時

只要修改模組 A即可… …

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

四、模組設計的方法

在專案中加入空白模組檔,撰寫副程式或自定函數,以設計模組程式(如左下圖)

在專案中匯入某個專案中的模組檔(如右下圖)

表單檔

模組檔

程式專案 P1

表單檔

模組檔

程式專案 P2

匯入現有模組檔

撰寫模組程式

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

五、副程式( 1/6)

副程式是一段具有特定功能的程式區塊;它通常必須透過主程式的呼叫才能被啟動起來執行

Call 副程式A

呼叫 Sub 副程式A

End Sub…

……

…..執行

返回

主程式 副程式

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

五、副程式( 2/6)

語法:《定義副程式的語法》 Sub 副程式名稱 ([形式參數 1 [As 資料型別 ], 形式參數 2 [As 資料型別 ], …]) 程式敘述區塊 End Sub

《呼叫副程式的語法》 Call 副程式名稱 ([實際參數 1, 實際參數 2, …])

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

Private Sub Form1_Activated……

讀取用電類型 讀取用電量 If 用電類型為家庭用電 Then 呼叫副程式 F_Expense( ) ElseIf 用電類型為營業用電Then 呼叫副程式 C_Expense( ) End IfEnd Sub

五、副程式( 3/6)

範例:計算家庭用電費與營業用電費

主程式 副程式

'計算家庭用電費Sub F_Expense……

End Sub'計算營業用電費Sub C_Expense……

End Sub

……

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

五、副程式( 4/6)

副程式 F_Expense( )

Sub F_Expense(ByVal volume As Single) '計算家庭用電110: Dim fee As Integer120: If volume > 500 Then '用電量超過 500度130: fee = 110 * 2.1 + 390 * 2.875 + (volume - 500) * 3.6140: ElseIf volume > 110 Then '用電量超過 110度150: fee = 110 * 2.1 + (volume - 110) * 2.875160: Else '用電量在 110度以內170: fee = volume * 2.1180: End If190: MsgBox("電費為 " & fee & " 元 ", , "電費試算 ")End Sub

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

五、副程式( 5/6)

副程式 C_Expense( )

Sub C_Expense(ByVal volume As Single) '計算營業用電費200: Dim fee As Integer210: Const rate As Single = 3.1220: fee = rate * volume '計算電費230: MsgBox("電費為 " & fee & " 元 ", , "電費試算 ")End Sub

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

五、副程式( 6/6)

主程式Private Sub Form1_Activated(ByVal sender ……) Handles Me.Activated10: Dim ecase As Short20: Dim usage As Single30: ecase = InputBox("請輸入用電類型: 1)家庭用電 2)營業用電 ", _ "電費試算 ")40: usage = InputBox("請輸入用電量,單位:度 ", "電費試算 ")50: If ecase = 1 Then60: Call F_Expense(usage) '呼叫副程式計算家庭用電費70: Else80: Call C_Expense(usage) '呼叫副程式計算營業用電費90: End If100: EndEnd Sub

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

六、自定函數( 1/3)

自定函數的功能與副程式類似;差別在於自定函數在執行結束後會產生一個傳回值給呼叫它的程式

1.呼叫主程式

Public Class Form1

X = 自定函數 A( )

End Class

自定函數

Function 自定函數 A( ) As Short

自定函數 A = 100End Function

3.返回並將值 100傳回給變數 X

2.執行

4.執行下一行程式敘述…

……

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

六、自定函數( 2/3)

語法:《定義自定函數的語法》Function 自定函數名稱 ([形式參數 1[As 資料型別 ], 形式參數2_[As 資料型別 ], …]) As 資料型別 程式敘述區塊 自定 函數名稱 = 傳回值End Function

《呼叫自定函數的語法》 變數名稱 = 自定函數名稱 ([實際參數 1, 實際參數 2, …])

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

六、自定函數( 3/3)

範例:華氏溫度換算為攝氏溫度Function Convert_temp(ByVal F As Short) As Short 'F為形式參數60: Convert_temp = (F - 32) * 5 / 9 '攝氏溫度 = (華氏溫度 - 32 ) * 5 / 9End Function

Private Sub Form1_Activated(ByVal sender …) Handles Me.Activated10: Dim F_temp, C_temp As Short20: F_temp = InputBox("請輸入華氏溫度: ", "溫度換算 ")30: C_temp = Convert_temp(F_temp) 'F_temp為實際參數40: MsgBox("華氏 " & F_temp & " 度 = 攝氏 " & C_temp & " 度 ", , _ "溫度換算 ")50: EndEnd Sub

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

隨機不重覆

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) = 1Next

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

副程式 (版本一 )

Sub Generate_Random_Number()

Dim rnd_n As ShortDim 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) = 1Next

End sub

使用方法: Call Generate_Random_Number()

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

副程式 (版本二 -加入模組 )

Sub Generate_Random_Number()

Dim rnd_n As ShortDim 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) = 1Next

End sub

使用方法: 1. ”在專案中加入空白模組檔 Module1.vb” 2. Public N(4) as short

3. Call Generate_Random_Number()

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

副程式 (版本三 -加入參數 )

Sub Generate_Random_Number(ByVal num as short)

Dim rnd_n As ShortDim 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) = 1Next

End sub

使用方法: 1. ”在專案中加入空白模組檔 Module1.vb” 2. Public N(4) as short

3. Call Generate_Random_Number(4)

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

副程式 (版本四 -加入陣列參數 )

Sub Generate_Random_Number(ByVal k() as short, ByVal num as short)

Dim rnd_n As ShortDim 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) = 1Next

End sub

使用方法: 1. ”在專案中加入空白模組檔 Module1.vb” 2. Public N(4) as short

3. Call Generate_Random_Number(4)

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

自定函數 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)