擬似言語の while と do-while|前判定と後判定の違い【基本情報技術者試験 科目B】

基本情報技術者試験

現行FE シラバス Ver9.2 準拠擬似言語の記述形式は2022年から変更なし最終更新 2026-08-15

for は「何回回すか」を先に書く繰返しでした。while は違います。条件が真である間ずっと繰り返すので、何回で終わるかは動かしてみるまで分かりません。この違いが分かると、読み方が変わります。

while の書き方 ── IPAが決めていること

出典:IPA「擬似言語の記述形式」

while (条件式)
  処理
endwhile
前判定繰返し処理を示す。
条件式が真の間,処理を繰返し実行する。
処理は,0 以上の文の集まりである。
do
  処理
while (条件式)
後判定繰返し処理を示す。
処理を実行し,条件式が真の間,処理を繰返し実行する。
処理は,0 以上の文の集まりである。

覚えることは「判定が先か、処理が先か」だけです。名前の前判定・後判定がそのまま順番を表しています。

for との違い ── 回数が決まっているか

回す回数 典型的な使われ方
for 先に決まっている(制御記述に書いてある) 配列を先頭から末尾まで見る
while やってみないと分からない ある状態になるまで繰り返す
for は制御記述に回数が書いてあるので10回と分かるが、while は続ける条件だけで回数は分からない

for は回数が書いてある。while は動かすまで分からない

for (i を 1 から 10 まで 1 ずつ増やす) なら、読んだ瞬間に10回だと分かります(G6)。while にはそれがありません。回数を知りたければ、実際に追うしかないのです。

お湯が沸くまで待つのと同じです。何分かかるかは先に決まっていなくて、沸いたかどうかを見て、まだなら待ち続ける。while が書き表しているのは、この形です。

次のうち、while で書くのがいちばんふさわしいのはどれですか。

条件を偽にする行が、中に必ずある

while の中では、条件式に出てくる変数のどれかが必ず変化します。変化しなければ条件は真のままで、繰返しが終わらないからです。

だから while を読むときは、まず条件式に出てくる変数を見つけ、それが中のどこで変わるかを探すのが近道です。そこが「終わりに近づいていく仕組み」です。

次のプログラムを実行すると、"X" は何回出力されますか。

整数型: n ← 3

while (n > 0)
  "X" を出力する
endwhile

前判定と後判定 ── 違いが出るのは1か所だけ

2つの形の差は、条件が最初から偽だったときにしか現れません。

最初から偽のとき

前判定(while)

整数型: n ← 5

while (n > 10)
  "A" を出力する
endwhile

先に条件を見ます。5 > 10 は偽なので、中には一度も入りません。出力はありません(0回)。

後判定(do-while)

整数型: n ← 5

do
  "A" を出力する
while (n > 10)

先に処理をやります。“A” が1回出力されてから条件を見て、偽なので終わります(1回)。

後判定は「最低1回は実行される」

逆にいえば、条件が最初から真ならどちらも同じ動きになります。違いが出るのは最初の1回だけ ── ここだけ押さえておけば十分です。

次のプログラムを実行し終えたとき、n はいくつですか。

整数型: n ← 1

do
  n ← n + 1
while (n < 4)

1行ずつ動かして確かめる

while がいちばん活きるのは、何回で終わるか、やってみないと分からないときです。

整数型: nokori ← 20
整数型: kaisu ← 0

while (nokori ≧ 6)
  nokori ← nokori - 6
  kaisu ← kaisu + 1
endwhile

追いかける前に ─ このプログラムは何をする?

20 から 6 を、引けるだけ引くだけです。引いた回数を kaisu に数えます。

nokori kaisu nokori ≧ 6
はじめ 20 0 真
1周 14 1 真
2周 8 2 真
3周 2 3 偽 → 終わり

終わったとき kaisu は 3、nokori は 2。これは 20 ÷ 6 の商と余りそのものです。

3回だと最初から分かっていたわけではありません。引いてみて、6 より小さくなったところで止まる ── これが while の使いどころです。

条件式の変数が、中で変わっている

条件は nokori ≧ 6。その nokori が、中の nokori ← nokori - 6 で毎周小さくなります。だから必ず終わります。

この行が無ければ終わりません。while を読むときに最初に探すのは、ここです。

引けるだけ引く

当サイトオリジナルの例題


ループ開始前

いま計算していること

まだ計算していません

変数の状態

トレース表(進めると1行ずつ積み上がります)

本物もこう書かれる

(基本情報技術者試験 科目B サンプル問題 問4)最大公約数を求める問題では、2つの数が等しくなるまで、大きいほうから小さいほうを引き続けます。

  while (x ≠ y)

何回引けば等しくなるかは、やってみないと分かりません。だからここも while です。「回数が先に決まらないから while」という選び方は、いま見た例とまったく同じです。

つまずきポイントまとめ

まちがえ方 正しい理解
前判定でも1回は実行されると思う 条件が最初から偽なら0回。中に入らない
後判定でも0回がありうると思う 処理が先なので必ず1回は実行される
判定の回数と周回数を同じだと思う 前判定は抜けるための判定が1回多い
条件式の変数が中で変わらない 変わらなければ終わらない。どこで変わるかを探す
「〜まで繰り返す」を if で書く if は1回だけ。繰返しではない

次に読む

この記事で引用した資料

いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。

n ← 5 を使った前判定・後判定の例は当サイトのオリジナルです。

Copied title and URL