第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 vb.net...

33
7 7 第 第第第第第 第 第第第第第 7-1 7-1 第第第第第第第 第第第第第第第 7-2 7-2 VB.NET VB.NET 第第第第第第 第第第第第第 7-3 7-3 第第第第第第第第第第 第第第第第第第第第第 7-4 7-4 VB.NET VB.NET 第第第第第第第 第第第第第第第 7-5 7-5 第第第第 第第第第

Post on 20-Dec-2015

278 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

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

Page 2: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-1 7-1 模組化程式設計模組化程式設計 7-1-1 7-1-1 模組的基礎模組的基礎 7-1-2 7-1-2 程序函數是一個黑盒子程序函數是一個黑盒子

Page 3: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-1 7-1 模組化程式設計模組化程式設計 目前軟體系統或應用程式的功能愈來愈強目前軟體系統或應用程式的功能愈來愈強

大,使用者的需求也水漲船高,從前一個大,使用者的需求也水漲船高,從前一個人可以寫出的試算表程式,幾個人開發的人可以寫出的試算表程式,幾個人開發的UNIXUNIX 系統將成為神話,模組化程式設計在系統將成為神話,模組化程式設計在應用程式開發上也就愈顯其重要性。應用程式開發上也就愈顯其重要性。

Page 4: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-1-1 7-1-1 模組的基礎模組的基礎 現在的軟體系統或應用程式都需要大量的現在的軟體系統或應用程式都需要大量的

人員參與分析、設計與開發,因此將一個人員參與分析、設計與開發,因此將一個大型應用程式所需的功能分割成一個個獨大型應用程式所需的功能分割成一個個獨立的子功能,就成為非常重要的工作。立的子功能,就成為非常重要的工作。

模組化是把大型的功能切割成無數的子功模組化是把大型的功能切割成無數的子功能,至於如何切割成一個個子功能的模組,能,至於如何切割成一個個子功能的模組,就屬於結構化分析的範疇,我們最常使用就屬於結構化分析的範疇,我們最常使用的就是由上而下設計方法。的就是由上而下設計方法。

Page 5: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-1-2 7-1-2 程序函數是一個黑盒子程序函數是一個黑盒子 程序函數是一個程式區塊,我們執行程序函數時程序函數是一個程式區塊,我們執行程序函數時

稱為呼叫(稱為呼叫( Subroutines CallSubroutines Call),),在呼叫時並不在呼叫時並不需要了解程序函數內部實際的程式碼,只要告訴需要了解程序函數內部實際的程式碼,只要告訴我們如何使用這個黑盒子的「使用介面」我們如何使用這個黑盒子的「使用介面」(( InterfaceInterface ))即可,如下圖所示:即可,如下圖所示:

Page 6: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-2 7-2 VB.NETVB.NET 的程序與函數的程序與函數 7-2-1 7-2-1 建立建立 SubSub 程序程序 7-2-2 7-2-2 建立建立 FunctionFunction 函數函數 7-2-3 7-2-3 擁有參數的程序與函數擁有參數的程序與函數 7-2-4 7-2-4 傳值或傳址呼叫程序與函數傳值或傳址呼叫程序與函數 7-2-5 7-2-5 強迫跳出程序與函數強迫跳出程序與函數

Page 7: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-2 7-2 VB.NETVB.NET 的程序與函數的程序與函數 -- 種類種類

VB.NETVB.NET 的程序可以分為兩種,的程序可以分為兩種,如下所示:如下所示:•事件處理程序:事件處理程序:事件處理程序是處理指定事件的程事件處理程序是處理指定事件的程

序(一定是序(一定是 SubSub ,,因為不會有傳回因為不會有傳回值),值), WindowsWindows 應用程式都是使用應用程式都是使用 ClickClick 事件處事件處理程序執行所需的功能。理程序執行所需的功能。

•一般程序:一般程序:將程式區塊使用一個程序函數名稱來代將程式區塊使用一個程序函數名稱來代替,以便呼叫程序函數執行特定的功能,替,以便呼叫程序函數執行特定的功能, VB.NETVB.NET的程序分為的程序分為 SubSub 程序和程序和 FunctionFunction 函數兩種,函數函數兩種,函數和程序的差別在於函數擁有傳回值,而程序沒有。和程序的差別在於函數擁有傳回值,而程序沒有。

