• 沒有找到結果。

第五章 副程式與函式 (1)

N/A
N/A
Protected

Academic year: 2022

Share "第五章 副程式與函式 (1)"

Copied!
26
0
0

加載中.... (立即查看全文)

全文

(1)

Visual Basic 程式設計

翁傳奇

P9521773@fcu.edu.tw

逢甲大學資訊工程研究所

(2)

第五章 副程式與函式 (1)

副程式

函式

遞迴

(3)

為什麼要有副程式?

程式中有許多重覆的動作

„

如下頁的例子

思考方向:

„

將某獨立、常重覆的部份發包出去

„

營養午餐與外叫便當的例子

(4)

為什麼要有副程式? (cont.)

*

**

***

****

****

***

**

*

For i=1 to 8

If (i<=4) Then For j=1 to i Print “*”;

Next j Else

For j=1 to 9-i Print “*”;

Next j End if Print Next i

For i=1 to 8

If (i<=4) Then

>>畫i個*<<

Else

>>畫9-i個*<<

End if Print Next i

化簡

(5)

副程式-Subroutine

在程式編輯器輸入

„

Private Sub printStar()

[Private|Public|Static] Sub 副程式名 ([參數]) 程式碼

End Sub

(6)

副程式-Subroutine (cont.)

使用工具列

„

選擇程式編輯器,按Tool/Add Procedure

(7)

第一個副程式

Private Sub printStar (num As Integer) Dim i As Integer

For i=1 to num Print “*”;

Next I Print End Sub

For i=1 to 8

If (i<=4) Then

1.[printStar i]

2.[Call printStar(i)]

Else

1.[printStar 9-i]

2.[Call printStar(9-i)]

End if Print Next i

VB會自動宣告num

副程式呼叫方式:

1. 副程式名 參數

2. Call 副程式名(參數)

(8)

副程式之輸入參數與輸出參數

Call sumxy( s, a, b) Sub sumxy(sum, x, y)

Private Sub Form_Activate() a = 10 : b = 20

Call sumxy(s, a, b) print “兩數的和為”; s End Sub

Sub sumxy(sum, x, y) sum = x + y

End Sub

對副程式sumxy而言,

x與y是它的“輸入參數”,

而sum則是它的“輸出參數”

(9)

函式 - Function

函數的定義及用法與副程式很相似,不 過它是利用函數名稱來傳遞結果,而不 像副程式是靠參數來傳遞。

Function 函數名稱(參數列) as 型別  …

函數名稱 = 運算式  …

End Function

(10)

函式 - Function (cont.)

函式:有傳回值的副程式

[Private|Public|Static] Function 函式名 _ ([參數]) [As] 型別

程式碼

End Function

Private Function Add _

(x As Integer, y As Integer) As Integer Add=x+y

End Function

VB會自動宣告一變數,

其名稱為函式名

(11)

函式 - Function (cont.)

Private Function Add _

(x As Integer, y As Integer) As Integer Add=x+y

End Function

Private Sub Form_Click() print Add(1,2)

End Sub

結果是?

把函式當副程式 1. Add 1,2

2. Call Add(1,2)

(12)

常用元件介紹

- 選項按鈕 (Option Button)

每組元件只能有一個被勾選

若想要讓程式執行時,能夠先選擇Option2,

則可以在Form_Load輸入Option2.value = true 屬性

Caption 出現的文字 Enabled 是否有致能 Value True

False

(13)

常用元件介紹

- 選項按鈕 (Option Button) (cont.)

Private Sub Command1_Click()

If Option1.Value = True Then

Label1.Caption = "你按了Option1按鈕"

ElseIf Option2.Value = True Then

Label1.Caption = "你按了Option2按鈕"

End IfEnd Sub End Sub

(14)

常用元件介紹

- 核取方塊 (Check Box)

每個元件獨立

屬性

Caption 出現的文字 Enabled 是否有致能

Value

0 未勾選

1 勾選

2 ……

(15)

常用元件介紹

- 核取方塊 (Check Box) (cont.)

Try it!

統計個數

