結構化程式設計方法強調清晰的邏輯和流程控制,藉由流程圖和偽程式碼等工具,能有效降低程式開發的複雜度,提升程式碼的可讀性和可維護性。尤其在處理複雜的商業邏輯或自動化流程時,結構化方法更能展現其優勢,確保程式碼的穩定性和可靠性,進而提升專案的整體品質和效率。臺灣企業在數位轉型過程中,匯入結構化程式設計方法,有助於提升軟體開發團隊的專業能力,並最佳化系統架構,以適應快速變化的市場需求。

結構化流程圖與偽程式碼設計

問題1:重新設計非結構化流程段

重新設計流程段以實作相同的過程,但使用結構化方法。

問題2:撰寫偽程式碼

撰寫每個例子的偽程式碼(a至e),確保偽程式碼是結構化的,並且能夠完成與流程圖段相同的任務。

問題3:機械手臂控制

設計一個機械手臂,可以執行以下任務:

  • 降低筆到紙上。
  • 提起筆離開紙。
  • 移動筆1英寸沿著直線。
  • 向右轉90度。
  • 畫一個1英寸直徑的圓圈。

使用結構化流程圖或偽程式碼描述邏輯,讓機械手臂可以畫出或寫出以下內容:

  • 1英寸的正方形。
  • 2英寸乘以玄貓的矩形。
  • 三顆珠子的字串。
  • 可以用線和圓圈構成的短字(例如,bit)。
  • 四位數字。

問題4:機械機器人控制

設計一個機械機器人,可以執行以下任務:

  • 站起來。
  • 坐下。
  • 左轉90度。
  • 右轉90度。
  • 向前一步。

使用結構化流程圖或偽程式碼描述邏輯,讓機械機器人可以:

  • 從一把椅子坐著的位置,站起來,穿過房間,然後坐在另一把椅子上。
  • 從一把椅子坐著的位置,站起來,圍繞椅子走一圈,穿過房間,圍繞另一把椅子走一圈,然後傳回第一把椅子並坐下。

問題5:數字猜測遊戲

使用結構化流程圖或偽程式碼描述猜測一個介於1到100之間的數字的過程。每次猜測後,玩家會被告知猜測的數字太高或太低。該過程繼續直到玩家猜對正確的數字。

Mermaid 圖表範例:

  flowchart TD
    A[開始] --> B[猜測數字]
    B --> C[判斷猜測結果]
    C -->|太高| D[降低猜測範圍]
    C -->|太低| E[提高猜測範圍]
    D --> B
    E --> B
    C -->|正確| F[結束]

看圖說話:

此圖表示了一個簡單的數字猜測遊戲流程。玩家從開始猜測一個數字,然後根據系統的反饋(太高或太低)調整猜測範圍,直到猜對正確的數字。

程式設計與邏輯控制

在進行程式設計時,瞭解邏輯控制的重要性是不可忽視的。邏輯控制是指程式在執行過程中,根據特定條件或規則進行決策和控制的能力。這種控制可以是簡單的條件判斷,也可以是複雜的迴圈和遞迴結構。

程式設計的基本元素

程式設計的基本元素包括變數、運運算元、控制結構和函式。變數是用來儲存和操作資料的容器,運運算元則是用來進行算術、邏輯和比較操作的符號。控制結構包括條件判斷、迴圈和遞迴,負責控制程式的流程和邏輯。函式則是可重用的程式碼塊,能夠封裝特定的功能和邏輯。

邏輯控制的應用

邏輯控制在程式設計中有著廣泛的應用。例如,在查詢字典時,需要根據字母順序進行查詢和控制。這可以透過設計一個迴圈結構,根據查詢結果進行條件判斷和控制,直到找到目標單詞。同樣,在決定上學的路線時,需要根據多個因素進行決策和控制,例如距離、交通工具和時間等。

結構化流程圖和偽程式碼

結構化流程圖和偽程式碼是描述程式邏輯和控制的兩種重要工具。結構化流程圖使用圖形化的方式描述程式的流程和邏輯,能夠清晰地展示程式的控制結構和決策過程。偽程式碼則是使用自然語言的方式描述程式的邏輯和控制,能夠簡潔地表達程式的意圖和行為。

