電子書:
http://odata.tn.edu.tw/ebooktagapi/Intro/Index2?id=530e2762d2004522a34d303ef00ff279
排序的應用在生活中相當常見,我們習以為常的排序方法該如何描述,而這個概念如何以 Scratch 實做出來。
此本電子書以選擇排序 (Selection Sort) 當基礎,以最直覺、最常見的方法為例來介紹排序方法的實做。
了解多數排序演算法的基礎在於比較,如何使用清單有效的存取數字、交換數字,在空間和時間上操作。
To Iterate is Human, To Recurse, Divine
遞迴是資訊科學中常見解決問題的方法,其形式簡潔而優美。
當我們在定義解決方法的步驟中,卻又參照到自身的這個方法,其不斷的變換,實則不易理解。
透過生活中的實際案例,解釋遞迴的概念,並試圖區別「重複」(迴圈)的概念。
電子書:
http://odata.tn.edu.tw/ebooktagapi/Intro/Index2?id=f04a77f67da74e8ab831680fbab04fc6
To Iterate is Human, To Recurse, Divine
遞迴是資訊科學中常見解決問題的方法,其形式簡潔而優美。
當我們在定義解決方法的步驟中,卻又參照到自身的這個方法,其不斷的變換,實則不易理解。
透過生活中的實際案例,解釋遞迴的概念,並試圖區別「重複」(迴圈)的概念。
電子書:
http://odata.tn.edu.tw/ebooktagapi/Intro/Index2?id=a27cb43d8c85492bbc92f7836258013b
Scratch 模擬設計─掉落的藝術 (Fallen Art)
不同形狀的物體隨機掉落在不同的地方,堆疊出不同的圖騰和數量,也是一種自然之美。
Scratch 中物體如何精準掉落於底線上而不超過,以下程式提供一種技巧。
https://scratch.mit.edu/projects/172766046/
JavaScript 版本 (適合手機與行動裝置)
https://phosphorus.github.io/app.html?id=172777011&turbo=false&full-screen=true
Scratch 訊息廣播接收 (同步與非同步執行)
Synchronous vs. Asynchronous Execution
Scratch 中內建許多像是程序 (procedure)、事件驅動 (event-driven)、並行 (concurrency) 與訊息廣播接收這類的溝通方式 (Synchronous and asynchronous execution) 等,都是程式執行流程的進階控制和策略,使用者卻可輕易的運用於設計中。
以下範例,嘗試以簡化的方式呈現出「同步」與「非同步」執行的概念。
mBot 光源跟隨 (Light Following)
今天突發奇想 mBot 是否可以在黑暗中找到光源,邁向光明。分享此一實作結果,驗證想法。
改裝 mBot 光線感應器,侷限於接受特定方位的光源,使其成為指向性。偵測左右兩側光線差異,判定方向,逐步找尋光源。
Scratch 中使用堆疊實作函數回傳值模擬遞迴 (費氏數列)
Fibonacci Number 範例,使用堆疊 (Stack) 實作函數回傳值。
To Iterate is Human, To Recurse, Divine
請使用 Turbo Mode。按 Shift 加綠色旗子。
Scratch 與 mBot 中「巢狀條件判斷」與「變數改變」的概念
一、「巢狀條件判斷」
以下左右二個看似等價的程式,因 mBot 外部改應器隨著時間一直在變,這種不固定的特性可以凸顯出程式的差異,說明二者其實是不同的程式意義,並觀察出巢狀條件判斷的 if-else 互斥特性。
當運用變數紀錄 mBot 外部感應器的狀態時,可以確保條件判斷時的不變性。
二、「變數改變」
前述例子中,使用變數紀錄狀態雖可以確保條件判斷時的不變性。但面對 Scratch 這類支援平行 (Concurrent) 同時發生的特性,仍須注意程式的執行順序。以下例子,嘗試設計這類「搶先」的可能性,導致兩個程式片段的順序不易預測,最終造成不同執行結果。