陣列的應用
陣列在Scratch的應用範例
以全班唱名、樂譜播放、計算全班平均身高、太鼓達人、Flappy bird、坦克大戰為例,介紹Scratch應用陣列的幾個課題。
陣列(array)是什麼?
陣列由多筆資料(變數)所組成
陣列中的資料型態相同,比如全是文字、或全是數字。
每一筆資料都有一個索引(編號),從1、2、3依序編號。
我們可以用索引來讀取陣列中的資料。如右圖,陣列第3筆是「資料c」、陣列第5筆是「資料e」。也可以說陣列[3]是「資料c」,陣列[5]是「資料e」。
什麼時候需要陣列?
想想看,假如要計算全班30位學生的平均身高,若建立30個身高變數,那麼程式會很難寫容易出錯。這時,如果我們把30個身高數字儲存在一個陣列中,依序從索引1至30讀取它,那麼就可用下列方式計算30人的平均身高。
平均身高 = ( 陣列[1]+陣列[2]+陣列[3]+…+陣列[30] ) ÷ 30
上面的式子,用程式的重複結構就能輕易計算出來。
陣列的用途非常廣泛
生活應用與遊戲設計,經常會使用陣列。下列幾個程式範例都有使用陣列,請觀察這些程式的陣列儲存什麼資料?
全班唱名
太鼓達人
樂譜播放
Flappy bird(水管)
計算平均身高
坦克大戰(敵車)
走訪整個陣列
使用右邊的流程圖,可以從陣列第1筆資料開始,依序讀取每一筆資料,走訪整個陣列。
索引用來讀取陣列的第幾筆資料,如陣列[3]是第3筆資料,內容是「資料c」,陣列[5]是第5筆資料,內容是「資料e」,以此類推。
請修改下列Scratch程式,走訪程式中的陣列,讓程式可以正常運作。
**以兒歌、全班唱名教學為例:第1節(簡報、Scratch操作檔)、第2節(簡報、Scratch同上)
生活中那裡有陣列?
只要大量的資料,變數無法處理,這時就需要陣列來記錄和處理。比如:班級名條、住家地址、全班成績單、教室位置、郵局信箱、youbike車號、youbike車柱號、點餐系統、電線桿號、水表、水表、汽車車牌、圖書館的書…
查看建國國中街景地圖,畫面中有那些資料(東西)需要使用陣列來記錄、處理?
看完上面街景地圖的例子,你還有想到生活中有那些資料需要使用陣列呢?(提示:陣列用來儲存與處理大量資料)
陣列搜尋
生活中有許多資料會使用到陣列,其中,查詢陣列的資料是常見的功能。(搜尋陣列)
循序搜尋(從第一筆開始依序搜尋到最後一筆)
以班級學生查詢系統為例,提供2個陣列「座號陣列、姓名陣列」,請寫出以下查詢功能:(學生操作檔案)
問座號,回答姓名。
問姓名,回答座號。
以學校的圖書查詢系統為例,提供3個陣列「ISBN陣列、書名陣列、出版年陣列」,請寫出以下查詢功能:(學生操作檔案)
問ISBN,回答書名與出版年。
問書名,回答ISBN與出版年。
問年份,回答有幾本書。
以查詢排名為例,查詢某一個分數的排名。(學生操作檔案、excel檔、1000筆分數檔)
二分搜尋(在排序好的資料中,二分搜尋可更快速搜尋到資料)
猜數字遊戲
**以圖書查詢系統教學為例:第1節(簡報、Scratch操作檔)、第2節(簡報、Scratch同上)。作品查詢的幾筆測試資料如下:
地心探險記、9789861783482、2015
一個人的朝聖、9789869372886、2016
有風吹過廚房、9789571371481、2017
吃冰大冒險、9789575034238、2019
評量:作品功能評量(學生作品)、選擇題測驗(Quizizz)、學習單
參考檔案:建國國中圖書查詢系統、圖書資料excel檔
陣列排序
Q:為什麼需要排序?
A:當陣列的資料量非常大的時候,如果陣列沒有排序,則只能使用線性搜尋,一筆一筆搜尋,非常耗時。如果陣列已經排序,則可以使用二分搜尋,搜尋速度會非常快速。
Q:線性搜尋、二分搜尋的速度差別?
A:假設在1000筆資料中尋找某數,線性搜尋平均要比較500筆資料,而二分搜尋只要比較10筆資料(2的10次方>1000)。假設在10000筆資料尋找某數,線性搜尋平均要比較5000筆資料,而二分搜尋只要比較14筆資料(2的14次方<10000)。
把陣列裡的數字資料,由小到大排序。
選擇排序操作、氣泡排序操作(學習單:任選一個排序方法,把操作結束的畫面擷圖繳交,並說明你使用了什麼排序方法。)