程式設計的挑戰

程式設計的挑戰包括如何設計出高效、可靠和易於維護的程式。這需要程式設計師具有良好的邏輯思維和問題解決能力,能夠根據特定的需求和條件設計出合適的程式。同時,程式設計師還需要具有良好的溝通能力,能夠清晰地描述程式的邏輯和控制,讓他人能夠理解和維護程式。

看圖說話:

  flowchart TD
    A[開始] --> B[查詢字典]
    B --> C[條件判斷]
    C --> D[迴圈控制]
    D --> E[找到目標單詞]
    E --> F[結束]

這個流程圖描述了查詢字典的過程,包括查詢、條件判斷和迴圈控制等步驟。透過這個流程圖,可以清晰地展示程式的邏輯和控制,讓他人能夠理解和維護程式。

選擇結構的描述

選擇結構是程式設計中的一種基本結構,允許程式根據條件的真偽值選擇不同的執行路徑。它通常由一個布林表示式(Boolean expression)開始,根據表示式的結果,程式會執行不同的動作。

選擇結構的型別

選擇結構有兩種形式:雙重選擇(dual-alternative selection)和單一選擇(single-alternative selection)。雙重選擇結構根據布林表示式的結果,會執行兩個不同的動作;而單一選擇結構只會根據布林表示式的結果執行一個動作。

雙重選擇結構

雙重選擇結構是一種if-then-else選擇結構,根據布林表示式的結果,會執行兩個不同的動作。這種結構的特點是,兩個動作是互相排斥的,只會執行其中一個。

單一選擇結構

單一選擇結構是一種if-then選擇結構,根據布林表示式的結果,會執行一個動作。這種結構的特點是,只會根據布林表示式的結果執行一個動作。

if陳述式的語法

if陳述式的語法通常如下:

if 條件 then
  執行的動作

這種語法表示,如果條件為真,則執行指定的動作。

看圖說話:

  flowchart TD
    A[開始] --> B[布林表示式]
    B --> C[是]
    C --> D[執行動作1]
    B --> E[否]
    E --> F[執行動作2]

這個流程圖表示了一個雙重選擇結構,根據布林表示式的結果,會執行兩個不同的動作。

關係比較運運算元

關係比較運運算元是用來比較兩個值的大小或相等性的運運算元。常見的關係比較運運算元包括:

  • 等於(=)
  • 不等於(<>)
  • 大於(>)
  • 小於(<)
  • 大於或等於(>=)
  • 小於或等於(<=)

這些運運算元可以用來建立布林表示式,從而控制選擇結構的執行。

AND邏輯

AND邏輯是一種邏輯運算,要求兩個條件都為真,才會傳回真。AND邏輯可以用來結合多個條件,從而控制選擇結構的執行。

OR邏輯

OR邏輯是一種邏輯運算,要求至少有一個條件為真,才會傳回真。OR邏輯可以用來結合多個條件,從而控制選擇結構的執行。

NOT邏輯

NOT邏輯是一種邏輯運算,要求條件為假,才會傳回真。NOT邏輯可以用來否定一個條件,從而控制選擇結構的執行。

選擇結構的優先順序

選擇結構的優先順序是指,當多個選擇結構結合時,哪一個結構會先被執行。一般來說,選擇結構的優先順序是由內而外,也就是說,內層的結構會先被執行。

案例分析

以下是一個案例分析,示範如何使用選擇結構來控制程式的執行:

x = 5
if x > 10:
  print("x大於10")
else:
  print("x小於或等於10")

這個案例中,程式會根據x的值,執行不同的動作。如果x大於10,則會印出"x大於10";否則,會印出"x小於或等於10"。

看圖說話:

  flowchart TD
    A[開始] --> B[x > 10]
    B --> C[是]
    C --> D[印出"x大於10"]
    B --> E[否]
    E --> F[印出"x小於或等於10"]

