第 7 章 程序與函數

24
第7第 第第第第第 Ren-Jie Wang, 第 第 第 , Ph.D. [email protected] http://rjwang.myweb.hinet.n et

Upload: livana

Post on 22-Jan-2016

55 views

Category:

Documents


0 download

DESCRIPTION

第 7 章 程序與函數. Ren-Jie Wang, 王 仁 傑 , Ph.D. [email protected] http://rjwang.myweb.hinet.net. 第 7 章 程序與函數. 7-1 模組化程式設計 7-2 程序與函數 7-3 程序與函數的變數範圍 7-4 常用的內建函數 7-5 遞迴函數. 7-1-2 程序與函數是一個黑盒子 - 圖例. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 7 章 程序與函數

第 7 章 程序與函數

Ren-Jie Wang, 王 仁 傑 , Ph.D. [email protected]

http://rjwang.myweb.hinet.net

Page 2: 第 7 章 程序與函數

第 7 章 程序與函數

7-1 模組化程式設計 7-2 程序與函數 7-3 程序與函數的變數範圍 7-4 常用的內建函數 7-5 遞迴函數

Page 3: 第 7 章 程序與函數

7-1-2 程序與函數是一個黑盒子 - 圖例

程式碼只知道呼叫程序時,需要傳入的參數和取得傳回值。它是程序函數和外部溝通的使用介面,一個對外的邊界,實際程式碼內容是隱藏在使用介面後,我們將程序與函數實際內容的程式碼撰寫稱為「實作」( Implementation )。

Page 4: 第 7 章 程序與函數

7-2 程序與函數 程序與函數可以將程式中,一些常用的共同程式碼獨立

成區塊,也就是建立結構化程式設計的模組。 Visual Basic 程序可以分為兩種,如下:

事件處理程序:事件處理程序是處理指定事件的程序(一定是 Sub ,因為不會有傳回值)。

一般程序:將程式區塊使用一個程序或函數名稱來代替,以便呼叫程序與函數來執行特定功能。 Visual Basic 程序分為兩種:

Sub 程序 Function 函數。

Page 5: 第 7 章 程序與函數

7-2-1 建立 Sub 程序 - 建立程序 ( 說明 )

Visual Basic 語言的程序是使用 Sub 和 End Sub 包圍的程式區塊,在 Sub 關鍵字後是程序名稱,程序並沒有傳回值。

在 Visual Basic 程式建立程序的語法,如下所示:[Public | Private] Sub 名稱 程式區塊End Sub

上述 Sub 指令前的 Public 或 Private 是存取修飾子。

Page 6: 第 7 章 程序與函數

7-2-1 建立 Sub 程序 - 建立程序 ( 範例 )

程序名稱的命名和變數名稱相同,在同一模組不能使用相同的程序名稱。例如:顯示課程名稱的程序,如下所示:Sub PrintCourseTitle() Dim title As String title = "Visual Basic 程式設計 " lblOutput.Text = title & vbNewLineEnd Sub

Page 7: 第 7 章 程序與函數

7-2-1 建立 Sub 程序 - 呼叫程序

在程式碼呼叫程序是使用 Call 指令,我們只需在其後加上程序名稱即可,如下所示:Call PrintCourseTitle()

上述程序呼叫因為程序沒有參數,也可以省略括號,或不使用 Call 關鍵字也可以,如下所示:PrintCourseTitle

Page 8: 第 7 章 程序與函數

7-2-2 建立 Function 函數 -建立函數 ( 說明 )

Function 函數類似 Sub 程序只是改為使用 Function和 End Function 包圍,其主要差異是函數有傳回值。

在 Visual Basic 程式的函數語法,如下所示:[Public | Private] Function 名稱 [As 資料型別 ] 程式區塊 Return 值 | 名稱 = 值End Function

As 之後是傳回值的資料型別。函數傳回值是使用Return 關鍵字來傳回值,或將函數名稱指定成需要傳回的值。

Page 9: 第 7 章 程序與函數

7-2-2 建立 Function 函數 -建立函數 ( 範例 )

例如:計算體脂肪 BMI 值的 BMI() 函數,如下所示:Function BMI() Dim result, h, w As Double h = CDbl(txtHeight.Text) w = CDbl(txtWeight.Text) result = w / ( h * h ) Return resultEnd Function

上述函數使用 Return 傳回最後結果。

Page 10: 第 7 章 程序與函數

7-2-2 建立 Function 函數 - 呼叫函數

函數因為擁有傳回值,通常都是在指定敘述來執行函數呼叫,並且位在指定敘述的右邊,如下所示:lblOutput.Text = BMI()

將上述 lblOutput 標籤控制項的 Text 屬性指定成函數的傳回值。

Page 11: 第 7 章 程序與函數

7-2-3 擁有參數的程序與函數 -建立 ( 說明 )

在 Visual Basic 程式建立擁有參數的程序與函數,其語法如下所示:[Public | Private] [Sub | Function] 名稱 ( 參數 1 , 參數 2, …) 程式區塊 [Return 值 | 名稱 = 值 ]End [Sub | Function]

