制御フロー

if 文

if 条件式 then 文
if 条件式 then 文 else 文

else-if 節,else 節はそれぞれ省略できます。

次のプログラムは,整数 a, b の大小を判定する例です。

program sample(output);
var
  a, b : integer;
begin
  a := 2; b := 3;
  if a = b then writeln('a = b')
  else if a > b then writeln('a > b')
  else writeln('a < b')
end.
a < b

複文

ブロック begin ... end で 1 つ以上の文を囲んだものは,複文またはブロック文と呼ばれ,文法的には文の一種です。
if 文や for 文などで複数の文を記述したいときは,複文を用います。

if a > b then
begin
  tmp := a;
  a := b;
  b := tmp
end

case 文

case 選択式 of
  ラベル1: 文1;
  ...
end

次のプログラムは,month の値によって処理を振り分ける例です。

program sample(output);
var
  month, days : integer;
begin
  month := 7;
  case month of
    1, 3, 5, 7, 8, 10, 12: days := 31;
    2: days := 28;
    4, 6, 9, 11: days := 30;
  end;
  writeln(days)
end.
31

for 文

for 変数 := 始値 to 終値 do 文
for 変数 := 始値 downto 終値 do 文

次のコードは,for 文を使って 1 から 5 までの数を数え上げる例です。

program sample(output);
var
  i : integer;
begin
  for i := 1 to 5 do writeln(i)
end.
1
2
3
4
5
a < b

to の代わりに downto を用いると,カウントダウンを行います。

for i := -1 downto -5 do writeln(i)
-1
-2
-3
-4
-5

while 文

while 条件式 do 文

次のコードは,while 文を使って 1 から 5 までの数を数え上げる例です。

i := 1;
while i <= 5 do begin
  writeln(i);
  i := i + 1
end

repeat 文

repeat 文 until 条件式

repeat 文中の文は repeat ... until で囲まれているので,begin ... end で囲まなくても複数の文を記述可能です。

i := 1;
repeat
  writeln(i);
  i := i + 1
until i > 5

goto 文

次のコードは,goto 文を使って 1 から 5 までの数を数え上げる例です。

program sample(output);
label
  100;
var
  i : integer;
begin
  i := 1;
100:
  writeln(i);
  i := i + 1;
  if i <= 5 then goto 100
end.

ラベルは 0 から 9999 までの整数で記述します。
プログラムで使用するラベルは,キーワード label から始まるブロックで宣言します。

label
  ラベル1, ラベル2, ...;