前言
利用選擇控制結構,程式設計者可以改變程式的執行流程,決定特定程式碼區塊是否需要執行。本文將介紹 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,其值可能為 1、0 或 -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 等於 b 或 c 時,會執行同一個區塊。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)。回傳值為整數,範圍為 1 至 7,從星期日到星期六。
由於此編號從 1 開始,會使星期一對應為 2,在撰寫判斷時較不直觀。因此我們先將結果減 1,再利用 case 敘述進行判斷,並依據不同日期輸出對應訊息到終端機。