Presentation is loading. Please wait.

Presentation is loading. Please wait.

計算機程式 Visual BASIC 程式設計

Similar presentations


Presentation on theme: "計算機程式 Visual BASIC 程式設計"— Presentation transcript:

1 計算機程式 Visual BASIC 程式設計
四海工商專校 電算中心 廖文淵

2 Chapter 4 程式設計基礎 1. 註解、換行接續與合併陳述 2. 輸出與輸入敘述 3. 變數、資料型態 4. 運算 5. 流程圖
6. 程序及函數

3 1. 註解 (Comment) 程式註解符號 : ‘ 知會 Visual Basic 忽略該符號後面的內容 方便設計者易於閱讀 方便維護
程式註解符號 : ‘ 知會 Visual Basic 忽略該符號後面的內容 方便設計者易於閱讀 方便維護 ' 這是從螢幕左邊開始的程式註解 Text1.Text = “Hi!” ‘ 在文字方塊中放入文字 在同一程式行中,程式註解可以接在陳述式的後面,但也可佔據一整行

4 換行接續符號 一個空白後面跟著一個底線 將一個較長的陳述式分成好幾行。 容易閱讀 在同一個程式行內,不能在換行接續符號後面加上程式註 解
Data1.RecordSource = "SELECT * FROM Titles, Publishers" _ & "WHERE Publishers.PubId = Titles.PubID" _ & "AND Publishers.State = 'CA'" .. 在同一個程式行內,不能在換行接續符號後面加上程式註 解

5 多個陳述式合併到同一程式行 使用冒號 (:) 隔開 為了程式碼更易於閱讀,最好還是一行放置一個陳述式
Text1.Text = "Hello" : Red = 255 : Text1.BackColor = Red 為了程式碼更易於閱讀,最好還是一行放置一個陳述式

6 2. 輸出敘述 Print 與Cls 敘述 Cls敘述(ClearScreen): Print 敘述格式: Print 字串[,;...]
Print “**Welcome**” Print 3+4+5 ? 3+4+5 ? “Hello” X=5: Y=20 Print X; “+”; Y; “=“; X+Y Print X; “-”; Y; “=“; X-Y Print “X * Y =“; X*Y = 25 =-55 X * Y = 100 Cls敘述(ClearScreen): 清除螢幕內容

7 3. 變數 (Variable) 當執行應用程式期間,使用變數暫存數值。 變數必須有 可以把變數看作記憶體中存放未知數值的預留位置
變數名稱 : 用來引用該變數所包含的值 資料型態 : 決定變數可以儲存的資料種類 有效範圍 : 變數可以被引用的區域 可以把變數看作記憶體中存放未知數值的預留位置 控制項、表單、物件類別和模組亦以變數名稱表示 物件的屬性可視為此物件內的變數: 物件名稱 . 屬性

8 變數名稱 eg. TempVal 必須以字母開頭 不能包含句號、型態宣告字元 不能和關鍵字同名 不得超過 255 個字元
控制項、表單、物件類別和模組名稱無法超過40個字元 在同一個有效範圍內必須是唯一的 有效範圍就是變數可以被引用的區域,例如程序、表單等等 eg. TempVal Sep95Sales Im 94Sales (Error) Print (Error)

9 資料型態 整數 (Integer) 長整數 (Long Integer) 單倍精確浮點數 (Single Precision)
雙倍精確浮點數 (Double Precision) 貨幣 (Currency) 字串 (String) 位元組 (Byte) 日期 (Date) 布林 (Boolean) 物件 (Object) 任意資料 (Variant)

10 資料型態的性質

11 整數(Integer) 不含小數點的10進位數值資料,包括正、負整數與零 佔2Bytes
範圍: -215~ (-32768~32767) eg. Total% = Print Total% Sum% = (Error) 1 byte Sing bit -215 215-1

12 長整數(Long Integer) 不含小數點的10進位數值資料,包括正、負整數與零 佔4Bytes
範圍: -231~ ( ~ ) eg. Total& = 1 byte Sing bit -231 231-1

