VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06...

43
VB.NET 視窗程式設計 基本語法:陣列 NTU CSIE 講師:張傑帆

Transcript of VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06...

Page 1: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

VB.NET 視窗程式設計 基本語法:陣列

NTU CSIE

講師:張傑帆

Page 2: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

前言

陣列可將同性質資料集中放在連續記憶體上。

宣告一個陣列名稱score整數陣列來存放

五位同學的成績,用 score(0)~score(4) 分別代表score1~score5 五個整數變數名稱。

將score(0) ~score(4) 稱為「陣列元素」

小括號內的數字稱為 index「索引」或「註標」。

改變索引値便可存取陣列中的任何一個元素。

Page 3: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

陣列的宣告及存取

陣列使用時機

處理多筆同性質資料,可用陣列元素取代

多個同性質的變數。

陣列先經宣告才能使用。

宣告陣列時,編譯器依宣告陣列資料型別和元素

多寡,在記憶體中保留連續位址給該陣列使用。

Page 4: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

一維陣列

陣列的宣告

當我們使用一般變數時,必須先宣告它的型別,同樣地陣列變數也是如此,其宣告方式如下:

例如,以下敘述會建立一個下限是0,上限是5,小大為6,名稱為a的短整數型號

0 1 2 3 4 5

Page 5: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

陣列的宣告及初值設定 一維陣列的宣告

若省略下限值,則其預設值是0。例如,以下敘述同義於上式

宣告 score為一個含有10 個陣列元素的 整數陣列:

Dim score(9) As Integer

score 陣列含有score(0) ~ score(9) 共10個陣列元素,依序存放在記憶體的連續位址中

每個陣列元素裡面存放的資料必須是整數。

可用 score(0) ~ score(9) 存放1~10 號 同學的計概成績。

索引1:0~9當座號1~10

0 1 2 3 4 5

0 1 2 3 4 5

Page 6: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

陣列的宣告及初值設定

陣列的宣告與初值設定

宣告陣列時,也可同時設定陣列元素初值。

一維陣列初值以左右大括號框住,

資料間以逗號隔開。

Page 7: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料
Page 8: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

陣列的個別存取

陣列可以在同一變數中儲存多個元素,所以當你在存取陣列中的某個元素時,必須指定一個索引值(index)來指向你所想要的元素;其中索引值可以是整數常數,也可以是整數變數。

所以,下述可將陣列索引0的值設定為1

•下敘可將陣列索引0的值指派給變數b

Page 9: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

陣列的整體存取

陣列的整體存取,有二種方式,分別是For

與For Each

For語法

For Each 語法

Page 10: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

課堂練習-Ex61-1 陣列練習:

設有資料如下: 77, 66, 99, 44, 55

請寫一個程式,以陣列儲存以上資料,並計算與輸出平均、最高分及最低分。

Page 11: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

課堂練習- Ex61-2

線上輸入練習:

可線上輸入5位學生成績

提示:InputBox(“”,“請輸入成績”)

可用陣列儲存

可由使用者輸入學號來查詢成績

Page 12: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

選擇排序法(Selection Sort)

使用一迴圈將最大值換到陣列最前

如果有n個數要判斷n-1個數值

5個數要判斷4次

只需交換一次

0

最大值位置(pos)

34 1 12 66 5

34 1 12 66 5

34 1 12 66 5

34 1 12 66 5

0

0

0

3

66 1 12 34 5 3

swap

j=0

j=1

j=2

j=4

Index 0 1 2 3 4

Page 13: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

選擇排序法(Selection Sort)

再使用一迴圈連續對陣列把最大值放到第i個位置

如果有n個數要做n-1次

5個數要做4次

34 1 12 66 5

66 1 12 34 5

66 34 12 1 5

66 34 12 1 5

66 34 12 5 1

i=0

i=1

i=2

i=3

i=4

Index 0 1 2 3 4

Page 14: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

課堂練習-Ex62

成績統計程式

設計一個程式可以:

定義一個一維陣列儲存10個學生的數學成績

50, 65, 80, 48, 35, 93, 57, 90, 86, 77

將成績由大至小印出

計算出「及格」與「不及格」的人數

Page 15: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

二維與多維陣列

含有兩個索引值的陣列稱為二維陣列

含有兩個以上索引的陣列都稱為多維陣列

一般多維陣列最常應用的是二維陣列,下面我們就以二維陣列為例,來介紹如何使用多維陣列。

Page 16: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

多維陣列

一維陣列 (1-Dimensional Array)

陣列宣告時只用一個索引,維度為1 的陣列 。

二維陣列(2-Dimensional Array)或矩形陣列

使用兩個索引,維度為2 的陣列。

三維陣列(3-Dimensional Array)

使用三個索引,維度為3 的陣列。

VB 可處理陣列的最大維度限 32 個。

一個陣列的陣列元素總數是所有維度的乘積。

Page 17: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

二維陣列變數宣告

二維陣列變數宣告語法如下:

例如,以下敘述宣告一個二維的短整數型別變數

0 1 2 3 4

0 a(0,0) a(0,1) a(0,2) a(0,3) a(0,4)

1 a(1,0) a(1,1) a(1,2) a(1,3) a(1,4)

2 a(2,0) a(2,1) a(2,2) a(2,3) a(2,3)

Page 18: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

二維陣列的初值設定

