顯示具有 編程概念認識 標籤的文章。 顯示所有文章
顯示具有 編程概念認識 標籤的文章。 顯示所有文章

2017年4月17日 星期一

編程概念認識:程序結構(Program Structure)

簡介

當我們在撰寫 mBlock 拼圖程式的時候,往往會依照不同的需求,而撰寫一連串的拼圖命令方塊,並且當某一件事件發生時,它會根據「不同情況」來選擇不同的執行動作,並且要反覆的檢查環境變化。因此,我們想要完成以上的程序,就必須要學會拼圖程式的三種流程控制結構。

循序結構(Sequential)

循序結構是指程式由上至下,逐一執行一連串的拼圖程式,其間並沒有分岔及迴圈的情況。

【常用的循序結構拼圖積木】

  1. 持續前一動作或行為
  2. 等待某一條件成立
  3. 停止指定程式

【優點】

  1. 由上至下,非常容易閱讀。
  2. 結構比較單純,沒有複雜的變化。

【缺點】

  1. 無法表達複雜性的條件結構。
  2. 雖然可以表達重複性的迴圈結構,但是往往要撰寫較長的拼圖程式。

【適用時機】

  1. 不需進行判斷的情況。
  2. 沒有重複撰寫的情況。

分岔結構(Switch)

分岔結構是指根據「條件式」來選擇不同的執行路徑。

【常用的循序結構拼圖積木】

  1. 單一分岔結構
  2. 雙重分岔結構

【優點】

  1. 可以判斷出不同的情況。

【缺點】

  1. 當條件式過多時,結構比較複習,初學者較難馬上了解。

【適用時機】

  1. 當條件式有兩種或兩種以上。

迴圈結構(Loop)

迴圈結構是指重複執行某一段「拼圖方塊」。

【常用的循序結構拼圖積木】

  1. 計數迴圈
  2. 條件迴圈
  3. 無窮迴圈

【優點】

  1. 容易表達複雜性的條件結構。

【缺點】

  1. 當使用到巢狀迴圈時,結構比較複習,初學者較難馬上了解。

【適用時機】

  1. 處理重複性或有規則的動作。

2017年4月14日 星期五

編程概念認識:副程式(Sub-Function)

簡介

副程式是集合一些常用且重複撰寫的程式碼。

它的特性:

  1. 可以使程式更簡化,因為把重覆的程式模組化。
  2. 增加程式的可讀性。
  3. 提高程式的維護性。
  4. 節省程式所佔用的記憶體空間。
  5. 節省重覆撰寫程式的時間。

建立副程式

在撰寫 mBlock 程式時,都會希望將獨立的功能寫成「副程式」,以便日後的維護工作。因此,必須先宣告副程式。
  1. 【程式區】【資料和指令】【新增積木指令】
  2. 宣告一個副程式的名稱
宣告副程式時,可以選擇是否加入參數(Parameter)。參數是指呼叫副程式時,主程式會傳遞一些變數給副程式,而這些變數就是參數。參數可以是數字、字串或是一個布林(Boolean),一個「條件式」。而標籤文字就可以為副程式加入簡單的註解。

副程式的呼叫及編輯

  • 副程式的呼叫
  • 副程式的編輯

編程概念認識:清單(List)

簡介

清單是集合一群具有「相同名稱」及「資料型態」的變數。

它的特性:

  1. 佔用連續記憶體空間。
  2. 用來表示有序串列之一種方式。
  3. 各元素的資料型態皆相同。
  4. 支援隨機存取(Random Access)與循序存取(Sequential Access)。
  5. 插入或刪除元素時較為麻煩,因為須挪移其他元素。

建立清單

在撰寫 mBlock 程式時,如果時常要收集連續性的資料時,因此,必須先宣告清單陣列。
  1. 【程式區】【資料和指令】【做一個清單】
  2. 宣告一個清單的名稱