13 8進位整數(Octal Integer) 表示法: 不含小數點的8進位正整數數值資料 佔2Bytes
範圍: 0~ (0~65535) 1 byte 1 byte &O0=(0)10 &O177777=(216-1)10 表示法: &O321=(321)8=(209)10 &O67==(67)8=(55)10

14 16進位整數(Hexal Integer) 表示法: 不含小數點的16進位正整數數值資料 佔2Bytes
範圍: 0~ (0~65535) 1 byte 1 byte &H0000=(0)10 &HFFFF=(216-1)10 表示法: &H21=(21)16=(33)10 &H105 =(105)16=(261)10

15 Example 4-1 Private Sub Form_Click() a% = 243.57
Print "243.57的整數為"; a% '顯示整數 Print "500 * 300 ="; 500& * '顯示長整數 Print "八進位的50 = 十進位的"; &O '顯示八進位 Print "十六進位的50= 十進位的"; &H '顯示十六進位 End Sub

16 單倍精確浮點數數 (Single Precision)
以指數型式(科學記號)表示的10進位數值資料,包括正、負實數與零 佔 4Bytes 範圍: E38 ~ E-45 E-45 ~ E38 表示法: number E  ee ,ee表示 1 到 2 位正整數 Total! = 2.31E+12= 2.31*1012 Sum! = E-43= *10-43

17 Example 4-2 Private Sub Form_DblClick() a = 1.123457E+07!
b = E+17 Print a '顯示正單倍精確浮點數 Print b '顯示負單倍精確浮點數 Print a + b '顯示單倍精確浮點數運算 Print a * b '顯示單倍精確浮點數運算 End Sub

18 雙倍精確浮點數實數 (Double Precision)
佔 8Bytes 範圍: E308 ~ E-324 E-324 ~ E308 表示法: number D  eee ,eee 表示 1 到 3 位正整數 eg. Total# = 2.31D+201= 2.31*10201 Sum# = 4.501D-121= *10-121 a# = D-005=

19 Example 4-3 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) a# = b# = E+150 Print a '顯示正雙倍精確浮點數 Print b '顯示負雙倍精確浮點數 Print a + b '顯示相加運算值 Print a * b '顯示相乘運算值 End Sub

20 貨幣 (Currency) 佔 8Bytes 範圍: 表示法: eg. 有效位數 : 整數15位,小數 4 位 變數名稱@
~ 有效位數 : 整數15位,小數 4 位 表示法: eg. = Print

21 字串(String) 大小寫英文字母、數字、特殊符號,以 ””雙引號框住表示
大小寫英文字母、數字、特殊符號,以 ””雙引號框住表示 字串是由數個字元組成,每個字元則以ASCII code表示,佔 1 Byte (中文佔2Bytes) eg. “Hi” : 2Bytes “四海工專” : 2*4=8Bytes Print “VB”+”應用“&”程式“ expr$ = “a+b=c” “I do!” I d o ! ASCII Code

22 Example 4-4 Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Cls '清除螢幕 Print “VB” & “應用” & “程式” '顯示中英字串相連 Print "24" + "68" '顯示數值字串相連 Print " ="; '顯示加法運算值 End Sub

23 位元組 (Byte) 如果變數包含二進位資料,則將它宣告成 Byte 資料型態 不含小數點的無符號型態資料,可視為正整數 佔 1Bytes
範圍: 0~ 28-1 (0~255) eg. Dim ThisByte As Byte ThisByte = 1001

24 日期 (Date) 數字資料型態轉換成 Date : 佔 8 Bytes 範圍 : 西元1/1/100~ 12/31/9999
小數點左邊的數值表示日期資訊(自1990算起) 小數點右邊的數值則代表時間,午夜為 0,正午為 0.5 負數表示公元 1899 年 12 月 31 日之前的日期。 佔 8 Bytes 範圍 : 西元1/1/100~ 12/31/9999 表示法 : #date time#

25 Example SomeDate=# 3-1-96 13:30 # SomeDate=# March 1, 1996 1:30 pm#
Now = #9/26/ :00 pm# Dim t As Date t = 0.5 (1900/1/1 6:00pm) t = (1900/1/31 9:00pm) t = (1900/12/30 0:00pm)

