210 likes | 336 Views
程式語言I. 第7章 陣列與排序. 7-1 一維陣列. 陣列(Array) 是指一群相同屬性的變數,藉由改變陣列的 索引值(Index) ,就可以處理陣列中每一個變數的資料,當需要解決同性質的變數時,應用陣列才可以簡化處理的程式,尤其是資料排序及搜尋,更顯得非常重要。 範例:以下表示5個人的成績. 一維陣列 宣告 (一). 陣列在使用之前,必須先宣告每個陣列的大小以保留記憶體空間。 語法: Dim 陣列名稱(索引 ) As 資料型態 說明: 1.陣列名稱與變數名稱規則相同。
E N D
程式語言I 第7章 陣列與排序
7-1 一維陣列 • 陣列(Array)是指一群相同屬性的變數,藉由改變陣列的索引值(Index),就可以處理陣列中每一個變數的資料,當需要解決同性質的變數時,應用陣列才可以簡化處理的程式,尤其是資料排序及搜尋,更顯得非常重要。 • 範例:以下表示5個人的成績
一維陣列 宣告 (一) • 陣列在使用之前,必須先宣告每個陣列的大小以保留記憶體空間。 • 語法: Dim 陣列名稱(索引) As 資料型態 • 說明: 1.陣列名稱與變數名稱規則相同。 2.宣告陣列時,可以指定陣列元素(element)的數量和資料型態,例如:Dim B(4) as Integer,陣列B共有5個元素個元素均為整數,在每一個元素中的數字稱為索引(index)。 (B(0),B(1),B(2),B(3),B(4)) 3.若未使用Option Base敍述設定索引下界,預設下界值為0 。 • 範例 :Dim MyArray(20) as Integer =>21個元素(0~20)
一維陣列 宣告 (二) 型態String Dim B(5) As String For i = 0 To 4 B(I) = inputbox(“請輸入五次字串”) Next For I = 0 To 4 print B(I) Next
一維陣列 宣告 (二) • 宣告陣列時,可以指定成從其它的索引值開始,也就是指定一個範圍。 • 範例: DIM A(1 TO 10) DIM B(-3 TO 3)
如何設定陣列元素值 • 若是數值型態,陣列名稱(位置)=數值 • Ex: A(0)=5 (第1個元素設為5) • 若是字串 • Ex: B(2) = “Hello” (第三個元素設為hello)
補充:OPTION BASE 宣告 語法 : OPTION BASE [ 0 或 1 ] 功能 : 指定索引值由 0 或 1 開始。 說明 : 由於下界的預設值是 0,因此無需 使用 Option Base 陳述式。 範例 : Option base 1 Dim MyArray(20) Lower = LBound(MyArray) ‘傳回 1
陣列 淨空(設為0) ERASE 語法 :ERASE 陣列名稱 [ ,陣列名稱 ] … 功能 :淨空指定的陣列。(設為0) 範例 : 方法1 Dim NumArray(10) As Integer ' Integer 陣列。 Erase NumArray ‘將每個元件設為 0。 方法2用for loop For I = 0 to 10 NumArray(i) = 0 Next
補充:陣列函數Lbound() • 取得索引值的上下限 • VB提供二個函數 LBound( ) 與 UBound( ),可以取得陣列索引值的上限與下限。 • 範例 : • Dim AnyArray(10) • Lower = Lbound(MyArray) ‘傳回 0。 • Lower = Ubound(MyArray) '傳回 10。
陣列函數Array註. 第8章 • Array函數 : • 指定給被宣告為可變資料型態(Variant)的變數,並使之變成一個陣列。 • 範例 : • MyNum = Array(“零”, “壹”, “貳”, “參”, “肆”, “伍”, “陸") • Num = MyNum(0) ‘Num 的值為 “零"。 • Num = MyNum(5) ‘Num 的值為 “伍"。 例子: Dim A(9) As Integer A(0) = 56: A(1) = 36: A(2) = 66: A(3) = 10:A(4) = 59 A(5) = 3: A(6) = 23: A(7) = 7: A(8) = 9: A(9) = 12 相當於 A = Array(56, 36, 66, 10, 59, 3, 23, 7, 9, 12) ----------------------- A(0)被設為56 , A(1)就被設為36, ……
7-2 二維陣列與多維陣列 • 陣列變數的括號內若有二個索引,稱為二維陣列,三個索引以上,稱為多維陣列。 • 語法: Dim 陣列名稱(索引下限,上限) As 資料型態 • 說明: 1.陣列名稱與變數名稱規則相同。 2.As 資料型態省略,VB預設Variant。 3.索引上下值從-32768到32767都可使用。
二維陣列宣告 範例 宣告: DIM B(2,5) As Integer 說明: 表示有三個(2+1)=3横列(Row),六個(5+1=6)直行(Column)。 行 0 1 2 3 4 5 0 B(0,0) B(0,1) B(0,2) B(0,3) B(0,4) B(0,5) 列 1 B(1,0) B(1,1) B(1,2) B(1,3) B(1,4) B(1,5) 2 B(2,0) B(2,1) B(2,2) B(2,3) B(2,4) B(2,5)
補充: 7-3 靜態陣列與動態陣列 • 動態變數陣列(Dynamic Array)是在程式執行時,根據實際程式的需要,配置所需要的記憶體空間。 • 語法: Dim 陣列名稱() As 資料型態 首先宣告一個未指定大小(空)的陣列 ReDim 列名稱(下限 to 上限) As 型態 • 說明: 1.靜態陣列只能宣告一次,不能再重複宣告。 2.ReDim可以重複宣告新陣列大小,但不能連續改變資料型態。 3.每次程式執行ReDim即會清除陣列內容。
7-4 靜態物件陣列 • 物件陣列又稱為控制項陣列(Control Array),是表單上相同物件集合在一起,這些同類的物件都具有相同的名稱(屬性Name),且其屬性Index將是構成陣列的基本索引值,用來分辦個別的物件。 • 語法: ReDim 陣列名稱(下限 to 上限) As 型態 • 說明: 靜態陣列只能宣告一次,不能再重複宣告。
7-6 排序 (Sort) • 排序(Sort)是指依照資料的特性,由大到小或由小到大排列資料的次序,以利資料搜尋。 • 知名的排序方法有氣泡排序法(Bubble Sort)、選擇排序法(Selection Sort)、插入排序法(Insertion Sort)、謝耳(Shell)排序法等等。 • 由大到小,稱為降冪(遞減)排序。 • 由小到大,稱為升冪(遞增)排序。
氣泡排序法程式範例 Private Sub Form_Activate() A(1) = 8:A(2)=9:A(3)=7:A(4)=1:A(5)=2 For i = 1 To 4 For j = 1 To 4 If A(i) < A(j+1) Then temp = A(i) A(i) = A(j+1) A(j) = temp End If Next j Next i For i = 1 To 5 Print A(i) Next i End Sub
搜尋 • 搜尋(Search)是指從一群資料中找到符合條件的資料。通常會運用某個欄位來作查詢的鍵值(Key),例如電話號碼、身份證、會員編號、或學號。 • 最常用的搜尋方法有循序搜尋法和二分搜尋法。
循序搜尋程式範例 Private Sub cmdok_Click() nm$(1) = "王大平": nm$(2) = "李一年" nm$(3) = "賀大明": nm$(4) = "陳世平“ nm$(5) = "柯一信" Flag=true For i = 1 To 5 '假設有五筆資料 If nm$(i) = “王大平” Then Print “找到了” Flag=false ‘旗標設為否 End If Next I If Flag then Print ”找不到“ End sub
二分搜尋 • 利用二分搜尋法之前,必須確定所搜尋的陣列元素已經是遞增或遞減的順序。 A(0) A(1) A(2) A(3) A(4) A(5) A(6) A(7) 12 17 22 23 33 38 40 47 後半部 前半部 中間元素
二元搜尋程式範例 Private Sub cmdok_Click() nm$(0) = “24": nm$(1) = “30“:nm$(2) = “35" nm$(3) = “67“:nm$(4) = “77" snm = “67": low = 0: high = 4 Do num = (low + high) \ 2 If nm$(num) = snm Then Exit Do If nm$(num) > snm Then high = num - 1 Else low = num + 1 End If Loop Until low > high Print “找到”;nm$(num) End Sub