位元詩人 [Pascal] 程式設計教學:選擇控制結構 (Selection Control Structure)

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

利用選擇控制結構,程式設計者可以改變程式的執行流程,決定特定程式碼區塊是否需要執行。本文將介紹 Pascal 中可用的選擇控制結構。

if

if 的撰寫規則

if 是 Pascal 中最常見的選擇控制結構。單行與多行指令在撰寫方式上略有不同。若希望撰寫時更直觀,建議一律使用 begin ... end 區塊包住程式碼。以下為詳細說明。

當指令只有單行時,可以直接撰寫該指令,例如:

if x > 0 then
  WriteLn('x is positive');

當指令包含多行時,則必須放入區塊中,例如:

if x > y then
begin
  max := x;
  WriteLn('max is ', x);
end;

在具有多重分支的 if 敘述中,位於中間分支的最後一行敘述不加分號,而最後一個分支的最後一行敘述則需加上分號,例如:

if x mod 2 = 0 then
    WriteLn(x, ' is even')
else
    WriteLn(x, ' is odd');

如果讀者覺得 if 敘述的分號規則較難掌握,可以採取一個簡單的做法:在每個 if 敘述中一律使用區塊,不論是單行或多行指令。如下所示:

if x mod 2 = 0 then
begin
  WriteLn(x, ' is even');
end
else
begin
  WriteLn(x, ' is odd');
end;

由於使用了區塊,只需在第一個區塊結尾省略分號即可。雖然程式碼會稍微變長,但能讓撰寫過程更加單純。

實際範例

以下為一個完整的 Pascal 範例程式:

program main;

var
  n : integer;

begin
  randomize;

  n := random(2+1) - 1;

  if n > 0 then
    writeLn('positive')
  else if n < 0 then
    writeLn('negative')
  else
    writeLn('zero')
end.

在此範例中,我們建立了一個整數變數 n,其值可能為 10-1。程式會依據 n 的值輸出不同的訊息。由於 n 為隨機產生,每次執行的結果可能不同。

case

case 的撰寫規則

case 敘述適用於固定值的判斷,語法通常比 if 更簡潔。其基本寫法如下:

case value of
  a:
    (* Run code here if value is a *)
  b, c:
    (* Run code here if value is either b or c. *)
  else
    (* Run code here if value is otherwise. *)
end;

value 等於 a 時,會執行對應的區塊。

value 等於 bc 時,會執行同一個區塊。Pascal 的 case 敘述不會出現 C 語言 switch 的直落(fallthrough)問題。

value 不符合上述條件時,會執行 else 區塊。需要注意的是,else 區塊為選擇性。

實際範例

在了解語法後,我們來看一個實際的範例程式:

program main;
uses
  SysUtils;

var
  d : integer;

begin
  d := DayOfWeek(Date());

  case d-1 of
    0, 6:
      writeLn('Weekend');
    3:
      writeLn('Hump day');
    5:
      writeLn('Thanks God. It''s Friday');
    else
      writeLn('Week');
  end;
end.

此範例先透過 Date() 函式取得目前日期,再以 DayOfWeek() 取得星期幾(day of week)。回傳值為整數,範圍為 17,從星期日到星期六。

由於此編號從 1 開始,會使星期一對應為 2,在撰寫判斷時較不直觀。因此我們先將結果減 1,再利用 case 敘述進行判斷,並依據不同日期輸出對應訊息到終端機。

關於作者

位元詩人 (ByteBard) 是資訊領域碩士,喜歡用開源技術來解決各式各樣的問題。這類技術跨平台、重用性高、技術生命長。

除了開源技術以外,位元詩人喜歡日本料理和黑咖啡,會一些日文,有時會自助旅行。