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

Slides:



Advertisements
Similar presentations
南台科技大學 機械工程系 班級 : 車輛三甲 學號 : 學生 : 黃郁鈞.  BMI 值的計算就是 :  體重 / 身高 x 身高  身高需換算成公尺單位計算.
Advertisements

第一單元 建立java 程式.
第4章 VB.NET程式與 網頁製作的應用 主講人: 姚奉緒 M
課程名稱:程式設計 授課老師:________
第七章 副程式.
08 CSS 基本語法 8-1 CSS 的演進 8-2 CSS 樣式規則與選擇器 8-3 連結HTML 文件與CSS 樣式表
程式語言(I)- Visual Basic 6.0 第 9 章 結構化程式設計
第7章 C#函數與.NET Framework類別函數庫
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
Chapter 5 遞迴 資料結構導論 - C語言實作.
Chapter 5 迴圈.
Chapter 7 Subroutine and Function
BLANK overview.
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
課程名稱:程式設計 授課老師:________
Visual Basic 6.0 學習範本 第三章 基本資料型態.
Visual C++ introduction
第二章 Visual Basic语言基础.
第3章 變數、資料型別與運算子.
程式語言 -Visual Basic 變數、常數與資料型態.
Ch12 數字類別 JAVA程式設計入門(II).
ASP动态网页设计实用教程 主讲教师: 开课单位:.
C語言簡介 日期 : 2018/12/2.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
第6章 函數與巨集 6-1 由上而下的設計方法 6-2 建立函數 6-3 函數的參數呼叫方式 6-4 變數的有效範圍 6-5 遞迴函數
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
第6章 迴圈結構 6-1 計數迴圈 6-2 條件迴圈 6-3 巢狀迴圈 6-4 While/End While迴圈 6-5 跳出與繼續迴圈
安裝JDK 安裝Eclipse Eclipse 中文化
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
第3章 變數、資料型別與運算子 3-1 變數與資料型別的基礎 3-2 變數的命名與宣告 3-3 資料型別 3-4 運算式與運算子
程式語言Visual Basic 傳址與傳值
Ch05 VB.NET的程序與函數 網頁程式設計.
Visual Basic 物件導向程式設計簡介.
新觀念的 VB6 教本 第 6 章 資料型別.
Java 程式設計 講師:FrankLin.
網頁切換移轉 JS vs. ASP.NET.
程式設計實習課(四) ----C 函數運用----
Topic Introduction—RMI
第一單元 建立java 程式.
INDEX 資訊學科種子教師研習 課程說明 教學活動計畫.
第 19 章 XML記憶體執行模式.
第5章 變數、常數與資料型態 [我的主控台程式]
|07 函數.
輸入&輸出 函數 P20~P21.
打地鼠(陣列版).
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
挑戰C++程式語言 ──第8章 進一步談字元與字串
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
C qsort.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
MiRanda Java Interface v1.0的使用方法
函數應用(二)與自定函數.
陣列與結構.
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
What is “this”? 在物件導向程式設計中,類別的定義就是在說明如果創建了“這個物件”的話,它會具有那些屬性與功能,以及這些功能是如何實現的。 而所謂的“這個物件”就以 this 來表示。 當我們在JavaScript與jQuery中寫 script 程式(函式)時,“誰”呼叫這個函式,這個“誰”就是該函式中所謂的.
作業系統實習課(二) -Scheduler-Related System Calls-
Programming & Language Telling the computer what to do
Chapter 6 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
NFC (近場通訊, Near Field Communication) 靜宜大學資管系 楊子青
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
Chapter 4 Multi-Threads (多執行緒).
Develop and Build Drives by Visual C++ IDE
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

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

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

7-1-1 模組的基礎 模組化是把大型功能切割成無數子功能,至於如何切割成一個個子功能的模組(即Visual Basic的模組),屬於結構化分析的範疇,我們最常使用的是由上而下設計方法。 模組化程式設計是將大程式切割成一個個小程式。以Visual Basic來說,模組化的基本單位是程序與函數,因為模組可大可小,可能只擁有單一程序或函數,也可能是整個子功能的函式庫。 不過,每一個程序和函數都可以解決一個小問題,等到所以小問題都解決了,使用程序與函數堆積成的軟體系統或應用程式也就開發完成。

7-1-2 程序與函數是一個黑盒子-說明 程序與函數是一個程式區塊,執行程序與函數稱為函數呼叫(Functions Call),擁有傳回值的程序稱為「函數」(Functions)。 在呼叫時,我們並不需要了解程序與函數內部實際的程式碼,事實上,也不需要知道其細節。程序與函數如同一個「黑盒子」(Black Box),只要告訴我們如何使用黑盒子的「使用介面」(Interface)即可。

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