這個流程圖表示了一個雙重選擇結構,根據x的值,會執行不同的動作。

條件判斷的基本結構

在程式設計中,條件判斷是一個非常重要的概念,允許程式根據不同的情況執行不同的動作。最基本的條件判斷結構是if陳述式,它由一個條件和一系列當條件為真時要執行的陳述式組成。

if陳述式的基本結構

if陳述式的基本結構如下:

  flowchart TD
    A[開始] --> B[條件判斷]
    B -->|true| C[執行if內的程式碼]
    B -->|false| D[執行else內的程式碼]
    C --> E[結束]
    D --> E

看圖說話:

這個流程圖顯示了if陳述式的基本邏輯。程式從開始點(A)啟動,然後進行條件判斷(B)。如果條件為真,則執行if內的程式碼(C),否則執行else內的程式碼(D)。無論哪個分支被執行,程式最終都會到達結束點(E)。

條件判斷的表達

條件判斷通常使用布林表示式(Boolean expression)來表示。布林表示式可以是一個簡單的比較,如x > y,也可以是一個布林變數(如果語言支援),或者是一個傳回布林值的方法呼叫。在後續的課程中,你將學習到更多關於方法和傳回值的知識。

else子句

else子句是if陳述式的一部分,當條件判斷為假時,else子句後面的程式碼將被執行。並非所有語言都使用"then"這個關鍵字,本章使用它是為了提高敘述的清晰度。

實際應用

在實際應用中,if陳述式可以用於各種情況下的決策。例如,根據使用者的輸入決定顯示不同的頁面,或者根據資料函式庫中的資料進行不同的處理等。

決策程式的設計

在程式設計中,決策程式是用於根據特定條件執行不同的動作。這些條件可以是使用者輸入、資料比較或其他邏輯運算的結果。

條件陳述式的結構

條件陳述式通常由三個部分組成:條件、true分支和false分支。條件是用於判斷哪個分支應該被執行的邏輯運算式。true分支是當條件為true時執行的程式碼,false分支是當條件為false時執行的程式碼。

流程圖的設計

流程圖是一種視覺化的工具,用於描述程式的邏輯流程。流程圖中的決策程式通常用菱形符號表示,菱形符號的左右兩邊分別代表true和false分支。

範例:加班薪水計算

以下是計算加班薪水的範例。假設標準工作週為40小時,超過40小時的薪水為正常薪水的1.5倍。

  flowchart TD
    A[開始] --> B[輸入工作小時]
    B --> C{工作小時 > 40?}
    C -->|是| D[計算加班薪水]
    C -->|否| E[計算正常薪水]
    D --> F[輸出加班薪水]
    E --> F

範例的解釋

在上面的範例中,首先輸入工作小時,然後根據工作小時是否大於40小時決定是否計算加班薪水。如果工作小時大於40小時,則計算加班薪水,否則計算正常薪水。最後,輸出計算結果。

看圖說話:

流程圖清晰地展示了決策程式的邏輯流程。菱形符號代表決策點,左右兩邊的箭頭分別代表true和false分支。這種視覺化的呈現方式使得程式的邏輯流程更加清晰易懂。

程式設計的最佳實踐

在程式設計中,最佳實踐是保持程式的邏輯流程清晰簡潔。這可以透過使用流程圖和條件陳述式來實作。另外,保持程式的模組化和可重用性也是非常重要的。這可以透過將程式分解為小的模組和函式來實作。

問題1:重新設計非結構化流程段

由於題目未提供具體的非結構化流程段,我將以一個常見的非結構化流程為例,並將其轉換為結構化流程:

非結構化流程示例:計算學生成績等級

假設有以下規則:

  • 90分以上:A
  • 80-89分:B
  • 70-79分:C
  • 60-69分:D
  • 60分以下:F

非結構化流程可能包含許多goto陳述式或跳轉,難以追蹤和理解。

