メインコンテンツへスキップ
見出し画像

【基本情報】科目B for・whileの問題|ループ回数と終了条件を追う基礎演習

    「最後の1回を数え忘れる」「whileがどこで止まるか分からない」「二重ループになると混乱する……」

    ループの問題は、条件を見る時点と、値を更新する時点を分けると追いやすくなります📚 今回はfor・while・二重ループを使って、本体の実行回数と終了時の値を練習します。

    1.今回の表記

    この記事の問題はIT資格攻略chのオリジナル基礎演習です。説明用に型宣言などを省いた擬似言語を使います。←は代入、=は比較、≠は「等しくない」を表します。forの終点は含みます。配列の要素番号は、特記がなければ1から始まります。公式問題では、その問題の定義と表記を確認してください。

    whileは本体の実行前に条件を判定し、真なら本体を実行します。今回の演習ではbreakや途中のreturnは使いません。

    2.forは開始・終点・増分を確認

    sum ← 0
    for (i を 2 から 8 まで 2 ずつ増やす)
        sum ← sum + i
    endfor

    iは2、4、6、8。終点を含むため、本体は4回動きます。sumは0→2→6→12→20です。

    「8まで」と書いてあっても8回とは限りません。開始値と増分も見てください。

    正の増分で増やす今回のようなループなら、開始値が終点以下の場合、回数は「(終点-開始値)÷増分の商+1」で求められます。開始値が終点を超えていれば0回です。この式を、減少するループや複雑な更新へそのまま当てはめないようにしましょう。

    3.終点にちょうど届かない場合

    for (i を 1 から 6 まで 2 ずつ増やす)
        処理
    endfor

    実行時のiは1、3、5の3回です。次の候補7は6を超えるため、本体は実行しません。「終点を含む」は、進み方を無視して6を追加する意味ではありません。

    初めのうちは公式より、実行されるiを並べる方が確認しやすいです。

    4.whileは最後の偽まで追う

    x ← 1
    count ← 0
    while (x が 9 より小さい)
        x ← x + 3
        count ← count + 1
    endwhile
    
    画像

    本体は3回、条件判定は4回、最後のxは10です。本体を3回実行した後、偽となる判定がもう1回あります。

    「本体の回数」と「条件を調べた回数」は別です。問題がどちらを聞いているか確認しましょう。

    5.0回で終わることもある

    x ← 10
    while (x が 5 より小さい)
        x ← x + 1
    endwhile

    最初の10<5が偽なので、本体は0回。xは10のままです。whileを見たら、まず初期値で条件を調べてください。

    6.更新する場所で結果が変わる

    次の2つは似ていますが、合計する値が違います。

    A 合計してからiを増やす

    i ← 1
    sum ← 0
    while (i が 3 以下)
        sum ← sum + i
        i ← i + 1
    endwhile

    足す値は1、2、3。sum=6、最後のi=4です。

    B iを増やしてから合計する

    i ← 1
    sum ← 0
    while (i が 3 以下)
        i ← i + 1
        sum ← sum + i
    endwhile

    足す値は2、3、4。sum=9、最後のi=4です。条件を調べた後にiが増えるので、最後は4も足されます。

    行の順番は処理の意味そのものです。「1から3の合計っぽい」と推測せず、書かれた順番で追いましょう。

    7.二重ループは内側が終わってから外側へ

    count ← 0
    for (i を 1 から 3 まで 1 ずつ増やす)
        for (j を 1 から 2 まで 1 ずつ増やす)
            count ← count + 1
        endfor
    endfor

    実行される(i, j)は、(1,1)、(1,2)、(2,1)、(2,2)、(3,1)、(3,2)。内側のループに入るたび、jは1から始まります。

    外側3回×内側2回=6回なのでcount=6です。

    8.内側の回数が変わるときは足し合わせる

    count ← 0
    for (i を 1 から 3 まで 1 ずつ増やす)
        for (j を 1 から i まで 1 ずつ増やす)
            count ← count + 1
        endfor
    endfor

    i=1なら内側1回、i=2なら2回、i=3なら3回。合計は1+2+3=6回です。

    画像

    「二重ループだから3×3=9」としてはいけません。内側の終点がiなので、外側の値に応じて変わります。

    9.終了に向かう更新を確認する

    i ← 1
    while (i が 3 以下)
        sum ← i
    endwhile

    この処理ではiが変わらないため、条件は真のままです。今回のルールでは終了しません。

    whileでは、どの変数が条件に使われ、どの行でその値が変わるかを探しましょう。ただし、実際のプログラムにはbreakやreturnなどで終了するものもあります。コード全体を見ることが必要です。

    10.確認問題3問

    問1 forの回数

    count ← 0
    for (i を 3 から 9 まで 2 ずつ増やす)
        count ← count + 1
    endfor

    最後のcountはいくつでしょうか?

    問2 whileの回数と最後の値

    x ← 3
    while (x が 12 より小さい)
        x ← x × 2
    endwhile

    本体の実行回数、条件判定の回数、最後のxを求めてください。

    問3 内側の範囲が変わるループ

    count ← 0
    for (i を 1 から 4 まで 1 ずつ増やす)
        for (j を i から 4 まで 1 ずつ増やす)
            count ← count + 1
        endfor
    endfor

    最後のcountはいくつでしょうか?

    11.解答と復習ポイント

    問1:4。iは3、5、7、9です。初期化のcount←0は、ループ本体の実行回数に含めません。

    問2:本体2回、条件判定3回、x=12。3<12で6に更新、6<12で12に更新、12<12は偽で終了します。

    問3:10。内側は4回、3回、2回、1回。4+3+2+1=10です。

    12.ループ問題の解答前チェック

    • forの開始・終点・増分を確認したか

    • 条件が真のときだけ本体を実行したか

    • 値を更新する順番を守ったか

    • 最後の偽の判定まで追ったか

    • 二重ループの内側の範囲は毎回同じか

    次は「基礎確認ミニ問題集20問」で、トレース・配列・ループをまとめて練習しましょう。基本情報の無料記事まとめから続けられます。

    公式の出題表記はIPA 科目Bサンプル問題で確認してください。

    シリーズを順番に学ぶ

    あなたへのおすすめ