Page 8: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-2-1 7-2-1 建立建立 SubSub 程序程序 -- 語法語法 SubSub 程序就是一個程式區塊的程序就是一個程式區塊的 VB.NETVB.NET 程程

式碼,使用式碼,使用 SubSub和和 End SubEnd Sub 指令包圍,指令包圍,然後以一個程序名稱命名,程序並沒有傳然後以一個程序名稱命名,程序並沒有傳回值。回值。

VB.NETVB.NET 程序的語法,如下所示:程序的語法,如下所示:[[Public | Private] Sub Public | Private] Sub 名稱名稱 程式區塊程式區塊End SubEnd Sub

Page 9: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-2-1 7-2-1 建立建立 SubSub 程序程序 -- 範例範例 程序名稱的命名和變數名稱相同,在同一程序名稱的命名和變數名稱相同,在同一

個模組不能使用相同的程序名稱。一個程個模組不能使用相同的程序名稱。一個程序的範例,如下所示:序的範例,如下所示:Sub ShowMessage()Sub ShowMessage()

lblOutput.Text = "VB.NETlblOutput.Text = "VB.NET 程式設計程式設計 ""End SubEnd Sub

上述程式碼是上述程式碼是 ShowMessageShowMessage 程序,因為程序,因為它並沒有傳回值。它並沒有傳回值。

Page 10: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-2-1 7-2-1 建立建立 SubSub 程序程序 -- 呼叫呼叫 在程式碼呼叫程序是使用在程式碼呼叫程序是使用 CallCall 指令,只需指令,只需

在其後加上程序名稱即可,如下所示:在其後加上程序名稱即可,如下所示:Call ShowMessage()Call ShowMessage()

上述程序呼叫因為程序沒有參數可以省略上述程序呼叫因為程序沒有參數可以省略括號,不使用括號,不使用 CallCall 指令也可以,如下所示:指令也可以,如下所示:ShowMessageShowMessage

Page 11: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-2-2 7-2-2 建立建立 FunctionFunction 函數函數 -- 語法語法 FunctionFunction 函數類似函數類似 SubSub 程序只是改為程序只是改為

FunctionFunction和和 End FunctionEnd Function 包圍,其主要包圍,其主要的差異是函數擁有傳回值。的差異是函數擁有傳回值。

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

Page 12: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-2-2 7-2-2 建立建立 FunctionFunction 函數函數 -- 範例範例 函數的範例,如下所如下所示:函數的範例,如下所如下所示:

Function One2Ten()Function One2Ten() Dim intI, intTotal As IntegerDim intI, intTotal As Integer For intI = 1 To 10For intI = 1 To 10 IntTotal = intTotal + intIIntTotal = intTotal + intI Next intINext intI Return intTotalReturn intTotalEnd FunctionEnd Function

上述上述 One2TenOne2Ten 函數是從函數是從 11 加到加到 1010 ,最後結果是,最後結果是變數變數 intTotalintTotal ,,使用使用 ReturnReturn 指令傳回最後的結指令傳回最後的結果。果。

Page 13: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-2-2 7-2-2 建立建立 FunctionFunction 函數函數 -- 呼叫呼叫 因為函數擁有傳回值,通常都是在指定敘因為函數擁有傳回值,通常都是在指定敘

述中執行呼叫,並且是在指定敘述的右邊述中執行呼叫,並且是在指定敘述的右邊呼叫,如下所示:呼叫,如下所示:lblOutput.Text = One2Ten()lblOutput.Text = One2Ten()

上述上述 lblOutputlblOutput 標籤控制項的標籤控制項的 TextText 屬性指屬性指定成函數的傳回值。定成函數的傳回值。

Page 14: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-2-3 7-2-3 擁有參數的程序與函數擁有參數的程序與函數 -- 語語法法

在在 VB.NETVB.NET 建立擁有參數的程序與函數,其語法建立擁有參數的程序與函數,其語法如下所示:如下所示:

[[Public|Private] [Sub|Function] Public|Private] [Sub|Function] 名稱名稱 (( 參數參數 1,1, 參數參數 2, 2, ….)….)