26 布林 (Boolean) 0, -1兩個值 0:False, -1:True
若變數只包含簡單的「True/False」、「Yes/No」、 「On/Off」等資訊,則可將它宣告為 Boolean 型態 Boolean 的預設值為 False Dim blnRunning As Boolean ' 檢視磁帶是否在執行中 If Recorder.Direction = 1 Then blnRunning = True End if

27 物件 (Object) 以 32 位元(4 bytes)的位址來儲存 該位址可引用應用程式中或其它應用程式中的物件
Dim objDb As Object Set objDb = OpenDatabase ("c:\vb5\Biblio.mdb")

28 任意資料 (Variant) Variant 變數能夠儲存所有系統定義型態的資料
不必在這些資料的型態間進行轉換;Visual Basic 會自動完成任何必要的轉換 Total = “Visual Basic” Print Total Total = print Total Total = Total = # #

29 VarType函數

30 Example 4-5 Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) a = #8/11/98# If VarType(a) = 7 Then Print a; "的資料型態為日期/時間" Else Print a; "的資料型態不是日期/時間 " End If End Sub

31 Empty值 Variant變數指定之前,值為 Empty 可在運算式中使用它;並視為 0 或長度為零的字串
與 0、長度為零的字串 (“”) 或 Null 值都不同的特殊值 IsEmpty 函數 : 測試變數值是否為 Empty If IsEmpty (Z) Then Z = 0 .. 任何數值(包括 0、 長度為零的字串或 Null )指定給 將 Variant 變數,Empty 數值就會消失

32 Null值 通常用於資料庫應用程式,以表示未知的資料或遺失的資 料 用 Null 關鍵字來指定變數值為 Null。
通常用於資料庫應用程式,以表示未知的資料或遺失的資 料 用 Null 關鍵字來指定變數值為 Null。 Z = Null IsNull 函數 : 測試 Variant 變數是否包含 Null 值 If IsNull (X) And IsNull (Y) Then Else Z = 0 End If

33 宣告變數(1) 事先將變數的相關資訊通知給程式知道 在變數名稱之後,直接加入資料型態宣告字元 整數變數(%) : 2 Bytes
Num%=-6 Y#= Nm$=“Hello” Z!=5.931

34 宣告變數(2) Dim 變數名稱 [As 資料型態] 在程序內部變數,只在該程序執行時才存在 程序一結束,該變數的值也就消失了
程序中的變數值對程序來說是區域性的,即無法在一個程序中存取另一個程序中的變數 故可在不同程序中使用相同變數名稱 資料型態 Integer 整數變數 Long 長整數變數 Single 單倍精數變數 Double 雙倍精數變數 String 字串變數 Byte 位元 Date 日期 Currency 貨幣 Boolean 布林 Object 物件

35 隱含宣告 隱含宣告 : 在使用一個變數之前,不必先宣告這個變數 方法方便,但是如果把變數名稱拼錯了的話,會導致一個難以察覺的錯誤
Function SafeSqr (num) TempVal = Abs (num) SafeSqr = Sqr (TempVal) End Function 方法方便,但是如果把變數名稱拼錯了的話,會導致一個難以察覺的錯誤

36 明確宣告 明確宣告 : 須事先設定,若遇到一未明確宣告的變數名稱,會發出警告 在表單模組、一般模組或物件類別模組的宣告區塊中加入陳述式
Option Explicit 「工具」/「選項」/「編輯器」頁籤 / 「要求變數宣告」: 會在任何新模組中自動插入 Option Explicit 陳述式 但不會在已建立的模組中插入

37 變數的有效範圍 程序層次變數 (區域變數) 模組層次變數 Private 變數 Public 變數 (整體變數) Static 變數名稱
Dim 變數名稱 變數對於所在程序是私有的 模組層次變數 Private 變數名稱 變數對於所在模組是私有的 Public 變數 (整體變數) Public 變數名稱 變數可用於所有模組