7-1-2 程序與函數是一個黑盒子-撰寫規則 程序與函數的使用介面需要直接、良好定義和容易了解。 在呼叫程序與函數時,並不需要知道任何有關內部實作的問題,唯一需要知道的是如何使用它的使用介面。 在實作程序與函數時,並不用考量或知道到底是誰需要使用它,只需滿足使用介面定義的輸入參數和傳回值即可。

7-1-2 程序與函數是一個黑盒子-語法與語意 程序與函數的「語法」(Syntax)是說明程序與函數需要傳入何種資料型別的「參數」(Parameters)和傳回值。 「語意」(Semantic)是指出程序與函數可以作什麼事?換句話說,在撰寫程序與函數時,需要了解其語法規則,而在使用程序與函數時需要了解其語意規則,如此才能正確呼叫程序與函數。

7-2 程序與函數 7-2-1 建立Sub程序 7-2-2 建立Function函數 7-2-3 擁有參數的程序與函數 ViLLE – 4.1 建立Sub程序 7-2-2 建立Function函數 ViLLE – 4.2 建立Function函數 7-2-3 擁有參數的程序與函數 ViLLE – 4.3 擁有參數的程序與函數 7-2-4 傳值或傳址呼叫程序與函數 7-2-5 強迫跳出程序與函數

7-2 程序與函數 程序與函數可以將程式中,一些常用的共同程式碼獨立成區塊,也就是建立結構化程式設計的模組。 Visual Basic程序可以分為兩種,如下: 事件處理程序:事件處理程序是處理指定事件的程序(一定是Sub,因為不會有傳回值)。 一般程序:將程式區塊使用一個程序或函數名稱來代替,以便呼叫程序與函數來執行特定功能。Visual Basic程序分為Sub程序和Function函數兩種。

7-2-1 建立Sub程序-建立程序(說明) Visual Basic語言的程序是使用Sub和End Sub包圍的程式區塊,在Sub關鍵字後是程序名稱,程序並沒有傳回值。 在Visual Basic程式建立程序的語法,如下所示: [Public | Private] Sub 名稱 程式區塊 End Sub 上述Sub指令前的Public或Private是存取修飾子。

7-2-1 建立Sub程序-建立程序(範例) 程序名稱的命名和變數名稱相同,在同一模組不能使用相同的程序名稱。例如:顯示圖書書名的程序,如下所示: Sub PrintBookTitle() Dim title As String title = "Visual Basic程式設計" lblOutput.Text = title & vbNewLine End Sub

7-2-1 建立Sub程序-呼叫程序 在程式碼呼叫程序是使用Call關鍵字,我們只需在其後加上程序名稱即可,如下所示: Call PrintBookTitle() 上述程序呼叫因為程序沒有參數,可以省略括號,或不使用Call關鍵字也可以,如下所示: PrintBookTitle 上述程式碼也是呼叫程序PrintBookTitle()。

7-2-1 建立Sub程序- Visual Basic專案 Visual Basic專案:Ch7-2-1 在Windows應用程式建立PrintAuthor()和PrintBookTitle()程序後,在事件處理程序呼叫這2個程序 ,如下圖所示:

7-2-1 建立Sub程序-程序的執行過程 Visual Basic程式碼是如何執行程序與函數?以本節程式範例Button1_Click()事件處理程序的執行順序為例,程式是在第2列呼叫PrintBookTitle()程序,其執行順序就是跳到此程序的第1列,在執行完第5列後返回呼叫點,如下圖所示:

ViLLE – 4.1 建立Sub程序 請啟動ViLLE,在【四. 程序與函數】目錄下,選【1. 建立Sub程序】,按【Run】鈕模擬執行此範例程式,如下圖所示:

7-2-2 建立Function函數- 建立函數(說明) Function函數類似Sub程序只是改為使用Function和End Function包圍,其主要差異是函數有傳回值。 在Visual Basic程式的函數語法,如下所示: [Public | Private] Function 名稱 [As 資料型別] 程式區塊 Return 值 | 名稱 = 值 End Function As之後是傳回值的資料型別。函數傳回值是使用Return關鍵字來傳回值,或將函數名稱指定成需要傳回的值。

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 result End Function 上述函數使用Return傳回最後結果。

函數因為擁有傳回值,通常都是在指定敘述來執行函數呼叫,並且位在指定敘述的右邊,如下所示: 7-2-2 建立Function函數-呼叫函數 函數因為擁有傳回值,通常都是在指定敘述來執行函數呼叫,並且位在指定敘述的右邊,如下所示: lblOutput.Text = BMI() 將上述lblOutput標籤控制項的Text屬性指定成函數的傳回值。

7-2-2 建立Function函數-Visual Basic專案 Visual Basic專案:Ch7-2-2 在Windows應用程式輸入身高和體重後,可以計算體脂肪的BMI值,如下圖所示:

