擬似言語の for と制御記述|1行ずつ動かして理解する【基本情報技術者試験 科目B】

基本情報技術者試験

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

擬似言語の for は、他の言語の for 文と少し違います。回し方が日本語で書いてあるからです。i を 2 から inの要素数 まで 1 ずつ増やす── この一文を正確に読めるかどうかで、答えが変わります。この記事では、その読み方を実際に動かしながら身につけます。

IPAが決めている for の書き方

試験本番では、問題冊子の2ページ目に「擬似言語の記述形式」というルール表が載っています。for についての説明はこれだけです。この表は2022年から変わっていませんので、覚えたことはそのまま使えます。

出典:擬似言語の記述形式(基本情報技術者試験用)

for (制御記述) 処理 endfor
繰返し処理を示す。
制御記述の内容に基づいて,処理を繰返し実行する。
処理は,0 以上の文の集まりである。
ここが最初のつまずき

ルール表には「制御記述」の中身が書かれていません。「制御記述の内容に基づいて」としか書かれておらず、i を 1 から 10 まで 1 ずつ増やす のような具体的な書き方は、記述形式ではなく問題文の中に日本語で現れます

つまり for の解き方とは、暗記した構文に当てはめることではなく、その問題に書かれた日本語を読んで、変数がどう動くかを自分で決めることです。ここを取り違えると、見慣れない制御記述が出た瞬間に手が止まります。

制御記述の3要素

実際の出題で使われる制御記述は、ほぼ次の形です。読むときは3つの要素に分解します。

要素 該当部分の例 読み取ること
開始値 i を 2 から ループに入った瞬間の値。1から始まるとは限らない
終了条件 inの要素数 まで この値を含めて繰り返す。「まで」は以下の意味
増分 1 ずつ増やす 1とは限らない。「2 ずつ増やす」「1 ずつ減らす」もある

まず最小のコードで動かす

このプログラムは何をする?

1 から 9 までの奇数を全部足す。答えは 1+3+5+7+9 です。

やることはこれだけです。あとは 「2 ずつ増やす」と書かれた i がどんな値を順にとるかを見ていきます。とくにループを抜けた直後に i がいくつになっているかに注目してください。

トレースシミュレータ ① 増分が2の繰返し

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


ループ開始前

いま計算していること

まだ計算していません

変数の状態

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

見落としやすい点

ループを抜けた時点で i11 です。9 ではありません。i が終了値を超えたからこそ繰返しが終わったのであって、最後に実行された処理のときの値と、抜けたあとの値は違います。ループの外で i を使う問題では、ここが正解と誤答を分けます。

for (i を 3 から 12 まで 3 ずつ増やす) と書かれているとき、処理は何回実行されますか。

for (i を 1 から 10 まで 2 ずつ増やす) のループを抜けた直後、i の値はいくつですか。

実際の出題ではこう出る

ここからは本物の問題です。for と配列の組合せは科目Bの中心で、この問題も「for が読めるか」だけを問うています。

出典:基本情報技術者試験 科目B サンプル問題 問3

次の記述中の に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。

関数makeNewArray は,要素数2 以上の整数型の配列を引数にとり,整数型の配列を返す関数である。関数makeNewArray をmakeNewArray({3, 2, 1, 6, 5, 4})として呼び出したとき,戻り値の配列の要素番号5 の値は となる。

〔プログラム〕

○整数型の配列: makeNewArray(整数型の配列: in)
  整数型の配列: out ← {}  // 要素数0の配列
  整数型: i, tail
  outの末尾 に in[1]の値 を追加する
  for (i を 2 から inの要素数 まで 1 ずつ増やす)
    tail ← out[outの要素数]
    outの末尾 に (tail + in[i]) の結果を追加する
  endfor
  return out

解答群

ア 5イ 6ウ 9エ 11オ 12カ 17キ 21

答えだけ先に見る

正解は カ(17)。戻り値の配列は {3, 5, 6, 12, 17, 21} になります。その作られ方を、このあと1行ずつ追います。

追いかける前に ─ この関数は何をする?

いきなり1行目から追うより先に、プログラムを日本語に直しておきます。やっていることは2つだけです。

in の1番目を、そのまま out に入れる(4行目)
② そのあとは out の最後の値 + in の同じ位置の値を、out の末尾に足していく(for の中)

入れる(in)=問題文で与えられた配列

13
22
31
46
55
64

出てくる(out)=この時点で決まっているのは1番目だけ

13
2?
3?
4?
5?
6?

2番目から先は、for が1周するたびに1つずつ埋まっていきます。求めるのは要素番号5の値です。

追う前に、ひとつ予想してみましょう

for の1周目(i が 2 のとき)、out の末尾に足されるのはいくつですか。

あとは同じ計算の繰返しですが、頭の中だけで追うと必ずどこかで間違えます。1行ずつ動かして確かめます。

トレースシミュレータ ② makeNewArray

出典:科目B サンプル問題 問3


ループ開始前

配列

いま読んでいる いま書いた

いま計算していること

まだ計算していません

変数の状態

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

答え

最後まで進めると out{3, 5, 6, 12, 17, 21} になります。要素番号5の値は 17 なので、正解は

なお キ 21 は「最後の要素」を答えてしまった人向けの選択肢、オ 12 は要素番号を1つずらした人向けの選択肢です。誤答の選択肢は、トレースのどこで間違えたかに対応して作られています。選択肢を見て「自分はどこで間違えたのか」を確かめる癖をつけてください。

実際の試験には、次のような for も出ます。orders が6個の要素をもつ配列のとき、この for は何回繰り返しますか。
for (order に orders の要素を順に代入する)

つまずきポイントまとめ

まちがえ方 正しい理解
「まで」を「未満」と読む 6 まで6を含むi は 6 のときも処理が実行される
ループを抜けた i の値を間違える 終了値を超えたときに抜ける。抜けた直後の i は終了値より大きい
配列の要素番号を0から数える 擬似言語は1から。問題文にも毎回「要素番号は1から始まる」と書かれる
増分を1だと決めつける 2 ずつ増やす1 ずつ減らすもある。制御記述の日本語を必ず読む
for の構文を暗記しようとする ルール表に制御記述の中身は無い。その場で読んで解釈するのが正しい

次に読む

この記事は「擬似言語の教科書」第1部の第6回です。第1部は全12回で、擬似言語の記述形式に出てくる要素を1つずつ扱います。

本記事で引用した問題の出典:基本情報技術者試験 科目B サンプル問題 問3令和6年度 基本情報技術者試験 科目B 公開問題 問5(独立行政法人情報処理推進機構)。擬似言語の記述形式は各年度の科目B問題冊子より引用。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。シミュレータ①で使用した例題は当サイトのオリジナルです。

Copied title and URL