1 / 21

程式語言I

程式語言I. 第7章 陣列與排序. 7-1 一維陣列. 陣列(Array) 是指一群相同屬性的變數,藉由改變陣列的 索引值(Index) ,就可以處理陣列中每一個變數的資料,當需要解決同性質的變數時,應用陣列才可以簡化處理的程式,尤其是資料排序及搜尋,更顯得非常重要。 範例:以下表示5個人的成績. 一維陣列 宣告 (一). 陣列在使用之前,必須先宣告每個陣列的大小以保留記憶體空間。 語法: Dim 陣列名稱(索引 ) As 資料型態 說明: 1.陣列名稱與變數名稱規則相同。

esma
Download Presentation

程式語言I

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 程式語言I 第7章 陣列與排序

  2. 7-1 一維陣列 • 陣列(Array)是指一群相同屬性的變數,藉由改變陣列的索引值(Index),就可以處理陣列中每一個變數的資料,當需要解決同性質的變數時,應用陣列才可以簡化處理的程式,尤其是資料排序及搜尋,更顯得非常重要。 • 範例:以下表示5個人的成績

  3. 一維陣列 宣告 (一) • 陣列在使用之前,必須先宣告每個陣列的大小以保留記憶體空間。 • 語法: 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)

  4. 一維陣列 宣告 (二) 型態String Dim B(5) As String For i = 0 To 4 B(I) = inputbox(“請輸入五次字串”) Next For I = 0 To 4 print B(I) Next

  5. 一維陣列 宣告 (二) • 宣告陣列時,可以指定成從其它的索引值開始,也就是指定一個範圍。 • 範例: DIM A(1 TO 10) DIM B(-3 TO 3)

  6. 如何設定陣列元素值 • 若是數值型態,陣列名稱(位置)=數值 • Ex: A(0)=5 (第1個元素設為5) • 若是字串 • Ex: B(2) = “Hello” (第三個元素設為hello)

  7. 補充:OPTION BASE 宣告 語法 : OPTION BASE [ 0 或 1 ] 功能 : 指定索引值由 0 或 1 開始。 說明 : 由於下界的預設值是 0,因此無需 使用 Option Base 陳述式。 範例 : Option base 1 Dim MyArray(20) Lower = LBound(MyArray) ‘傳回 1

  8. 陣列 淨空(設為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

  9. 補充:陣列函數Lbound() • 取得索引值的上下限 • VB提供二個函數 LBound( ) 與 UBound( ),可以取得陣列索引值的上限與下限。 • 範例 : • Dim AnyArray(10) • Lower = Lbound(MyArray) ‘傳回 0。 • Lower = Ubound(MyArray) '傳回 10。

  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, ……

  11. 7-2 二維陣列與多維陣列 • 陣列變數的括號內若有二個索引,稱為二維陣列,三個索引以上,稱為多維陣列。 • 語法: Dim 陣列名稱(索引下限,上限) As 資料型態 • 說明: 1.陣列名稱與變數名稱規則相同。 2.As 資料型態省略,VB預設Variant。 3.索引上下值從-32768到32767都可使用。

  12. 二維陣列宣告 範例 宣告: 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)

  13. 陣列元素個數計算

  14. 補充: 7-3 靜態陣列與動態陣列 • 動態變數陣列(Dynamic Array)是在程式執行時,根據實際程式的需要,配置所需要的記憶體空間。 • 語法: Dim 陣列名稱() As 資料型態 首先宣告一個未指定大小(空)的陣列 ReDim 列名稱(下限 to 上限) As 型態 • 說明: 1.靜態陣列只能宣告一次,不能再重複宣告。 2.ReDim可以重複宣告新陣列大小,但不能連續改變資料型態。 3.每次程式執行ReDim即會清除陣列內容。

  15. 7-4 靜態物件陣列 • 物件陣列又稱為控制項陣列(Control Array),是表單上相同物件集合在一起,這些同類的物件都具有相同的名稱(屬性Name),且其屬性Index將是構成陣列的基本索引值,用來分辦個別的物件。 • 語法: ReDim 陣列名稱(下限 to 上限) As 型態 • 說明: 靜態陣列只能宣告一次,不能再重複宣告。

  16. 7-6 排序 (Sort) • 排序(Sort)是指依照資料的特性,由大到小或由小到大排列資料的次序,以利資料搜尋。 • 知名的排序方法有氣泡排序法(Bubble Sort)、選擇排序法(Selection Sort)、插入排序法(Insertion Sort)、謝耳(Shell)排序法等等。 • 由大到小,稱為降冪(遞減)排序。 • 由小到大,稱為升冪(遞增)排序。

  17. 氣泡排序法程式範例 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

  18. 搜尋 • 搜尋(Search)是指從一群資料中找到符合條件的資料。通常會運用某個欄位來作查詢的鍵值(Key),例如電話號碼、身份證、會員編號、或學號。 • 最常用的搜尋方法有循序搜尋法和二分搜尋法。

  19. 循序搜尋程式範例 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

  20. 二分搜尋 • 利用二分搜尋法之前,必須確定所搜尋的陣列元素已經是遞增或遞減的順序。 A(0) A(1) A(2) A(3) A(4) A(5) A(6) A(7) 12 17 22 23 33 38 40 47 後半部 前半部 中間元素

  21. 二元搜尋程式範例 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

More Related