ViLLE – 4.2 建立Function函數 請啟動ViLLE,在【四. 程序與函數】目錄下,選【2. 建立Function函數】,按【Run】鈕模擬執行此範例程式,如下圖所示:

7-2-3 擁有參數的程序與函數-說明 程序與函數不只是將重複程式區塊抽出成獨立區塊,還可以新增程序與函數的參數。 在呼叫時傳入參數值後,相同的程序與函數就可以得到不同的執行結果。

在Visual Basic程式建立擁有參數的程序與函數,其語法如下所示: 7-2-3 擁有參數的程序與函數- 建立(說明) 在Visual Basic程式建立擁有參數的程序與函數,其語法如下所示: [Public | Private] [Sub | Function] 名稱(參數1 ,參數2, …) 程式區塊 [Return 值 | 名稱 = 值] End [Sub | Function] 上述括號的參數稱為「正式參數」(Formal Parameters)或「假的參數」(Dummy Parameters)。

7-2-3 擁有參數的程序與函數- 建立(程序範例) 例如:顯示提示文字和訊息的程序,如下所示: Sub PrintMessage(msg As String, prompt As String) lblOutput.Text &= prompt & ":" & msg & vbNewLine End Sub 上述程序擁有2個參數,因為參數不只一個,所以使用","逗號分隔。

7-2-3 擁有參數的程序與函數- 建立(函數範例) 例如:溫度轉換函數,如下所示: Function ConvertTemperature( _ C As Integer) Dim F As Single F = ( 9.0 * C ) / 5.0 + 32.0 Return F End Function

程序與函數如果有參數,在呼叫時可以指定不同的參數值,擁有參數的程序呼叫,如下所示: 7-2-3 擁有參數的程序與函數-呼叫 程序與函數如果有參數,在呼叫時可以指定不同的參數值,擁有參數的程序呼叫,如下所示: PrintMessage(txtMsg.Text, txtPrompt.Text) 每一個正式參數都需對應同型別的實際參數。同樣的,擁有參數的函數呼叫,如下所示: output = "華氏溫度:" & ConvertTemperature(C) 上述程式碼呼叫函數來轉換攝氏成為華氏溫度。

7-2-3 擁有參數的程序與函數-Visual Basic專案 Visual Basic專案:Ch7-2-3 在Windows應用程式輸入字串和攝氏溫度後,可以顯示擁有提示文字的訊息文字和轉換的華氏溫度,如下圖所示:

ViLLE – 4.3 擁有參數的程序與函數 請啟動ViLLE,在【四. 程序與函數】目錄下,選【3. 擁有參數的程序與函數】,按【Run】鈕模擬執行此範例程式,如下圖所示:

7-2-4 傳值或傳址呼叫程序與函數-說明 程序與函數不只能夠傳遞參數,不同的參數傳遞方式將影響傳入參數的變數值。Visual Basic語言提供兩種參數傳遞方式,如下表所示:

7-2-4 傳值或傳址呼叫程序與函數-範例 Visual Basic程序與函數預設使用傳值呼叫,如果沒有指明,預設是ByVal(舊版Visual Studio會自動加上ByVal,新版並不會),如下所示: Sub SubByVal(C As Integer) ….. End Sub 事實上,只有傳址的程序或函數才需要特別指名ByRef,如下所示: Sub SubByRef(ByRef C As Integer) ….

7-2-4 傳值或傳址呼叫程序與函數- Visual Basic專案 Visual Basic專案:Ch7-2-4 在Windows應用程式建立SubByVal()傳值程序和SubByRef()傳址程序,然後分別將參數值加1,可以測試呼叫SubByVal()和SubByRef()後參數值的變化,如下圖所示:

在執行程序時如果需要中斷程序的執行,可以使用Exit Sub跳出程序,如下所示: 7-2-5 強迫跳出程序與函數-跳出程序 在執行程序時如果需要中斷程序的執行,可以使用Exit Sub跳出程序,如下所示: Sub Counter(times As Integer) …… Exit Sub End Sub

如果執行函數時需要中斷函數的執行,請使用Exit Function跳出函數,如下所示: 7-2-5 強迫跳出程序與函數-跳出函數 如果執行函數時需要中斷函數的執行,請使用Exit Function跳出函數,如下所示: Function SumOne2N(n As Integer) …… Exit Function End Function

7-2-5 強迫跳出程序與函數- Visual Basic專案 Visual Basic專案:Ch7-2-5 在Windows應用程式可以顯示計數字串和計算1加到N的總和,程序與函數是使用Exit Sub和Exit Function結束程序與函數的執行,如下圖所示:

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