結構化流程:

  graph TD
    A[開始] --> B{輸入成績};
    B --> C{成績 >= 90?};
    C -- 是 --> D[輸出 A];
    C -- 否 --> E{成績 >= 80?};
    E -- 是 --> F[輸出 B];
    E -- 否 --> G{成績 >= 70?};
    G -- 是 --> H[輸出 C];
    G -- 否 --> I{成績 >= 60?};
    I -- 是 --> J[輸出 D];
    I -- 否 --> K[輸出 F];
    D --> L[結束];
    F --> L;
    H --> L;
    J --> L;
    K --> L;

問題2:撰寫偽程式碼

同樣,由於題目未提供a至e的流程圖段,我將使用問題1中結構化流程的例子撰寫偽程式碼:

開始
  輸入 成績
  如果 成績 >= 90 則
    輸出 "A"
  否則如果 成績 >= 80 則
    輸出 "B"
  否則如果 成績 >= 70 則
    輸出 "C"
  否則如果 成績 >= 60 則
    輸出 "D"
  否則
    輸出 "F"
  結束如果
結束

問題3:機械手臂控制

機械手臂基本指令偽程式碼:

函式 LowerPen():
  // 降低筆到紙上

函式 RaisePen():
  // 提起筆離開紙

函式 MovePen(距離):
  // 移動筆指定距離

函式 TurnRight(角度):
  // 向右轉指定角度

函式 DrawCircle(直徑):
  // 畫指定直徑的圓

繪圖任務偽程式碼:

  • 1 英寸正方形:
開始
  LowerPen()
  重複 4 次:
    MovePen(1 英寸)
    TurnRight(90 度)
  RaisePen()
結束
  • 2 英寸 x 玄貓 的矩形: (假設 “玄貓” 長度為 X 英寸)
開始
  LowerPen()
  MovePen(2 英寸)
  TurnRight(90 度)
  MovePen(X 英寸)
  TurnRight(90 度)
  MovePen(2 英寸)
  TurnRight(90 度)
  MovePen(X 英寸)
  RaisePen()
結束
  • 三顆珠子的字串: (假設珠子直徑為 Y 英寸,珠子間距為 Z 英寸)
開始
  重複 3 次:
    DrawCircle(Y 英寸)
    MovePen(Z 英寸)
結束
  • “bit”: (簡化為直線和圓圈)
開始
  // 畫 'b' (自行設計)
  // 畫 'i' (自行設計)
  // 畫 't' (自行設計)
結束
  • 四位數字: (需要數字識別和繪製邏輯,這裡僅提供框架)
開始
  對於 每個數字 in 四位數字:
    繪製數字(數字)
結束

問題4:機械機器人控制

機械機器人基本指令偽程式碼:

函式 StandUp():
  // 站起來

函式 SitDown():
  // 坐下

函式 TurnLeft():
  // 左轉 90 度

函式 TurnRight():
  // 右轉 90 度

函式 MoveForward():
  // 向前一步
  • 從椅子A到椅子B:
開始
  StandUp()
  重複 直到到達椅子B:
    MoveForward()
  SitDown()
結束
  • 繞椅子A一圈,到椅子B繞一圈,傳回椅子A:
開始
  StandUp()
  重複 4 次:  // 繞椅子A
    MoveForward()
    TurnRight()
  重複 直到到達椅子B:
    MoveForward()
  重複 4 次:  // 繞椅子B
    MoveForward()
    TurnRight()
  重複 直到到達椅子A:
    MoveForward()
  SitDown()
結束

問題5:數字猜測遊戲

開始
  最小值 = 1
  最大值 = 100
  猜測 = (最小值 + 最大值) / 2

  當 猜測 != 正確數字:
    輸入 猜測
    如果 猜測 > 正確數字 則
      最大值 = 猜測 - 1
    否則
      最小值 = 猜測 + 1
    猜測 = (最小值 + 最大值) / 2
  輸出 "猜對了!數字是 " + 猜測
結束

這個版本使用二分查詢法,提高了猜測效率。 所有答案都使用了結構化程式設計方法,避免了 goto 或跳轉,邏輯更清晰,易於理解和維護。 機械手臂和機器人的繪圖/行動細節需要根據實際硬體能力進一步完善。