上述括號的參數稱為「正式參數」( Formal Parameters )或「假的參數」( Dummy Parameters )。

Page 12: 第 7 章 程序與函數

7-2-3 擁有參數的程序與函數 -建立 ( 程序範例 )

例如:顯示提示文字和訊息的程序,如下所示:Sub PrintMessage(msg As String, prompt As String) lblOutput.Text &= prompt & " : " & msg & vbNewLineEnd Sub

上述程序擁有 2 個參數,因為參數不只一個,所以使用 "," 逗號分隔。

Page 13: 第 7 章 程序與函數

7-2-3 擁有參數的程序與函數 -建立 ( 函數範例 )

例如:溫度轉換函數,如下所示:Function ConvertTemperature(C As Integer) Dim F As Single F = ( 9.0 * C ) / 5.0 + 32.0 Return FEnd Function

上例, BMI(h,w) 函數如何實作?

Page 14: 第 7 章 程序與函數

7-2-3 擁有參數的程序與函數 - 呼叫

程序與函數如果有參數,在呼叫時可以指定不同的參數值,擁有參數的程序呼叫,如下所示:PrintMessage(txtMsg.Text, txtPrompt.Text)

每一個正式參數都需對應同型別的實際參數。同樣的,擁有參數的函數呼叫,如下所示:output = " 華氏溫度: " & ConvertTemperature(C)

上述程式碼呼叫函數來轉換攝氏成為華氏溫度。

Page 15: 第 7 章 程序與函數

7-2-4 傳值或傳址呼叫程序與函數 - 說明

程序與函數不只能夠傳遞參數,不同的參數傳遞方式將影響傳入參數的變數值。 Visual Basic 語言提供兩種參數傳遞方式,如下表所示:

呼叫方式關鍵字 說明傳值呼叫 ByVal 將變數的值傳入程序或函數,並不會變更原變數的值傳址呼叫 ByRef 將變數實際記憶體儲存的位址傳入,所以在程序和函數如果

變更參數的變數值,也會同時更改變數值

Page 16: 第 7 章 程序與函數

7-2-4 傳值或傳址呼叫程序與函數 - 範例

Visual Basic 程序與函數預設使用傳值呼叫,如果沒有指明,預設是 ByVal (舊版 Visual Studio 會自動加上 ByVal ,新版並不會),如下所示:Sub SubByVal(C As Integer) …..End Sub

事實上,只有傳址的程序或函數才需要特別指名ByRef ,如下所示:Sub SubByRef(ByRef C As Integer) ….End Sub

Page 17: 第 7 章 程序與函數

傳值或傳址呼叫程序 實作傳址呼叫程序

交換— swap(ByRef a, ByRef b)

Page 18: 第 7 章 程序與函數

7-2-5 強迫跳出程序與函數 - 跳出程序

在執行程序時如果需要中斷程序的執行,可以使用 Exit Sub 跳出程序,如下所示:

Sub Counter(times As Integer) …… Exit Sub ……End Sub

Page 19: 第 7 章 程序與函數

7-2-5 強迫跳出程序與函數 - 跳出函數

如果執行函數時需要中斷函數的執行,請使用 Exit Function 跳出函數,如下所示:

Function SumOne2N(n As Integer) …… Exit Function ……End Function

強迫跳出Exit forExit doExit subExit Fucntion

Page 20: 第 7 章 程序與函數

7-3-1 變數範圍 - 說明 「變數範圍」( Scope )是當程式執行時,變數可以讓

程序或函數內或其他程式區塊存取的範圍。 變數依宣告位置擁有三種範圍,如下所示:

區塊範圍( Block Scope ):變數只能在區塊內使用 If/End if 、 Select Case/End Case 、 For/Next 、 Do/Loop

區域範圍( Local Scope ):在 Sub 和 Fucntion 內使用Dim 宣告的變數,變數只能在程序或函數內使用,程序或函數外程式碼並無法存取此變數。

全域範圍( Global Scope ):在 Module/Class 中,以Dim 或 Private 宣告在程序和函數外,則該 Module/Class的程序和函數都可以存取此變數。

Page 21: 第 7 章 程序與函數

7-3-2 全域變數的應用

實作人氣投票

Page 22: 第 7 章 程序與函數

7-3-2 全域變數的應用 -Visual Basic 專案

Visual Basic 專案: Ch7-3-2

在 Windows 應用程式建立熱門手機品牌的票選系統,只需選取選項按鈕後,按下按鈕即可參與票選,程式會記錄總投票人數和各手機廠牌的票數,如右圖所示:

與上例同義,自行練習。

Page 23: 第 7 章 程序與函數

7-4 常用的內建函數 請參見課程網頁的整理

常用內建函數 VB2012 內建函數一覽表( MSDN 線上)

Page 24: 第 7 章 程序與函數

7-5 遞迴函數

請參見課程網頁的整理