7-3-1 變數範圍-說明 「變數範圍」(Scope)是當程式執行時,變數可以讓程序或函數內或其他程式區塊存取的範圍。 變數依宣告位置擁有三種範圍,如下所示: 區塊範圍(Block Scope):在程式區塊內使用Dim宣告的變數,變數只能在區塊內使用,在區塊外的程式碼並無法存取這些變數。 區域範圍(Local Scope):在程序和函數內使用Dim宣告的變數,變數只能在程序或函數內使用,程序或函數外程式碼並無法存取此變數。 全域範圍(Global Scope):變數如果是在模組/類別中,以Dim或Private宣告在程序和函數外,則該模組/類別檔案的程序和函數都可以存取此變數。

7-3-1 變數範圍-Visual Basic專案 Visual Basic專案:Ch7-3-1 在Windows應用程式宣告全域和區域變數A、B,SubA()和SubB()程序都將變數A設為3,變數B設為4,可以測試程序與函數的變數範圍,如下圖所示:

7-3-2 全域變數的應用-說明 Visual Basic全域變數的主要目的是儲存跨不同程序與函數間的共享資料,或是在重複執行程序時需要保留的一些資料。

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

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

7-4-1 日期/時間函數-常用 日期/時間函數可以處理日期/時間格式資料和進行分析。常用日期/時間函數,如下表所示:

7-4-1 日期/時間函數-DateDiff()函數 DateDiff(單位字串, DateTime1, DateTime2) 上述DateDiff()函數能夠計算後2個參數的時間差,第1個參數字串設定後2個日期/時間差是使用秒、分或小時等來比較。

7-4-1 日期/時間函數-DateAdd()函數 DateAdd(單位字串, Number, DateTime) 上述DateAdd()函數使用與DateDiff()函數相同的單位字串,能夠將第3個參數的日期/時間加減參數Number的值。

7-4-2 資料型別檢查函數 資料型別檢查函數能夠檢查Visual Basic變數的資料型別,如下表所示: 函數名稱 函數說明 IsDate(stmt) 如果運算式是Date型別或能夠轉換成Date型別的字串傳回True;否則傳回False IsNumeric(stmt) 如果整個stmt都是數字傳回True;否則傳回False IsArray(var) 如果參數的變數是指向陣列的話傳回True;否則傳回 False IsNothing(stmt) 如果運算式的Object變數沒有指派物件傳回 True;否則傳回False

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) ChrW(65) A CDate(stmt) Date CDate("2015/12/31") CDate("4:35:47 PM") 2015/12/31 下午 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(#2015/12/31#) CStr(#12/31/2015 12:00:01 AM#) 537.324 2015/12/31 上午 12:00:01

7-4-4 數學函數-亂數與四捨五入函數 Visual Basic亂數與四捨五入函數,其參數stmt為數值或運算式,如下表所示:

7-4-4 數學函數-Math類別的數學常數 System.Math類別提供數學常數和函數的類別方法,因為是類別方法,所以程式是直接使用類別名稱Math來呼叫方法,如下所示: Math.Sqrt(x) 上述Sqrt()方法可以計算平方根。在System.Math類別擁有2個數學常數,其說明如下表所示:

7-4-4 數學函數-Math類別的數學函數

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

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

7-5-2 遞迴的階層函數-1 在第6章筆者是使用迴圈來計算階層函數的值,現在我們可以改用遞迴方式來處理同一個問題。例如:計算4!階層函數的值,如下所示: 4!=4*3*2*1=24 因為階層函數本身擁有遞迴特性。我們可以將4!的計算分解成子問題,如下所示: 4!=4*(4-1)!=4*3! 現在3!的計算成為一個新的子問題,必須先計算出3!值後,才能處理上述的乘法。

7-5-2 遞迴的階層函數-2 同理將子問題3!繼續分解,如下所示: 最後我們知道1!的值為1,接著向上可以計算出2!~4!,如下所示: 3! = 3*(3-1)! = 3*2! 2! = 2*(2-1)! = 2*1! 1! = 1*(1-1)! = 1*0! = 1*1 = 1 最後我們知道1!的值為1,接著向上可以計算出2!~4!,如下所示: 2! = 2*(2-1)! = 2*1! = 2 3! = 3*(3-1)! = 3*2! = 3*2 = 6 4! = 4*(4-1)! = 4*3! = 24 上述階層函數中一層層的子問題都是一個階層函數,只是範圍改變逐漸縮小到終止條件。以階層函數為例是N=0。等到到達終止條件,階層函數值也就計算出來。

7-5-2 遞迴的階層函數-階層的遞迴函數 Function Factorial(N As Integer) If (N = 1) Then Return 1 Else Return N * Factorial(N - 1) End If End Function

7-5-2 遞迴的階層函數-Visual Basic專案 Visual Basic專案:Ch7-5-2 在Windows應用程式建立遞迴階層函數,只需輸入階層數,就可以計算指定階層數的階層函數值,如下圖所示:

End