1 / 38

第 7 章 陣列

第 7 章 陣列. 7-1  認識陣列 7-2  陣列的應用. 陣列 A. 名稱. 陣列元素. 陣列註標. 0. 1. 2. 3. 4. …. 第 3 個元素(陣列註標為 2 )中存放的資料為 30 ,可用 A(2) = 30 表示. 一、陣列簡介 -1. 陣列 :由一群資料型別相同的陣列元素所組成 每一個陣列元素可存入一個資料項目,這些資料項目通常會儲存在電腦相鄰的記憶體中 存取陣列元素時,必須使用陣列的 註標. Dim score(49) As Integer. 使用陣列. Dim score1 As Integer

Download Presentation

第 7 章 陣列

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. 第7章 陣列 7-1 認識陣列 7-2 陣列的應用

  2. 陣列A 名稱 陣列元素 陣列註標 0 1 2 3 4 … 第3個元素(陣列註標為2)中存放的資料為30,可用A(2) = 30表示 一、陣列簡介-1 • 陣列:由一群資料型別相同的陣列元素所組成 • 每一個陣列元素可存入一個資料項目,這些資料項目通常會儲存在電腦相鄰的記憶體中 • 存取陣列元素時,必須使用陣列的註標

  3. Dim score(49) As Integer 使用陣列 Dim score1 AsInteger Dim score2 As Integer Dim score3 As Integer : Dim score50 As Integer 使用變數 一、陣列簡介-2 • 使用陣列的好處 • 方便管理程式中需使用多個相同資料型別的資料項目

  4. 陣列名稱:A A(1) = 28 二、一維陣列-1 • 最基本的陣列形式,其註標只有1個 • 適用時機:當在程式中,需要使用多個相同類型之資料項目時 • 例:宣告一個陣列A來存放12個月份的天數

  5. 二、一維陣列-2 • 宣告陣列: • 宣告陣列並設定初始值: • 例:Dim A(3) As Integer Dim A%(3)Dim A() As Integer = {24, 5, 13, 47} Dim陣列名稱 (註標上限) [As資料型別] Dim陣列名稱型別字元(註標上限) Dim陣列名稱[() As 資料型別]= [New資料型別(註標上限)] {陣列元素初始值}

  6. 二、一維陣列-3 • 例:儲存自己喜愛歌手的排名 Dim A() AsString = {"周杰倫", "陳漢典", "阮經天", "柯震東"} MsgBox("我的偶像:" & A(3))

  7. 作業 • 猜猜我最喜歡的偶像 • P.269 猜猜原唱者是誰 • 成績計算(輸入五科成績,並計算總分)

  8. 三、多維陣列-1 • 當陣列的註標個數超過 1 個時,即稱之為多維陣列 • 只有 1 個註標的陣列,稱為一維陣列;2 個註標的陣列,稱為二維陣列,依此類推

  9. 第2維註標值代表科目別(國、英、數) 陣列名稱:score score(0, 2) = 75表示座號為1之同學的數學成績 第1維註標值代表座號 三、多維陣列-2 • 適用時機:當程式中的資料需要使用2個以上的註標值來識別時 • 例:儲存全班同學的國、英、數三科成績

  10. 三、多維陣列-3 • 宣告陣列: • 宣告陣列並設定初始值: Dim陣列名稱 (n1, n2, …) [As資料型別] Dim陣列名稱型別字元(n1, n2, …) Dim陣列名稱[( , …) As 資料型別] = [New資料型別(n1, n2 …)] {{陣列元素初始值}, {陣列元素初始值},…}

  11. 設定第0列A(0, 0)、A(0, 1)、A(0, 2)等3個陣列元素的初始值 Dim A(,) As Integer = {{10, 20, 30}, {40, 50, 60}} 設定第1列A(1, 0)、A(1, 1)、A(1, 2)等3個陣列元素的初始值 三、多維陣列-4 • 例:

  12. 陣列A A(1, 3) 第一維︵列︶ A(3, 1) A(5, 2) 第二維(欄) 二維陣列A(6, 3) 三、多維陣列-5 • 二維陣列示意圖

  13. 第一維 陣列B 1 26 B(1, 0, 1) 0 0 1 83 第二維 B(0, 1, 2) 2 3 17 B(0, 3, 0) 0 1 2 第三維 三維陣列B(1, 3, 2) 三、多維陣列-6 • 三維陣列示意圖

  14. 三、多維陣列-7 • 例:計算B(2, 1)與B(3, 2)相乘的結果 Dim B(3, 2), K, I, J As Integer K = 3 For I = 0 To 3 For J = 0 To 2 B(I, J) = K * (I - 1) + J Next J Next I

  15. 三、多維陣列-8 • 資料結構:可將資料建立成為一個便於取用與處理的結構 • 陣列、堆疊與佇列是3種基本的資料結構 • 堆疊:具有後進先出(LIFO)特性 • 應用:網頁瀏覽器中用來切換上、下一頁的功能 • 佇列:具有先進先出(FIFO)特性 • 應用:印表機列印文件的順序

  16. 三、多維陣列-9 • UBound()方法:傳回陣列註標的上限値 • 語法: • 例:傳回陣列B的上限值(即7)Dim A(7) As Integer Debug.Print(UBound(A)) UBound(陣列名稱[, 欲查詢的維數])

  17. 三、多維陣列-10 • Length()方法:傳回陣列的元素個數 • 語法: • 例:傳回陣列A的元素個數(即4) Dim A(3) As Integer Debug.Print(A.Length) 陣列名稱.Length

  18. 三、多維陣列-11 • ReDim()方法:重新調整陣列大小 • 語法: • 例:將陣列B調整為3 × 4的二維陣列,並保留原陣列內容 Dim B = New Integer(2, 1) {{10, 20}, {30, 40}, {50, 60}}ReDim Preserve B(2, 3) ReDim [Preserve]陣列名稱(陣列上限)

  19. 點播排行榜 • 詩人漫步 • 愛久見人心 • 狂風裡擁抱 • 想幸福的人 • 24 個比利 四、資料排序-1 • 排序:利用「比較」與「交換」的方法,將資料排列成某種特定的順序 • 例:KTV每週依點播數的多寡,製作點播排行榜

  20. 四、資料排序-2 • 氣泡排序法 • 原理:逐次比較相鄰的兩個資料,並依照由大到小或由小到大的排序條件,交換資料的位置,直到所有的資料排序完成 • 資料位置的變動情形,就像氣泡上升的現象,因此被命名為氣泡排序法

  21. 排序前: 說明:    為比較後交換位置; 為比較後不交換位置 接下頁… 四、資料排序-3 • 氣泡排序法實例 1 第一次循環:兩兩比較第1 ~ 5個相鄰的資料,並依照比較結果調整數字的位置,使最大的數字(47)排在第5個位置

  22. 接下頁… 四、資料排序-4 2 第二次循環:兩兩比較第1 ~ 4個相鄰的資料,並依照比較結果調整數字的位置,使第2大的數字(25)排在第4個位置 3 第三次循環:兩兩比較第1 ~ 3個相鄰的資料,並依照比較結果調整數字的位置,使第3大的數字(18)排在第3個位置

  23. 排序後: 四、資料排序-5 4 第四次循環:兩兩比較第1 ~ 2個相鄰的資料,並依照比較結果調整數字的位置,使第4大的數字(12)排在第2個位置

  24. 開始 否(F) j <= (4 - i) 是(T) 宣告變數、陣列, 並設定初始值 否(F) A(j) > A(j + 1) 是(T) i = 1 A(j)與A(j + 1)交換 否(F) i <= (5 - 1) A j = j + 1 是(T) j = 0 A i = i + 1 結束 四、資料排序-6 • 氣泡排序法之流程圖

  25. 四、資料排序-7 • 選擇排序法 • 原理:從第1個數值開始找尋,直到最後一個數值,以選出最小值,再將最小值與第1個數值交換;接著從第2個數值之後的資料列中找出最小值,與第2個數值交換,…依此類推,不斷重複上述步驟,直到所有的資料排序完成

  26. 排序前: S S 說明: 為比較;S為最小值 接下頁… 四、資料排序-8 • 選擇排序法實例 1 第一次循環:在5個數字中比較資料的大小,挑選出最小的數字(12),並與第1個位置的數字(53)交換位置 2 第二次循環:在其餘4個數字中比較資料的大小,挑選出最小的數字(38),並與第2個位置的數字(46)交換位置

  27. S S 排序後: 四、資料排序-9 3 第三次循環:在其餘3個數字中比較資料的大小,挑選出最小的數字(46),並與第3個位置的數字(53)交換位置 4 第四次循環:在其餘2個數字中比較資料的大小,挑選出最小的數字(53),正好位於第4個位置,不需交換位置,排序完成

  28. 否(F) j <= (5 - 1) 開始 是(T) 否(F) 宣告變數、陣列, 並設定初始值 A(S) > A(j) 是(T) i = 0 S = j 否(F) i <= (4 - 1) j = j + 1 A 是(T) A(i)與A(S)交換 S = i A i = i + 1 j = (S + 1) 結束 四、資料排序-10 • 選擇排序法之流程圖

  29. 四、資料排序-11 • Array.Sort()方法:將一維陣列中的資料遞增排序 • 語法: • 例:將陣列中的資料由小到大(遞增)排序Dim A = {56, 84, 12, 68, 99, 6} Array.Sort(A) Array.Sort(陣列名稱)

  30. 四、資料排序-12 • Array.Reverse()方法:反轉一維陣列中的資料 • 語法: • 例:反轉陣列中的資料Dim A = {6, 12, 56, 68, 84, 99} Array.Reverse(A) Array.Reverse(陣列名稱)

  31. 五、資料搜尋-1 • 搜尋:依照特定的條件及方法,在一群資料中尋找符合條件的資料 • 例:護士依病患姓氏 (或身分證字號),找出複診者的病歷資料

  32. 五、資料搜尋-2 • 循序搜尋法(又稱為線性搜尋法) • 原理:搜尋時由第一筆資料開始,逐一檢查資料列中的所有資料項,直到找到要搜尋的資料為止 • 當資料筆數不大或資料列未經排序時,適合使用循序搜尋法來搜尋資料

  33. 1 由第一個位置開始搜尋,未 找到數字15,繼續往下搜尋 2 由第二個位置開始搜尋,未 找到數字15,繼續往下搜尋 3 找到數字15,搜尋結束 五、資料搜尋-3 • 循序搜尋法實例

  34. 開始 否(F) i <= 9 宣告變數、陣列, 並設定初始值 是(T) 否(F) A(i) = Target? 顯示 "找不到" i = i + 1 Target = 15 是(T) 顯示目前資料所在的位置 i = 0 結束 五、資料搜尋-4 • 循序搜尋法之流程圖

  35. 五、資料搜尋-5 • 二元搜尋法(又稱為二分搜尋法) • 規則:先找出資料列的中央位置,判定所要搜尋的資料是位於資料列的前半段或後半段,然後捨去另一半的資料,將搜尋範圍逐漸縮小;如此重複上述步驟,直到找到或確定資料不存在為止 • 資料列必須事先排序 • 中間值(M):M = (L + R) / 2(取整數)

  36. 1 找出中間值M(= (0 + 6) / 2 = 6 / 2 = 3),因搜尋目標(81)> M代表的數值(47),捨棄前半段 M M R R R L L 2 找出中間值M(= (4 + 6) / 2 = 10 / 2 = 5),因搜尋目標(81)> M代表的數值(67),捨棄前半段 3 找出中間值M(= (6 + 6) / 2 = 12 / 2 = 6),因搜尋目標(81)= M代表的數值(81),找到目標,搜尋結束 L M 五、資料搜尋-6 • 二元搜尋法實例

  37. 開始 否(F) L <= R 宣告變數、陣列, 並設定初始值 是(T) M = (L + R) \ 2 L = 0 R = UBound(A) Target = 81 Target? = A(M) > A(M) < A(M) 顯示 "找不到" 顯示找到的位置 L = M + 1 R = M - 1 結束 五、資料搜尋-7 • 二元搜尋法之流程圖

  38. 五、資料搜尋-8 • Array.IndexOf()方法:可在一維陣列(不需事先排序)中搜尋特定的資料 • 語法: • 例:找出陣列A中目標資料12的註標值Dim A = {56, 84, 12, 68, 99, 6} Array.IndexOf(A, 12, 0) '執行結果為2,表示12在A(2) Array.IndexOf(陣列名稱, 目標資料[, 搜尋起點註標值])

More Related