380 likes | 561 Views
第 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
E N D
第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 AsInteger Dim score2 As Integer Dim score3 As Integer : Dim score50 As Integer 使用變數 一、陣列簡介-2 • 使用陣列的好處 • 方便管理程式中需使用多個相同資料型別的資料項目
陣列名稱:A A(1) = 28 二、一維陣列-1 • 最基本的陣列形式,其註標只有1個 • 適用時機:當在程式中,需要使用多個相同類型之資料項目時 • 例:宣告一個陣列A來存放12個月份的天數
二、一維陣列-2 • 宣告陣列: • 宣告陣列並設定初始值: • 例:Dim A(3) As Integer Dim A%(3)Dim A() As Integer = {24, 5, 13, 47} Dim陣列名稱 (註標上限) [As資料型別] Dim陣列名稱型別字元(註標上限) Dim陣列名稱[() As 資料型別]= [New資料型別(註標上限)] {陣列元素初始值}
二、一維陣列-3 • 例:儲存自己喜愛歌手的排名 Dim A() AsString = {"周杰倫", "陳漢典", "阮經天", "柯震東"} MsgBox("我的偶像:" & A(3))
作業 • 猜猜我最喜歡的偶像 • P.269 猜猜原唱者是誰 • 成績計算(輸入五科成績,並計算總分)
三、多維陣列-1 • 當陣列的註標個數超過 1 個時,即稱之為多維陣列 • 只有 1 個註標的陣列,稱為一維陣列;2 個註標的陣列,稱為二維陣列,依此類推
第2維註標值代表科目別(國、英、數) 陣列名稱:score score(0, 2) = 75表示座號為1之同學的數學成績 第1維註標值代表座號 三、多維陣列-2 • 適用時機:當程式中的資料需要使用2個以上的註標值來識別時 • 例:儲存全班同學的國、英、數三科成績
三、多維陣列-3 • 宣告陣列: • 宣告陣列並設定初始值: Dim陣列名稱 (n1, n2, …) [As資料型別] Dim陣列名稱型別字元(n1, n2, …) Dim陣列名稱[( , …) As 資料型別] = [New資料型別(n1, n2 …)] {{陣列元素初始值}, {陣列元素初始值},…}
設定第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 • 例:
陣列A A(1, 3) 第一維︵列︶ A(3, 1) A(5, 2) 第二維(欄) 二維陣列A(6, 3) 三、多維陣列-5 • 二維陣列示意圖
第一維 陣列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 • 三維陣列示意圖
三、多維陣列-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
三、多維陣列-8 • 資料結構:可將資料建立成為一個便於取用與處理的結構 • 陣列、堆疊與佇列是3種基本的資料結構 • 堆疊:具有後進先出(LIFO)特性 • 應用:網頁瀏覽器中用來切換上、下一頁的功能 • 佇列:具有先進先出(FIFO)特性 • 應用:印表機列印文件的順序
三、多維陣列-9 • UBound()方法:傳回陣列註標的上限値 • 語法: • 例:傳回陣列B的上限值(即7)Dim A(7) As Integer Debug.Print(UBound(A)) UBound(陣列名稱[, 欲查詢的維數])
三、多維陣列-10 • Length()方法:傳回陣列的元素個數 • 語法: • 例:傳回陣列A的元素個數(即4) Dim A(3) As Integer Debug.Print(A.Length) 陣列名稱.Length
三、多維陣列-11 • ReDim()方法:重新調整陣列大小 • 語法: • 例:將陣列B調整為3 × 4的二維陣列,並保留原陣列內容 Dim B = New Integer(2, 1) {{10, 20}, {30, 40}, {50, 60}}ReDim Preserve B(2, 3) ReDim [Preserve]陣列名稱(陣列上限)
點播排行榜 • 詩人漫步 • 愛久見人心 • 狂風裡擁抱 • 想幸福的人 • 24 個比利 四、資料排序-1 • 排序:利用「比較」與「交換」的方法,將資料排列成某種特定的順序 • 例:KTV每週依點播數的多寡,製作點播排行榜
四、資料排序-2 • 氣泡排序法 • 原理:逐次比較相鄰的兩個資料,並依照由大到小或由小到大的排序條件,交換資料的位置,直到所有的資料排序完成 • 資料位置的變動情形,就像氣泡上升的現象,因此被命名為氣泡排序法
排序前: 說明: 為比較後交換位置; 為比較後不交換位置 接下頁… 四、資料排序-3 • 氣泡排序法實例 1 第一次循環:兩兩比較第1 ~ 5個相鄰的資料,並依照比較結果調整數字的位置,使最大的數字(47)排在第5個位置
接下頁… 四、資料排序-4 2 第二次循環:兩兩比較第1 ~ 4個相鄰的資料,並依照比較結果調整數字的位置,使第2大的數字(25)排在第4個位置 3 第三次循環:兩兩比較第1 ~ 3個相鄰的資料,並依照比較結果調整數字的位置,使第3大的數字(18)排在第3個位置
排序後: 四、資料排序-5 4 第四次循環:兩兩比較第1 ~ 2個相鄰的資料,並依照比較結果調整數字的位置,使第4大的數字(12)排在第2個位置
開始 否(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 • 氣泡排序法之流程圖
四、資料排序-7 • 選擇排序法 • 原理:從第1個數值開始找尋,直到最後一個數值,以選出最小值,再將最小值與第1個數值交換;接著從第2個數值之後的資料列中找出最小值,與第2個數值交換,…依此類推,不斷重複上述步驟,直到所有的資料排序完成
排序前: S S 說明: 為比較;S為最小值 接下頁… 四、資料排序-8 • 選擇排序法實例 1 第一次循環:在5個數字中比較資料的大小,挑選出最小的數字(12),並與第1個位置的數字(53)交換位置 2 第二次循環:在其餘4個數字中比較資料的大小,挑選出最小的數字(38),並與第2個位置的數字(46)交換位置
S S 排序後: 四、資料排序-9 3 第三次循環:在其餘3個數字中比較資料的大小,挑選出最小的數字(46),並與第3個位置的數字(53)交換位置 4 第四次循環:在其餘2個數字中比較資料的大小,挑選出最小的數字(53),正好位於第4個位置,不需交換位置,排序完成
否(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 • 選擇排序法之流程圖
四、資料排序-11 • Array.Sort()方法:將一維陣列中的資料遞增排序 • 語法: • 例:將陣列中的資料由小到大(遞增)排序Dim A = {56, 84, 12, 68, 99, 6} Array.Sort(A) Array.Sort(陣列名稱)
四、資料排序-12 • Array.Reverse()方法:反轉一維陣列中的資料 • 語法: • 例:反轉陣列中的資料Dim A = {6, 12, 56, 68, 84, 99} Array.Reverse(A) Array.Reverse(陣列名稱)
五、資料搜尋-1 • 搜尋:依照特定的條件及方法,在一群資料中尋找符合條件的資料 • 例:護士依病患姓氏 (或身分證字號),找出複診者的病歷資料
五、資料搜尋-2 • 循序搜尋法(又稱為線性搜尋法) • 原理:搜尋時由第一筆資料開始,逐一檢查資料列中的所有資料項,直到找到要搜尋的資料為止 • 當資料筆數不大或資料列未經排序時,適合使用循序搜尋法來搜尋資料
1 由第一個位置開始搜尋,未 找到數字15,繼續往下搜尋 2 由第二個位置開始搜尋,未 找到數字15,繼續往下搜尋 3 找到數字15,搜尋結束 五、資料搜尋-3 • 循序搜尋法實例
開始 否(F) i <= 9 宣告變數、陣列, 並設定初始值 是(T) 否(F) A(i) = Target? 顯示 "找不到" i = i + 1 Target = 15 是(T) 顯示目前資料所在的位置 i = 0 結束 五、資料搜尋-4 • 循序搜尋法之流程圖
五、資料搜尋-5 • 二元搜尋法(又稱為二分搜尋法) • 規則:先找出資料列的中央位置,判定所要搜尋的資料是位於資料列的前半段或後半段,然後捨去另一半的資料,將搜尋範圍逐漸縮小;如此重複上述步驟,直到找到或確定資料不存在為止 • 資料列必須事先排序 • 中間值(M):M = (L + R) / 2(取整數)
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 • 二元搜尋法實例
開始 否(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 • 二元搜尋法之流程圖
五、資料搜尋-8 • Array.IndexOf()方法:可在一維陣列(不需事先排序)中搜尋特定的資料 • 語法: • 例:找出陣列A中目標資料12的註標值Dim A = {56, 84, 12, 68, 99, 6} Array.IndexOf(A, 12, 0) '執行結果為2,表示12在A(2) Array.IndexOf(陣列名稱, 目標資料[, 搜尋起點註標值])