(16)

常用元件介紹

- 框架 (Frame)

利用“框架”,可以將表單中屬於同一類的控制 項圍起來,有下列的好處:

„ 讓表單的排列比較整齊,也顯得有條理。

„ 在框架內的控制項屬於同一群,“搬移”框架時,其 內的各控制項也會隨著搬移,如果需要調整表單上 的配置,也會比較省事。

„ 如果沒有設定框架,表單上所有的選項按鈕算是同 一群,只能選取一項。如果有不同類的選項按鈕,

個別要選取一項,此時可分別用框架圍起來(每個 框架內的選項按鈕,可以也只能選取一項)。

(17)

常用元件介紹

- 框架 (Frame) (cont.)

Try it!

(18)

母件與子件的觀念

如前面介紹的框架,可以在內部安置一些有關 或同一類的控制項,“搬移”框架時,其內的控 制項,也會隨著移動。“刪除”時也是其內的所 有控制項皆會隨著消失。

又如表單與其上面的所有控制項,都有同樣的

“主從關係”,這種關係有如母子,因此分別稱 為“母件”與“子件”。

„ 母件:可背負其他物件的物件

„ 子件:被背負的物件

(19)

課堂練習 – 計算電費

假設電力公司的電費分“家庭用”與“營業用”兩 類,其計費方式如下:

„ 家庭用:按累進方式,分為下列三段:

Š 100度以下部份,每度2.4元

Š 101~300度部份,每度3.1元

Š 301度以上部份:每度4.1元

„ 營業用:按累進方式,分為下列兩段:

Š 300度以下部份,每度5.9元

Š 301度以上:每度6.7元

„ 註:累進收費方式以家用而言,即如果超過100度,100度部份每度 為2.4元,超過部份才以較高費率計算。

請設計一個表單程式輸入用電度數與種類,計

算並輸出應繳電費。

(20)

課堂練習 – 計算電費 (cont.)

表單設計

Label1 text1

Frame1

Option1 Option1

Label2 Label4

Command1 Command2

(21)

課堂練習 – 計算電費 (cont.)

撰寫兩個副程式分別計算營業用電費以及家庭用電費。

Form_Load:下載表單後,選家庭用電

home (副程式):計算家庭用電費

Command1_Click

business (副程式):計算營業用電費

Command2_Click:結束程式執行

(22)

遞迴 - Recursion

在函式,呼叫自己

要確定程式會停止

Private Function A() A()

End Function

Private Function Sum ( x As Integer) As Integer If (x=1) then

Sum=1 Else

Sum=Sum(x-1)+x End If

初始值的設定很重要!!

(23)

費式數列 - Fibonacci Series

0, 1, 1, 2, 3, 5, 8, ……

請問第100項為多少? 

„

用迴圈

„

用遞迴

0 1 1 2 3 5 8

(24)

費式數列-使用迴圈

Private Function Fab(x As Integer) As Integer Dim a,b,i As Integer

a=0 b=1

If (x=0 Or x=1) then Fab=x

Else

For i=2 to x Fab=a+b

a=b b=Fab Next i End If

(25)

費式數列-使用遞迴

Private Function Fab(x As Integer) As Integer If (x=0 Or x=1) then

Fab=x Else

Fab=Fab(x-2)+Fab(x-1) End If

End Function

(26)

階乘

離開副程式與函式

„

Exit Sub

„

Exit Function

5!=1*2*3*4*5 求某數的階乘

„

使用迴圈

„

使用遞迴 試試看

參考文獻

相關文件

第五章 多項式.

隨機實驗是一種過程 (process),是一種不能確定預知會

此行文字的特別意義,是讓 MATLAB 藉由 lookfor 指令 搜尋並顯示此函式用途。.. 語法:

在現行的 99

 MATLAB 程式使用 pass-by-value 的方 式,進行程式與函式間的溝通聯絡,當 程式呼叫函式時, MATLAB

文章末段說:「這注定了你給與別人的有限

目錄的字型不一致 不一致 不一致 不一致 縮排格式.

int main(int argc, char** argv).