程式區塊程式區塊 [[Return Return 值 值 | | 名稱 名稱 = = 值值 ]]End [Sub | Function]End [Sub | Function] 上述括號中的參數稱為「正式參數」(上述括號中的參數稱為「正式參數」( Formal Formal

ParametersParameters ))或「假的參數」(或「假的參數」( Dummy Dummy ParametersParameters),),正式參數是識別字正式參數是識別字。。

Page 15: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-2-3 7-2-3 擁有參數的程序與函數擁有參數的程序與函數 -- 範範例例

擁有參數的程序,如下所示:擁有參數的程序,如下所示:Sub ShowMessage(strMsg As String)Sub ShowMessage(strMsg As String) lblOutput.Text = strMsglblOutput.Text = strMsgEnd SubEnd Sub

擁有參數的函數,如下所示:擁有參數的函數,如下所示:Function N2N(intBegin As Integer, intEnd As Integer)Function N2N(intBegin As Integer, intEnd As Integer) Dim intI, intTotal As IntegerDim intI, intTotal As Integer For intI = intBegin To intEnd Step 1For intI = intBegin To intEnd Step 1 IntTotal = intTotal + intIIntTotal = intTotal + intI Next intINext intI Return intTotalReturn intTotalEnd FunctionEnd Function

Page 16: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

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

如果程序和函數有傳入參數,在呼叫時可以指定如果程序和函數有傳入參數,在呼叫時可以指定不同的參數值,擁有參數的程序呼叫,如下所示:不同的參數值,擁有參數的程序呼叫,如下所示:Call ShowMessage("VB.NETCall ShowMessage("VB.NET 程式設計程式設計 ")")

上述程式碼在呼叫時傳入一個字串,也可以使用上述程式碼在呼叫時傳入一個字串,也可以使用變數,呼叫的參數稱為「實際參數」(變數,呼叫的參數稱為「實際參數」( Actual Actual ParametersParameters),),這就是參數值,需要和正式參這就是參數值,需要和正式參數定義的資料型別相同,每一個正式參數都需要數定義的資料型別相同,每一個正式參數都需要對應一個同型別的實際參數。對應一個同型別的實際參數。

Page 17: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

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

呼叫方式 指令 說明

傳值呼叫 ByVal 只將變數的值傳入程序或函數,並不會變更原變數的值

傳址呼叫 ByRef 將變數實際記憶體儲存的位置傳入,所以在程序和函數如果變更參數變數值,也會同時更改變數值

Page 18: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

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

VB.NETVB.NET 程序函數預設是使用傳值呼叫,如下所示:程序函數預設是使用傳值呼叫,如下所示:' ' 傳值程序傳值程序Sub SubB(ByVal C As Integer)Sub SubB(ByVal C As Integer) … …....End SubEnd Sub

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

Page 19: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-2-5 7-2-5 強迫跳出程序與函數強迫跳出程序與函數 如果在執行程序時需要中斷程序的執行,如果在執行程序時需要中斷程序的執行,

可以使用跳出程序指令,如下所示:可以使用跳出程序指令,如下所示:Exit SubExit Sub

當執行程序時,執行到上述指令就馬上離當執行程序時,執行到上述指令就馬上離開程序,如同結束程序執行。如果在執行開程序,如同結束程序執行。如果在執行函數時需要中斷函數的執行,跳出函數使函數時需要中斷函數的執行,跳出函數使用的指令,如下所示:用的指令,如下所示:Exit FunctionExit Function

Page 20: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-3 7-3 程序與函數的變數範圍程序與函數的變數範圍 7-3-1 7-3-1 變數範圍變數範圍 7-3-2 7-3-2 全域變數的應用全域變數的應用

Page 21: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-3-1 7-3-1 變數範圍變數範圍 「變數範圍」(「變數範圍」( ScopeScope ))是當程式執行時,變數可以讓程序或函數內是當程式執行時,變數可以讓程序或函數內

或其它程式區塊存取的範圍,擁有或其它程式區塊存取的範圍,擁有 33 種範圍,如下:種範圍,如下:• 區塊範圍(區塊範圍( Block ScopeBlock Scope):):在在 If/End IfIf/End If、、 Select Case/End Select Case/End

CaseCase和和 Do While/LoopDo While/Loop 等程式區塊內使用等程式區塊內使用 DimDim 宣告的變數,變宣告的變數,變數只能在區塊內使用,在區塊之外的程式碼並不能存取此變數。數只能在區塊內使用,在區塊之外的程式碼並不能存取此變數。

