第 7 章 陣列

38
05855AB 適適 7-1 7-1 適適適適 7-2 適適適適適 第 7 第 第第

Upload: zbigniew-krol

Post on 01-Jan-2016

25 views

Category:

Documents


0 download

DESCRIPTION

第 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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 7 章 陣列

05855AB  適用 7-1

7-1   認識陣列

7-2   陣列的應用

第 7 章 陣列

Page 2: 第 7 章 陣列

05855AB  適用 7-2光碟、紙張用得少你我讓地球更美好

陣列:由一群資料型別相同的陣列元素所組成

每一個陣列元素可存入一個資料項目,這些資料項目通常會儲存在電腦相鄰的記憶體中

存取陣列元素時,必須使用陣列的註標

一、陣列簡介 -1

0 1 2 3 4 …

第 3個元素(陣列註標為 2)中存放的資料為 30,可用 A(2) = 30表示

名稱

陣列元素

陣列註標

陣列 A

Page 3: 第 7 章 陣列

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

使用變數

Page 4: 第 7 章 陣列

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

Page 5: 第 7 章 陣列

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

Page 6: 第 7 章 陣列

05855AB  適用 7-6光碟、紙張用得少你我讓地球更美好

例:儲存自己喜愛歌手的排名Dim A() As String = {"周杰倫 ", "陳漢典 ", "阮經天 ", "柯震東 "}

MsgBox("我的偶像: " & A(3))

二、一維陣列 -3

Page 7: 第 7 章 陣列

05855AB  適用 7-7光碟、紙張用得少你我讓地球更美好

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

Page 8: 第 7 章 陣列

05855AB  適用 7-8光碟、紙張用得少你我讓地球更美好

三、多維陣列 -1  當陣列的註標個數超過 1 個時,即稱之為多維陣列

 只有 1 個註標的陣列,稱為一維陣列;2 個註標的陣列,稱為二維陣列,依此類推

Page 9: 第 7 章 陣列

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維註標值代表科目別 (國、英、數 )

Page 10: 第 7 章 陣列

05855AB  適用 7-10光碟、紙張用得少你我讓地球更美好

Dim 陣列名稱 (n1, n2, …) [As 資料型別 ]

Dim 陣列名稱型別字元 (n1, n2, …)

Dim 陣列名稱 [( , …) As 資料型別 ] = [New 資料型別 (n1, n2 …)] {{陣列元素初始值 }, {陣列元素初始值 },…}

三、多維陣列 -3宣告陣列:

宣告陣列並設定初始值:

Page 11: 第 7 章 陣列

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

Page 12: 第 7 章 陣列

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

Page 13: 第 7 章 陣列

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

Page 14: 第 7 章 陣列

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

Page 15: 第 7 章 陣列

05855AB  適用 7-15光碟、紙張用得少你我讓地球更美好

三、多維陣列 -8資料結構:可將資料建立成為一個便於取用與處理的結構

陣列、堆疊與佇列是 3種基本的資料結構堆疊:具有後進先出( LIFO)特性

應用:網頁瀏覽器中用來切換上、下一頁的功能

佇列:具有先進先出( FIFO)特性 應用:印表機列印文件的順序

Page 16: 第 7 章 陣列

05855AB  適用 7-16光碟、紙張用得少你我讓地球更美好

UBound()方法:傳回陣列註標的上限値 語法:

例:傳回陣列 B的上限值(即 7)         Dim A(7) As Integer        Debug.Print(UBound(A))

UBound(陣列名稱 [, 欲查詢的維數 ])

三、多維陣列 -9

Page 17: 第 7 章 陣列

05855AB  適用 7-17光碟、紙張用得少你我讓地球更美好

Length()方法:傳回陣列的元素個數 語法:

例:傳回陣列 A的元素個數(即 4  )         Dim A(3) As Integer        Debug.Print(A.Length) 

陣列名稱 .Length

三、多維陣列 -10

Page 18: 第 7 章 陣列

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

Page 19: 第 7 章 陣列

05855AB  適用 7-19光碟、紙張用得少你我讓地球更美好

