基本情報技術者試験 (FE) 科目 B — 擬似言語
繰り返し (for) — 「〜から〜まで〜ずつ増やす」の読み方
for (変数 を 開始 から 終了 まで 増分 ずつ 増やす / 減らす) から endfor までを、変数が終了値になるまでくり返す。開始値も終了値も含む閉区間で、Python の range とは境界の扱いが違う。
「〜から〜まで〜ずつ増やす」がひとつの型
基本情報の for 文は、日本語らしい独自の書き方をします。
for (i を 1 から n まで 1 ずつ増やす)
// くり返したい処理
endfori がループ変数、1 が開始値、n が終了値、1 が増分です。開始値も終了値も含む閉区間 で動くので、「1 から 5 まで」は 1, 2, 3, 4, 5 の 5 回まわります。Python の range と境界の扱いが違う点は、 変換して読み比べると特に印象に残ります。
ブラウザで動かしてみる
1 から n までの合計を求める定番例。一行ずつ実行 を押すと i が 1, 2, 3, 4, 5 と順に増え、合計 が 1, 3, 6, 10, 15 と積み上がっていくのが右側の表で追えます。
変数
出力
減らす方向の for
カウントダウンのように減らしたいときはずつ減らす を使い、開始値を終了値より大きくします。
変数
出力
実行すると 5, 4, 3, 2, 1 と順に出力されます。増減の方向を間違えると 1 回もループしない (または無限にまわらないだけで意図とズレる) ので、開始値と終了値の大小関係が方向と一致しているか を確認しましょう。
増分は 1 以外でも書ける
「1 ずつ」の部分は他の値でも構いません。例えば偶数だけを足したいときは 「2 から 10 まで 2 ずつ増やす」と書けます。
変数
出力
出力は 30 (= 2+4+6+8+10) になります。 増分の値によっては終了値ちょうどでは止まらず、 「終了値を超えない最後の値」まででループが終わる点にも注意してください。
for と while の使い分け
- for が向くケース: 事前に「n 回まわす」と決まっている、 または配列の全要素を頭から順に見たいとき
- while が向くケース: いつ終わるかを実行してみないと分からない、 複雑な終了条件で判断するとき
試験の選択肢でも「これは for でも while でも書けるが、意図が明確なのは?」 という問い方が出ることがあります。回数が固定なら for、 終了条件が動的なら while、と覚えておきましょう。
試験でつまずきやすいポイント
- 境界を含む / 含まない: 擬似言語の for は「まで」を含む閉区間。 Python の range とは違う
- 方向の取り違え:
減らすなのに開始値が終了値より小さい、と書くと 1 回もまわらない - 増分と回数の関係: 「1 から 10 まで 3 ずつ増やす」は 1, 4, 7, 10 の 4 回。増分によって回数が変わるので手計算で確認する癖を
- ループ変数の再代入: 本体の中で
i ← i + 5のようにループ変数を勝手にいじると、 for の仕組みと衝突して意図しない挙動になる
for が読めるようになったら、次は「大量のデータをまとめて扱う」ための 配列 (1 始まり) に進みましょう。for と組み合わせるとぐっと表現力が上がります。
よくある疑問
理解できたか試す / 自由に動かす
この構文をもっと練習する(おすすめ書籍)
擬似言語の記法の読み方から、トレースして答えを出すまでを一冊で通せる科目B特化本。手を動かして追う練習量を確保したいときの定番。
プログラミング未経験を前提に、記号の意味とアルゴリズムの考え方を最小単位から積み上げる入門書。変数や条件分岐で手が止まる段階に向く。
科目Bの出題パターンを網羅的に演習できる対策書。構文を理解した後、解法の型を身につける段階で効く。
本セクションはAmazonアソシエイトのリンクを含みます。
プログラムの読み方でつまずいたら。
たいてっくが、アルゴリズムの追い方から SQL・データベース設計まで、1対1で学習をサポートします。「コードを目で追っても何をしているか分からない」段階からで大丈夫です。まずは無料相談から。
「教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。」
— H 様(DB・SQL コース受講)「体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。」
— M 様(DB・SQL コース受講)「大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。」
— K 様(DB・SQL コース受講)