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