38 靜態變數 (Static) 區域變數 (Dim) 靜態變數 (Static) 只有宣告它們的程序在執行時,區域變數才存在
程序執行完畢,所含區域變數的值就消失,記憶體也會被釋放 當下一次執行該程序時,它的所有變數將重新初始化 靜態變數 (Static) 在應用程式執行階段,將區域變數宣告成靜態的區域變數,其值會一直存在 語法: static 變數名稱

39 專案 模組 1 程序 1 程序 2 模組 2 Public A Public B Private I Private C Dim D
Private G Static H 模組 2 Public E Private F

40 常數 為有意義的名稱,取代那些永遠不變的數值或字串 改進程式碼的可讀性和可維護性 兩種來源: 內建或系統定義的常數 : 自訂常數 :
常數名稱採用大小寫混合的格式 字首代表定義常數的物件程式庫名稱 來自 Visual Basic 物件程式庫的常數以 “vb” 開頭 vbTileHorizontal 自訂常數 : [Public|Private] Const 常數名稱[As 資料型態] = expression

41 4. 運算式(Expression) 運算式由運算子(operators)與運算元(operands)所組成。 A=B+C
A,B,C : 運算元(operands) =,+ :運算子(operators) 一元運算子: - (負), NOT 二元運算子: +, -, *, /, \, MOD, ^, >, <, =, AND, OR, XOR, …

42 算術運算式(Arithmetic) +, -, *, /, \(整數除法), MOD(整數餘數), ^ Print 5+7-8
Print 42 Mod 4 Print 42.71\5.21 42.71 ==> 43 (四捨五入) ==> 5 43\5 = (取整數部分) Print Mod 5.21 43 Mod 5 = 3