• 區域範圍(區域範圍( Local ScopeLocal Scope):):在程序和函數內使用在程序和函數內使用 DimDim 宣告的宣告的變數,變數只能在程序或函數內使用,程序或函數外的程式碼並無變數,變數只能在程序或函數內使用,程序或函數外的程式碼並無法存取此變數,稱為「區域變數」(法存取此變數,稱為「區域變數」( Local VariablesLocal Variables)。)。

• 全域範圍(全域範圍( Global ScopeGlobal Scope):):如果變數是在標準模組如果變數是在標準模組 //類別的類別的Module/ End ModuleModule/ End Module和和 Class/End ClassClass/End Class 中,在程序和函數外中,在程序和函數外以以 DimDim或或 PrivatePrivate 宣告,在該標準模組宣告,在該標準模組 //類別檔案的程序和函數都類別檔案的程序和函數都可以存取此變數,稱為「全域變數」(可以存取此變數,稱為「全域變數」( Global VariablesGlobal Variables)。)。

Page 22: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-3-2 7-3-2 全域變數的應用全域變數的應用 在程式的全域變數主要是用來儲存跨不同在程式的全域變數主要是用來儲存跨不同

程序程序 // 函數間的共用資料,或是在重複執行函數間的共用資料,或是在重複執行程序時需要保留的資料。程序時需要保留的資料。

例如:在例如:在 VB.NETVB.NET 建立票選系統,使用者建立票選系統,使用者只需選取選項按鈕後,按下【投票】鈕就只需選取選項按鈕後,按下【投票】鈕就可以參與票選,為了記錄各票選項目的投可以參與票選,為了記錄各票選項目的投票數和總投票數,我們就可以使用全域變票數和總投票數,我們就可以使用全域變數記錄這些資料。數記錄這些資料。

Page 23: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-4 7-4 VB.NETVB.NET 常用的內建函數常用的內建函數 7-4-1 7-4-1 日期日期 // 時間函數時間函數 7-4-2 7-4-2 資料型別檢查函數資料型別檢查函數 7-4-3 7-4-3 資料轉換函數資料轉換函數 7-4-4 7-4-4 數學函數數學函數

Page 24: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-4-1 7-4-1 日期日期 // 時間函數時間函數函數名稱 函數說明

Now 傳回現在的日期和時間

Today 傳回現在的日期

TimeOfDay 傳回現在的時間

Year(Date_format) 傳回日期格式的年份

Month(Date_format) 傳回日期格式的月份值 1~12

Day(Date_format) 傳回日期格式的日數 1~31

Hour(Time_format) 傳回時間格式的小時 0~23

Minute(Time_format) 傳回時間格式小時的分 0~59

Second(Time_format) 傳回時間格式分的秒數 0~59

WeekDay(Date_format) 傳回日期格式參數是星期幾,星期日到六的值為 1~7

Page 25: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-4-2 7-4-2 資料型別檢查函數資料型別檢查函數

函數名稱 函數說明

IsDate(stmt) 如果運算式是 Date型別或能夠轉換成 Date型別的字串傳回

True;否則傳回 False

IsNumeric(stmt) 如果整個 stmt都是數字傳回 True;否則傳回 False

IsArray(var) 如果參數的變數是指向陣列的話傳回 True;否則傳回 False

IsNothing(stmt) 如果運算式的 Object 變數沒有指派物件傳回 True;否則傳

回 False

Page 26: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-4-3 7-4-3 資料轉換函數資料轉換函數函式名稱 傳回型別 範例 結果

CBool(Stmt) Boolean CBool(5 = 5) True

CByte(Stmt) Byte CByte(125.89) 126

CChar(Stmt) Char CChar("BCED") B

ChrW(Exp) Char ChrW(65) A

CDate(Stmt) Date CDate("2002/01/24") CDate("4:35:47 PM")

2002/1/24 下午 04:35:47

CDbl(Stmt) Double CDbl( 234.56789D) 234.56789

CDec(Stmt) Decimal CDec(1234567.0587) 1234567.0587

CInt(Stmt) Integer CInt(2345.678) 2346

CLng(Stmt) Long Clng(15427.45) Clng(15427.55)