「適用所有的角色」代表「全域性清單(Global List)」,我們一般會使用這種清單,使用時比較方便,但因為任何地方都可以改變它的值,出錯的機會亦因此提高。「僅適用本角色」代表「區域性清單(Local List)」,由於使用彈性低,因此較為少用。

清單的綜合運算

成立建立清單後,它會自動產生指定的「清單名稱」及一系列清單相關的拼圖積木。如下表所示:
取得清單中的所有元素 新增資料到清單中 將第N項的資料從清單中移除
將資料插入到清單中第N項的前面 將清單中第N項的資料換成新的值
取得清單中第N項的資料 取得清單的長度 判斷清單中是否有包含該項資料

注意:清單未能透過「上傳Arduino程式」將程式上傳到 mBot,如果要在 mBot 上使用清單,可以使用 Arduino IDE 編程,或使用多個變數,製成「假清單」。

編程概念認識:運算子(Operators)

簡介

我們在使用變數時,除了可以使用「設為…」積木或「改變為…」積木外,還可以使用運算子(Operators),對變數作出比較或加入數學運算,讓變數的功能更完善。

在 mBlock 拼圖程式中,資料的運算大致上可分為以下五種:

  1. 四則運算
  2. 比較運算
  3. 邏輯運算
  4. 字串運算
  5. 數學運算

指定運算子(Assignment)

指定運算子是將「右邊」運算式的結果、數字或字串指定給「左邊」的運算元(即變數名稱)。例如:
設為(直接指定)

四則運算子(Calculation)

四則運算子用於處理使用者輸入的「數值資料」進行四則運算積木。
加法 減法 乘法 除法

關係運算子(Boolean)

關係用於判斷「條件式」是否成立。
AND(且) OR(或) NOT(反)

字串運算子(String)

字串運算子讓字串資料的輸出更有彈性。
合併字串 取出字串中的第N個字符 計算字串的長度
取出指定字串在字串中的位置 將數字轉換成字串

數學運算子(Mathematics)

數學運算子讓 mBot 機械人具有數學運算的能力。
隨機數 取餘數 四捨五入取整數
絕對值 無條件捨去(Round Down) 無條件進位(Round Up)
平方根 其他數學公式
(sin / cos / tan / asin / acos / atan / ln / log / e^ / 10^)

2017年3月30日 星期四

編程概念認識:變數(Variable)

我們在編寫程式時,經常需要儲存大量不同的數據,這個時候,我們會用上變數(Variable)。變數是指程式在執行過程中,它的「內容」會隨著程式而改變。想像變數是一個「容器」,它是專門用來「儲放資料」的地方。使用變數可以向系統要求配置適當的主記憶體空間,也可以減少邏輯上的錯誤。

例如:A = B + 1,其中 A、B 則是變數,其內容是可以改變的。

執行的過程變數的內容變化
A = 0; B = 1;
A = B + 1;

宣告變數的步驟

在不同的程式編寫中,會有不同的宣告方法,一般都會先宣告變數種類:
/* C, Java */
int i = 0;
char c = 'a';
float f = 0.123;

/* C++ */
String s = "hi";


亦有一些是不用宣告變數種類的,例如:

/* Python */
counter = 100
miles = 1000.0
name = "John"

/* PHP */
$counter = 100;
$miles = 1000.0;
$name = "Peter";


而在 mBlock 中,我們是不用宣告變數種類的。要宣告變數,我們可以在「程式區」->「資料和指令」->「做一個變數」:

然後宣告變數的名稱:

「適用所有的角色」代表「全域性變數(Global Variable)」,我們一般會使用這種變數,使用時比較方便,但因為任何地方都可以改變它的值,出錯的機會亦因此提高。「僅適用本角色」代表「區域性變數(Local Variable)」,由於使用彈性低,因此較為少用。

變數的使用

成功宣告變數之後,我們可以在「資料和指令」中找到剛剛宣告的變數和變數的相關積木:
積木功能
取得變數當前的值
將變數設為「N」
變數改變為「變數+N」