43 運算優先順序(Precedence) 算術運算符號優先順序為先乘除後加減,優先順序相同者由左至右運算。 ( ) ^ - (負號) *, /
( ) ^ - (負號) *, / \ MOD +,- X*((A*B)/(C*D) (X^2+Y^2)^0.5 (A*B/C)^(1/3) A*(-X*X)

44 Example 4-6 Private Sub Form_Click() a = 10 b = 5 c = 2
Print "a="; a '顯示a值 Print "b="; b '顯示b值 Print "c="; c '顯示c值 Print "a ^ 3 / b * c ="; a ^ 3 / b * c '顯示運算值 Print "-a \ b * c ="; -a \ b * c '顯示運算值 End Sub

45 關係運算式(Relation) 兩項資料比較之間之關係,成立則為真(True),以-1 表示; 若不成立則為假(False),以0 表示。
>, <, =, >=, <=, <> , Like 資料型態須相同始可比較 字串資料比較以ASCII值比較 Print 8<4 Print “BO_” < “BOY” Print 7 = 3 + 5 Print “Abc” > “ABC” Print 4 * 6 / 2 < 9 \

46 Like (相似)關係運算式 用來比較兩個字串的相似情況
語法: 結果=比較字串 Like 樣本字串 若兩字串相符合,則為真(True),以-1 表示; 若不相符合則為假(False),以0 表示 樣本字串適用於萬用字元 eg. “aa” Like a*a ‘aaaa.....aaaa “aBc” Like a?a ‘a_a “f” Like [a-z] ‘a,b,c,d,e,f, z “0” Like [!0-9] ‘!0, !1, !2, !3, , !9 “aaa” Like a#a ‘a 0,1,2...,9 a

47 Example 4-7 Private Sub Form_Click()
Print "40\6*2<10/5+15=";40\6*2<10/5+15 Print "(4>17)*9\7>(2<4)+10*4=";(4>17)*9\7>(2<4)+10*4 End Sub

48 Example 4-8 Private Sub Form_Click() Cls '清除螢幕
check1 = “tvbs” Like “tv*” ‘設定比較運算 check2 = "ABc" Like "a?a" check3 = Null Like "a" check4 = "egg5" Like "e[!a-f]?[3-6]" check5 = "f16lkk" Like "?[1-9]*" Print "check1="; check '印出結果 Print "check2="; check2 Print "check3="; check3 Print "check4="; check4 Print "check5="; check5 End Sub

49 邏輯運算式(Logic) 邏輯運算關係,成立則為真(True),以-1 表示; 若不成立則為假(False),以0 表示。
Not, And, Or, Xor, Eqv, Imp Not(A) A Not(A) T F A And B B A And B T F A

50 B A Or B T F A A Xor B A Eqv B A Imp B

51 運算優先順序(Precedence) 邏輯運算優先順序: 運算優先順序:
Not > And > Or > Xor > Eqv > Imp 運算優先順序: 算術運算 > 關係運算 > 邏輯運算 (2=4-1) Or (2.5 = 5/2) 3 > 0 And 4 <> 4 Not (5 < 10) * 20 Mod 4 ^ 2 Print 4 ^ 2 \ 3 Xor 8 + 6

52 Example 4-9 Private Sub Form_Activate() Cls
Print " NOT(9>5)="; Not (9 > 5) Print "(5 > 4) And (9 > 5)="; (5 > 4) And (9 > 5) Print "(7 > 8) Or (NOT FALSE)="; (7 > 8) Or (Not False) Print "(5 > 2) Xor (9 > 10)="; (5 > 2) Xor (9 > 10) Print "(5 < 7) Eqv (8 < 11)="; (5 < 7) Eqv (8 < 11) Print "(6 < 8) Imp (7 > 11)="; (6 < 8) Imp (7 > 11) End Sub

53 5. 流程圖 程式設計的步驟: 瞭解問題 設計解題程序 撰寫程式 測試程式 “設計解題程序“可運用流程圖來處理
流程圖是利用一些簡單的幾何圖形線條及一些數學關係符號來描述程式處理的步驟

54 流程圖符號 開始、結束 輸入、輸出 處理、運算 決策 迴圈 磁碟 流程方向 報表輸出 連結點

55 Example 開始 結束 Private Sub Command1_Click() Cls A = Val(Text1.Text)
B = Val(Text2.Text) C = Val(Text3.Text) T=(B^2-4*A*C)^0.5 X1=-(2*A+T)/B X2=-(2*A-T)/B Print X1, X2 End Sub 開始 INPUT A, B, C T=(B^2-4*A*C)^0.5 X1=-(2*A+T)/B X2=-(2*A-T)/B PRINT X1, X2 結束

56 6. 程序及函數 將程式區分為較小的邏輯元件,這些元件稱為程序 每一程序均為一具有完整敘述之程式 每一次程式負責執行某一特定功能
主程式負責整個程式執行的核心及連繫各次程式 程式結構圖: 主程式 程序 2 程序 1 程序 3 程序 2-1 程序 2-2 程序 2-3 程序 3-1

57 程式的執行流程 主程式 程序 1 程序 2 程序 2-1 程序 2-3 程序 3-1 程序 3

58 程序的種類 Sub 程序: Function 程序: Property 程序: 不會傳回值,可分為 會傳回值
一般程序 事件程序 Function 程序: 會傳回值 Property 程序: 可以傳回並指定值,以及設定對物件的引用

59 流程圖符號及程序的優點 流程圖符號: 使用程序的優點: 避免程式的重覆,節省時間及程式儲存空間 程式結構化,提高可讀性,易修改、偵錯與維護
程式模組化,一個程式中的程序,往往不必修改或只 需稍作變動,便可以成為另一個程式的構件

60 Sub 程序 語法: 每次呼叫程序都會執行 Sub 和 End Sub 之間的陳述式
[Private|Public][Static] Sub 程序名稱 (參數列) 敘述 End Sub 每次呼叫程序都會執行 Sub 和 End Sub 之間的陳述式 可將 Sub 程序放入一般模組、物件類別模組和表單模組中 所有模組中的 Sub 程序都預設為 Public,故在應用程式中可隨處呼叫它們 程序的引數類似變數的宣告,宣告從呼叫程序傳遞進來的 數值

61 一般程序 用於執行特定的工作 必須由應用程式來指定性的啟動它 (必須呼叫它)
將公共陳述式放在一個分隔的程序 (一般程序) 並由事件程序來呼叫它。這樣一來就不必重覆程式碼,也容易維護應用程式 如 Print, Load, Unload 等方法 Print 6+7, a Load Form1

62 事件程序(1) 通常總是處於空閒狀態,直到為回應使用者或系統引發的事件才會呼叫它
當物件識別出某一個事件的發生時,它便自動使用事件的 相對名稱來啟動該事件程序 事件程序在物件和程式碼之間建立聯繫,是附加在表單和 控制項上的 使用者的動作 作業系統 其他應用程式 應用程式本身 (程式碼引發) 物件事件 (Event) 視窗訊息 (Message) 事件程序 event procedure 引發 產生 觸發

63 事件程序(2) ‧一個控制項的事件程序名稱是由控制項的 (在 Name 屬性 中設定 )的實際名稱、底線 (_) 和事件名稱所組合起來
語法: Private Sub 控制項名稱_事件名稱(參數列 ) statements End Sub Private Sub Form_事件名稱(參數列 ) statements 「物件方塊」選取一個物件,並從「程序」方塊中選取一個程序,就可在「程式碼編輯器」的視窗中選取一個範本

64 呼叫 Sub 程序的方法 呼叫 Sub 程序必需是一個獨立的陳述式 呼叫 Sub 程序有兩種方法:
Call 程序名稱(引數列) 程序名稱 引數1, 引數2, ..... 當您使用 Call 語法時,引數必須在括號內 若省略 Call 關鍵字,則也必須省略引數兩邊的括號

65 呼叫SUB程序 : : Call 程序名稱 [(參數列)] 程序名稱 引數列 End Sub 定義副程式(被呼叫程序) 主程式 (呼叫程序)
程序敘述 End Sub 主程式 (呼叫程序) : Call 程序名稱 [(參數列)] 程序名稱 引數列 End Sub 呼叫程序 返回

66 Function 程序 包含內建或內部函數,如 Val、Sqr、Cos 或 Chr 自訂 Function 程序
語法: Private|Public][Static]Function 程序名稱 (引數列) [As type] statements End Function 可讀取引數、執行一系列陳述式並改變其引數的數值 可傳回一個值給呼叫它的程序

