陣列的應用

陣列在Scratch的應用範例

以全班唱名、樂譜播放、計算全班平均身高、太鼓達人、Flappy bird、坦克大戰為例,介紹Scratch應用陣列的幾個課題。

陣列(array)是什麼?

  1. 陣列筆資料(變數)所組成

  2. 陣列中的資料型態相同,比如全是文字、或全是數字。

  3. 每一筆資料都有一個索引(編號),從1、2、3依序編號。

  4. 我們可以用索引來陣列中的資料。如右圖,陣列第3筆是「資料c」、陣列第5筆是「資料e」。也可以說陣列[3]是「資料c」,陣列[5]是「資料e」。

什麼時候需要陣列?

想想看,假如要計算全班30位學生的平均身高,若建立30個身高變數,那麼程式會很難寫容易出錯。這時,如果我們把30個身高數字儲存在一個陣列中,依序從索引1至30讀取它,那麼就可用下列方式計算30人的平均身高。

平均身高 = ( 陣列[1]+陣列[2]+陣列[3]+…+陣列[30] ) ÷ 30

上面的式子,用程式的重複結構就能輕易計算出來。

計算30人平均身高(Excel v.s. Scratch)

  • 我們先用Excel計算30人的平均身高Excel

  • 再觀察Scratch計算30人的平均身高(Scratch

  • 比較這兩個方法的計算結果是否相同?

陣列的用途非常廣泛

生活應用與遊戲設計,經常會使用陣列。下列幾個程式範例都有使用陣列,請觀察這些程式的陣列儲存什麼資料

全班唱名

太鼓達人

樂譜播放

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)。

把陣列裡的數字資料,由小到大排序。

打亂陣列

大樂透、座號抽籤、撲克牌洗牌等,都可以用「打亂陣列」的方式來實作。