基本情報技術者試験対策(43)「擬似言語(04)」

スポンサーリンク
IT系

前回はelseifによる複数条件の分岐を扱った。今回からは繰り返し処理(ループ)に入る。まずは最も基本的な繰り返し構文である while文 を扱う。

while文の基本構文

while (条件式)
 処理
endwhile

while は「条件式が真である間、処理を繰り返す」という構文である。実行の流れは次の通りである。

  1. 条件式を評価する
  2. 真であれば、内側の処理を1回実行し、1に戻る
  3. 偽であれば、繰り返しを終了し、endwhile の次の行へ進む

if文と違い、一度実行して終わりではなく、条件が偽になるまで何度も繰り返すという点が最大の特徴である。

【具体例】1からnまでの合計

○整数型: goukei(整数型: n)
  整数型: i
  整数型: sum

  i ← 1
  sum ← 0

  while (i ≦ n)
    sum ← sum + i
    i ← i + 1
  endwhile

  return sum

この処理は、in 以下である間、sumi を加算し続け、そのたびに i を1ずつ増やしていく。goukei(4) を実行した場合の流れをトレースすると次のようになる。

i=1, sum=0
while (1 ≤ 4) → 真
  sum = 0 + 1 = 1
  i = 2
while (2 ≤ 4) → 真
  sum = 1 + 2 = 3
  i = 3
while (3 ≤ 4) → 真
  sum = 3 + 3 = 6
  i = 4
while (4 ≤ 4) → 真
  sum = 6 + 4 = 10
  i = 5
while (5 ≤ 4) → 偽 → ループ終了
return 10

前判定ループであることに注意する

while文は「条件式を先に評価してから処理を実行する」という前判定型のループである。
つまり、最初の判定で条件がすでに偽であれば、内側の処理は一度も実行されない

i ← 10 
while (i が 5 以下)
 sum ← sum + i 
endwhile

この例では、i の初期値がすでに10であり、i が 5 以下 という条件は最初から偽であるため、内側の sum を sum + i とする は一度も実行されずにループを抜ける。
試験問題では、このような「一度も実行されないケース」に注意が必要である。

無限ループに注意する

while文では、ループ内で条件式に関わる変数を更新し忘れると、条件が永遠に真のままとなり、処理が終了しない「無限ループ」に陥る。

/* 誤った例:iを更新し忘れている */
i ← 1 
while (i が n 以下)
 sum ← sum + i 
endwhile

この例では、n が1以上である場合、i の値が更新されないため、条件が永遠に真のままとなり、ループが終了しない。試験問題でも、「このプログラムを実行するとどうなるか」という設問で、無限ループになることを見抜けるかが問われることがある。

【具体例】条件によって回数が変わる処理

whileループは、あらかじめ繰り返し回数を指定するのではなく、条件が成立している間、処理を繰り返したい場合に適している。例えば「値を2で割り続け、1以下になるまでの回数を数える」処理を考える。

○整数型: kaisu(整数型: n)
整数型: count

count ← 0

while (n が 1 より大きい)
    n ← n ÷ 2 
    count ← count + 1
endwhile

return count

例えば、kaisu(8) を実行すると、
8 → 4 → 2 → 1
と変化する。

2で割った商が1になるまでに、3回の割り算を行っているため、戻り値は3になる。

このように、while文は「条件式が真である間、処理を繰り返す」構文です。繰り返し回数そのものを指定するのではなく、条件によって繰り返しを終了する点に注目しよう。

学習のポイント

  1. while文は前判定型であり、最初から条件が偽であれば処理は一度も実行されない
  2. ループ条件に関係する変数が適切に更新されているかを確認し、無限ループになっていないかをチェックする
  3. トレースの際は、isum のような変数の値を1周ごとに書き出していく
  4. ループを抜けた直後の変数の値が、条件式が偽になったときの値であることを意識する

まとめ

while文は、「条件式が真である間、処理を繰り返す」という構文である。

そのため、繰り返し回数そのものを指定するのではなく、「どの条件が成立している間、処理を続けるのか」に注目することが重要である。

次回扱うfor文も繰り返し処理に使われるが、while文とは異なる形で繰り返しを制御する。

コメント

タイトルとURLをコピーしました