67 呼叫 Function 程序的方法 在運算式中寫上它的名稱 像SUB程序的方法: Call Function名稱(引數列)
Print 10 * ToDec X = ToDec If ToDec = 10 Then Debug.Print "Out of Range" X = AnotherFunction ( 10 * ToDec) 像SUB程序的方法: Call Function名稱(引數列) Function名稱 引數1, 引數2, ..... 當用這種方法呼叫函數時,會捨棄傳回值

68 呼叫 Function 程序 : : 程序敘述 變數=函數名稱 [(參數列)] End Sub 定義函數式(被呼叫程序)
End Function 主程式 (呼叫程式) : 變數=函數名稱 [(參數列)] Call Function名稱(引數列) Function名稱 引數列 End Sub 呼叫函數 返回主程式

69 Sub 與 Function 程序之差異 Function 程序具有資料型態,用以決定傳回值的型態(如果 沒有 As 子句,預設的資料型態為 Variant) Function Hypotenuse (A As Integer, B As Integer) As String 透過在運算式的右邊包含函數程序名稱和引數 (returnvalue = function),來呼叫函數 可以將 procedurename 自身指定給一個變數,就可傳回這 個值。當 Function 程序傳回一個數值時,該值就成為此運 算式的一部份 strX = Hypotenuse (Width, Height)

70 Example strX = Hypotenuse (Width, Height) ...
Function Hypotenuse (A As Integer, B As Integer) As _ String Hypotenuse = Sqr (A ^ 2 + B ^ 2) End Function .... Label1.Caption = Hypotenuse (CInt (Text1.Text), _ CInt (Text2.Text)) strX = Hypotenuse (Width, Height) ...

71 呼叫其它模組中的程序 在專案中的任何地方都能呼叫其它模組中的公用程序 所有表單模組的外部呼叫,都必須指定包含此程序的表單 模組
所有表單模組的外部呼叫,都必須指定包含此程序的表單 模組 如果在表單模組 Form1 中包含 SomeSub 程序,則您可以 使用下面的陳述式來呼叫 Form1 中的程序: Call Form1.SomeSub(arguments)


Download ppt "計算機程式 Visual BASIC 程式設計"

Similar presentations


Ads by Google