點播排行榜1. 詩人漫步2. 愛久見人心3. 狂風裡擁抱4. 想幸福的人5. 24 個比利

四、資料排序 -1排序:利用「比較」與「交換」的方法,將資料排列成某種特定的順序

例: KTV每週依點播數的多寡,製作點播排行榜

Page 20: 第 7 章 陣列

05855AB  適用 7-20光碟、紙張用得少你我讓地球更美好

四、資料排序 -2氣泡排序法

原理:逐次比較相鄰的兩個資料,並依照由大到小或由小到大的排序條件,交換資料的位置,直到所有的資料排序完成

資料位置的變動情形,就像氣泡上升的現象,因此被命名為氣泡排序法

Page 21: 第 7 章 陣列

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         說明: 為比較後交換位置;                   為比較後不交換位置

排序前:

…接下頁

Page 22: 第 7 章 陣列

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

…接下頁

Page 23: 第 7 章 陣列

05855AB  適用 7-23光碟、紙張用得少你我讓地球更美好

四、資料排序 -5

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

9 12 18 25 47

12 9 18 25 47

排序後:

Page 24: 第 7 章 陣列

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)

Page 25: 第 7 章 陣列

05855AB  適用 7-25光碟、紙張用得少你我讓地球更美好

四、資料排序 -7選擇排序法

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

Page 26: 第 7 章 陣列

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

Page 27: 第 7 章 陣列

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

Page 28: 第 7 章 陣列

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

Page 29: 第 7 章 陣列

05855AB  適用 7-29光碟、紙張用得少你我讓地球更美好

Array.Sort()方法:將一維陣列中的資料遞增排序

語法:

例:將陣列中的資料由小到大(遞增)排序         Dim A = {56, 84, 12, 68, 99, 6}        Array.Sort(A)

Array.Sort(陣列名稱 )

四、資料排序 -11

Page 30: 第 7 章 陣列

05855AB  適用 7-30光碟、紙張用得少你我讓地球更美好

Array.Reverse()方法:反轉一維陣列中的資料

語法:

例:反轉陣列中的資料         Dim A = {6, 12, 56, 68, 84, 99}        Array.Reverse(A)

四、資料排序 -12

Array.Reverse(陣列名稱 )

Page 31: 第 7 章 陣列

05855AB  適用 7-31光碟、紙張用得少你我讓地球更美好

五、資料搜尋 -1搜尋:依照特定的條件及方法,在一群資料中尋找符合條件的資料

 例:護士依病患姓氏 (或身分證字號 ),找出複診者的病歷資料

Page 32: 第 7 章 陣列

05855AB  適用 7-32光碟、紙張用得少你我讓地球更美好

五、資料搜尋 -2循序搜尋法(又稱為線性搜尋法)

原理:搜尋時由第一筆資料開始,逐一檢查資料列中的所有資料項,直到找到要搜尋的資料為止

當資料筆數不大或資料列未經排序時,適合使用循序搜尋法來搜尋資料

Page 33: 第 7 章 陣列

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,搜尋結束

Page 34: 第 7 章 陣列

05855AB  適用 7-34光碟、紙張用得少你我讓地球更美好

五、資料搜尋 -4 循序搜尋法之流程圖

開始

宣告變數、陣列,並設定初始值

Target = 15

i = 0

i = i + 1 顯示

"找不到 "

i <= 9

A(i) = Target?

結束

顯示目前資料所在的位置

否( F)

否( F)是( T)

是( T)

Page 35: 第 7 章 陣列

05855AB  適用 7-35光碟、紙張用得少你我讓地球更美好

五、資料搜尋 -5二元搜尋法(又稱為二分搜尋法)

規則:先找出資料列的中央位置,判定所要搜尋的資料是位於資料列的前半段或後半段,然後捨去另一半的資料,將搜尋範圍逐漸縮小;如此重複上述步驟,直到找到或確定資料不存在為止

資料列必須事先排序 中間值(M):M = (L + R) / 2(取整數)

Page 36: 第 7 章 陣列

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

Page 37: 第 7 章 陣列

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)

Page 38: 第 7 章 陣列

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(陣列名稱 , 目標資料 [, 搜尋起點註標值 ])