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

【基本情報】科目B トレース表の書き方|変数の変化を追う基礎演習

    「解説を読めば分かるのに、自分でプログラムを追うと答えが変わる……」

    そんなときは、計算を速くする前に、トレース表の書き方を整えましょう📚 トレース表は、処理を実行するたびに変数の値を記録する表です。

    今回は、代入・条件分岐・繰返しの3つを、小さな例題で練習します。読み終わったら、実行順を崩さず、現在の値を使って計算できる状態を目指します。

    1.今回使う表記

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

    変数や代入の意味が不安な方は、先に擬似言語入門を確認してください。

    2.表に書くのは「その行を実行した直後」

    まず、次の処理を追います。

    ① x ← 3
    ② y ← 2
    ③ x ← x + y
    ④ y ← x × 2

    表の列は「実行した行」「x」「y」の3つ。まだ値を代入していない変数は「—」と書きます。これは0という意味ではなく、今回の追跡では未設定という印です。

    画像

    ③では右辺の3+2を先に計算し、その結果の5をxに入れます。④で使うxは、最初の3ではなく、更新された5です。答えはx=5、y=10。

    更新されなかった変数も、初めのうちは値をそのまま書くと確認しやすくなります。

    3.2つの代入は同時に行われない

    x ← 4
    y ← 7
    x ← y
    y ← x

    「xとyが入れ替わる」と感じたら注意です。x←yを実行した時点で、xも7になります。次のy←xでは、この7を使うため、最後はx=7、y=7です。

    交換したいときは、元のxを別の変数に残します。

    x ← 4
    y ← 7
    temp ← x
    x ← y
    y ← temp

    tempに4を保存してからxを書き換えるので、最後はx=7、y=4。表にtempの列を足せば、元の値がどこに残っているか見えます。

    4.if文は実行した枝だけ追う

    x ← 6
    y ← 1
    if (x が 5 より大きい)
        y ← y + x
    else
        y ← y - x
    endif
    x ← y + 2

    判定時点のxは6。6>5は真なので、y←y+xだけを実行します。

    画像

    両方の枝を計算してはいけません。真偽を決めたら、実行しない枝に斜線を引くつもりで読みます。なお、xが5なら「5より大きい」は偽です。境界の値にも注意しましょう。

    5.ループは「いつの値か」をそろえる

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

    ループでは、処理前と処理後を混ぜないことが大切です。ここでは「1回分の加算が終わった直後」のsumを記録します。

    画像

    終点の4を含むので、加算は4回です。sumの初期値0も先に書きましょう。答えはsum=10です。

    6.whileは終了の判定も書く

    x ← 2
    while (x が 10 より小さい)
        x ← x × 2
    endwhile
    
    画像

    最後のxは8ではなく16です。x=8の時点では条件が真なので、もう1回実行します。16になってから次の判定で終了します。

    「条件の上限が10だから、結果も10以下」とは限りません。条件を調べる時点と、値を更新する時点を分けて追いましょう。

    7.確認問題3問

    答えを見る前に、紙やメモに途中の値を書いてください。

    問1 代入の順番

    a ← 2
    b ← 5
    a ← a + b
    b ← a - b

    最後のaとbはいくつでしょうか?

    問2 条件分岐

    x ← 5
    y ← 0
    if (x が 5 より大きい)
        y ← 10
    else
        y ← 20
    endif

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

    問3 条件と更新

    x ← 1
    while (x が 5 以下)
        x ← x + 2
    endwhile

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

    8.確認問題の解答と復習ポイント

    問1:a=7、b=2。aは2+5で7に更新されます。bは更新後のaを使って7-5=2です。b=−3なら、更新前のaを使っていないか確認しましょう。

    問2:y=20。5>5は偽なのでelse側を実行します。「より大きい」と「以上」の読み違いに注意です。

    問3:3回、x=7。1→3→5→7と変化します。x=5でも「5以下」は真なので実行し、7で初めて条件が偽になります。

    9.間違いを減らす4つの確認

    • 右辺は現在の値で計算したか

    • 代入を上から順に実行したか

    • ifで実行しない枝を飛ばしたか

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

    慣れたら記録する列を減らしても大丈夫です。ただし、自分がよく間違える変数や条件は残してください。

    次は「配列と添字」の演習へ。変数の列に加えて、配列の位置と値を整理します。基本情報の無料記事まとめから続けて学べます。

    公式の表記を確認したい方はこちら:IPA 科目Bサンプル問題。

    シリーズを順番に学ぶ

    あなたへのおすすめ