二維陣列亦可宣告時同時,亦給予初值。例如:

0 1 2

0 a(0,0)=3 a(0,1)=4 a(0,2)=2

1 a(1,0)=6 a(1,1)=7 a(1,2)=5

Page 19: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

陣列的宣告及初值設定

二維陣列的宣告

宣告score 是一個二維整數陣列,

存放10 位同學三次計概成績

Dim score ( 9, 2 ) As Integer

索引2:0~2當第1~3次計概成績

索引1:0~9當座號 1 ~ 10

0 1 2

0

1

2

3

4

5

6

7

8

9

Page 20: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

陣列的宣告及初值設定

陣列的每個元素,可當作一個變數來運算:

1. score(0,0) 陣列元素代表座號1號同學的第1次計概成績。

2. score(1,1) 陣列元素代表座號2號同學的第2次計概成績。

3. score(2,2) 陣列元素代表座號3號同學的第3次計概成績。

4. score(9,2) 陣列元素代表座號10號同學的第3次計概成績。

【例】將第一位同學三次計概成績相加

sum = score(0,0) + score(0,1) + score(0,2)

0 1 2

0

1

2

3

4

5

6

7

8

9

Page 21: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

若想把不同型別的資料放在一起呢?

Page 22: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

陣列的上界

Page 23: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

課堂練習-Ex63

計算各球員的全壘打數 (及平均)

Dim years() As Integer = {2009, 2010, 2011, 2012} '年度 Dim name() As String = {"張泰山", "林益全", "周思齊", "彭政閔", "林智勝"} '姓名 Dim bits(,) As Object = {{63, 78, 74, 96}, {113, 55, 55, 92}, {49, 56, 88, 91}, {71, 65, 55, 88}, {111, 79, 68, 85}}

Page 24: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

參考程式碼

Page 25: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

& 與 +串連運算子 有什麼不一樣

+ 運算子 (Visual Basic)

主要目的是將兩個數字相加。 不過,它也可以串連數值運算元與字串運算元。 + 運算子有一組複雜的規則,可判斷是要相加、串連、通知編譯器錯誤,還是擲回執行階段 InvalidCastException 例外狀況。

& 運算子 (Visual Basic)

只針對 String 運算元進行定義,且它一律會將運算元擴展成 String,不論 Option Strict 的設定為何。 建議使用 & 運算元進行字串串連,因為它的定義為專門針對字串,且能減少產生意外轉換的機會。

Page 26: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

排序與搜尋

陣列的排序

將資料存到陣列中都是無規律性,欲查詢陣列的資料

必須從頭開始逐一往下搜尋。

此種搜尋方式放在前面資料搜尋時間比後面資料短,

導致平均搜尋時間不一致。

若在搜尋資料前,先將陣列中的元素排列整齊,可透

過較好搜尋演算法,資料不論置於前後搜尋時間

差不多。

VB 提供 Array.Sort(陣列名稱)方法,不用寫程式便可

將一維陣列內的陣列元素由小到大做遞增排序。

Page 27: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

排序與搜尋

Page 28: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

排序與搜尋

Page 29: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

執行 Array.Sort (score)

只對score做排序

但分數與名字卻對不起來?

Page 30: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

執行 Array.Sort (score, name)

但是若我的成績想由高排到低呢?

Page 31: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

陣列的反轉

陣列由大而小做遞減排序

先用 Array.Sort() 方法由小而大做遞增排序

再用 Array.Reverse() 方法將排序過的陣列

做反轉。

Page 32: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料
Page 33: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

清除陣列- Clear 方法

Clear 方法可以清除一維陣列指定索引的元素值,使還原為宣告型別的預設值。數字預設值為0,字串為空字串,其寫法如下:

Page 34: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

陣列的搜尋

Page 36: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

設計輸出入介面

放入資料 Public Class Form1 Dim pName() As String = {"麥格倫", "強納森", "林煜清", "鎌田祐哉", "迪薩猛", "林其緯", "林晨樺", "林英傑", "銳", "鄭承浩", "鄭錡鴻", "陽建福", "增菘瑋", "賴鴻誠", "摩爾", "王豐鑫", "岡薩雷茲", "狄納多", "陳逸宸", "羅政龍"} Dim score() As Single = {4.082, 2.484, 3.909, 3.151, 2.767, 5.163, 3.96, 3.434, 3.904, 4.871, 4.297, 5.651, 3.628, 5.592, 3.921, 5.077, 4.447, 4.5, 4.112, 7.534}

Page 37: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

Form_Load()

顯示出所有投手的資料

Page 38: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

遞增排序

Page 39: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

到數5名

Page 40: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

查詢

Page 41: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

加入最佳5名

自己練習將上述綠習中加入「最佳5名」

Page 42: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

回家作業-HW5 成績統計程式:

假定某班有5位學生,每位學生各修3門科目,請利用二維陣列的方式儲存學生的各科成績,並將每位學生的各科成績、總分及平均列印出來,並按照總分由高到低排序。

Page 43: VB.NET 視窗程式設計 - homepage.ntu.edu.twhomepage.ntu.edu.tw/~d02922022/VB/ppt/Part 1/06 基本語法:陣列.pdf · 排序與搜尋 陣列的排序 將資料存到陣列中都是無規律性,欲查詢陣列的資料

本章結束 Take a Break …..