15427 15428

CShort(Stmt) Short CShort(100) 100

CSng(Stmt) Single CSng(85.3421105) CSng(85.3421567)

85.34211 85.34216

CStr(Stmt) String CStr(537.324) CStr(#2002/12/19#) CStr(#2/12/2002 12:00:01 AM#)

537.324 2002/12/19 2002/2/12 上午 12:00:01

Page 27: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-4-4 7-4-4 數學函數數學函數 --亂數與四捨五亂數與四捨五入函數入函數

函數名稱 函數說明

Rnd(stmt) 亂數函數,依 Single 資料型別的參數產生單精浮點數的亂數

Randomize(stmt) 使用參數初始化 Rnd 函數的亂數產生器,因為每次會給予新的種子值,所以每次都產生不同的亂數序列,如果沒有參數,使用的是系統計時器傳回的值

Int(stmt) 傳回整數的運算結果,它會無條件捨去數字的小數部份,如果數值為正,傳回整數部分,如果為負數傳回比數值小的負正數

Fix(stmt) 取得數值的整數部分,使用無條件捨去法且不考慮數值為正或負數

Page 28: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-4-4 7-4-4 數學函數數學函數 --MathMath 類別的數類別的數學常數學常數

常數 說明

E 自然數 e= 2.7182818284590452354

PI 圓周率π = 3.14159265358979323846

Page 29: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-4-4 7-4-4 數學函數數學函數 --MathMath 類別的數類別的數學方法學方法 11

方法 說明

Acos(Double) 反餘弦函數

Asin(Double) 反正弦函數

Atan(Double) 反正切函數

Atan2(Double1, Double2)

參數 Double1/Double2的反正切函數值

Cos(Double) 餘弦函數

Exp(Double) 自然數的指數 ex

Page 30: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-4-4 7-4-4 數學函數數學函數 --MathMath 類別的數類別的數學方法學方法 22

Log(Double) Log10(Double)

自然對數,Log10是以 10為底

Pow(Double, Double) 傳回第一個參數為底,第二個參數的次方值

Sign(Type) 傳回參數值的符號,傳回值-1 表示小於 0,0 等於0,1 大於 0,Type 可以是 Decimal、Double、Single、Integer、Short和 Long等

Sin(Double) 正弦函數

Sqrt(Double) 傳回參數的平方根

Tan(Double) 正切函數

Page 31: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-5 7-5 遞迴函數遞迴函數 7-5-1 7-5-1 遞迴函數的基礎遞迴函數的基礎 7-5-2 7-5-2 遞迴的階層函數遞迴的階層函數

Page 32: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-5-1 7-5-1 遞迴函數的基礎遞迴函數的基礎

遞迴的基本定義,如下所示:遞迴的基本定義,如下所示:一個問題的內涵是由本身所定義的話,稱之為遞迴。一個問題的內涵是由本身所定義的話,稱之為遞迴。

當我們使用遞迴觀念所建立的函數稱為遞迴函數,當我們使用遞迴觀念所建立的函數稱為遞迴函數,它是由上而下分析方法的一種特殊的情況,因為子它是由上而下分析方法的一種特殊的情況,因為子問題本身和原來問題擁有相同的特性,只是範圍改問題本身和原來問題擁有相同的特性,只是範圍改變,範圍逐漸縮小到終止條件。所以可以歸納出遞變,範圍逐漸縮小到終止條件。所以可以歸納出遞迴函數的迴函數的 22 個特性,如下所示:個特性,如下所示:• 遞迴函數在每次呼叫時,都可以使問題範圍逐漸的縮小。遞迴函數在每次呼叫時,都可以使問題範圍逐漸的縮小。• 函數需要擁有終止條件,以便結束遞迴函數的執行。函數需要擁有終止條件,以便結束遞迴函數的執行。

Page 33: 第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍

7-5-2 7-5-2 遞迴的階層函數遞迴的階層函數 階層的遞迴函數:階層的遞迴函數:

Function Factorial(ByVal N As Integer)Function Factorial(ByVal N As Integer)

If (N = 1) ThenIf (N = 1) Then

Return 1Return 1

ElseElse

Return N * Factorial(N - 1)Return N * Factorial(N - 1)

End IfEnd If

End FunctionEnd Function