
情報Ⅰのプログラミング問題は、コードを上から眺めて「何となく動きを想像する」とミスしやすくなります。先に、変数が何を表すのか、どこで値が変わるのか、条件分岐と繰り返しが何を判定しているのかを書き出すと、長いコードでも追いやすくなります。
まず変数の「役割」を日本語で書く
たとえば次のような擬似コードを考えます。
total ← 0
for i = 1 to 5
total ← total + i
end
ここで i は「今何回目か」を表す変数、total は「これまでの合計」を保存する変数です。
コードを読む前に、
i:1から5まで変化する回数total:合計
と書くだけで、total ← total + iの意味が見えやすくなります。
変数名が a や x でも、問題文から役割を日本語へ戻すことが大切です。
代入は「等しい」ではなく「右の値を左へ入れる」
プログラミングで
x ← x + 1
と書かれていても、数学の等式 x=x+1 ではありません。
右辺の x+1 を先に計算し、その結果を左辺のxへ保存します。
たとえばx=4なら、右辺は5になり、その5をxへ入れるので、処理後のxは5です。
「←」を数学のイコールとして読むと、更新処理が理解できなくなります。
変数の値は表で追う
次のコードを考えます。
x ← 2
y ← 3
x ← x + y
y ← x - 1
処理ごとに表を作ります。
| 処理後 | x | y |
|---|---|---|
| 初期値 | 2 | 3 |
| x ← x + y | 5 | 3 |
| y ← x - 1 | 5 | 4 |
最後の y ← x - 1 では、xはすでに5へ更新されています。
コードを頭の中だけで追うより、行ごとに状態を書き換える方が確実です。
条件分岐は「条件が真か偽か」を一回ずつ判定する
if score >= 60
result ← "pass"
else
result ← "retry"
end
score=75なら score >= 60 は真なのでpass、score=50なら偽なのでretryです。
難しい問題では条件が複数あります。たとえば
if a > 0 and b > 0
なら、aとbの両方が正のときだけ真です。
条件式を読んだら、文章へ言い換えます。
「aが正で、かつbも正なら」
と書くだけで、and/orの混同を減らせます。
繰り返しは「何回目か」と「更新後の値」を分ける
次を考えます。
s ← 0
for i = 1 to 4
s ← s + 2*i
end
i=1ならs=2、i=2ならs=6、i=3ならs=12、i=4ならs=20です。
| i | その回で足す値 | s |
|---|---|---|
| 1 | 2 | 2 |
| 2 | 4 | 6 |
| 3 | 6 | 12 |
| 4 | 8 | 20 |
「4回繰り返す」だけを見ず、各回で変数がどう変わるかを記録します。
よくある誤りは「更新前」と「更新後」を混ぜること
a ← 3
a ← a * 2
b ← a + 1
このときbは4ではなく7です。2行目でaが6へ更新されているからです。
一度値が変わった変数は、その後の処理では新しい値を使います。
問題用紙の余白へ、
a: 3 → 6
のように履歴を書いておくと、古い値を使うミスを防げます。
配列は「何番目に何が入っているか」を先に確認する
配列を使う問題では、要素番号が0から始まるか1から始まるかを確認します。
data = [5, 8, 2, 9]
ある擬似言語で先頭が0番なら、data[2] は3番目の2です。先頭が1番なら意味が変わります。
問題文や共通テスト用の擬似コードのルールを確認せず、普段使う言語の感覚で決めないようにします。
関数は「入力→処理→出力」で読む
関数が出てきたら、細かな処理へ入る前に、
- 何を受け取るか
- 何を返すか
を確認します。
たとえば
function double(x)
return 2*x
end
なら、「数xを受け取り、その2倍を返す」です。
関数名や中身が長くても、入口と出口が分かれば全体コードでの役割を追いやすくなります。
練習:最大値を更新するコードを追う
data = [4, 9, 3, 7]
max ← data[0]
for each x in data
if x > max
max ← x
end
end
初期のmaxは4です。
x=4では更新なし、x=9でmax=9、x=3では更新なし、x=7でも更新なし。
最後は9です。
ここで重要なのは、max が「今までに見た最大値」を保存していると役割を言葉にすることです。
コードを書き写す前に三つを余白へ作る
問題を見たら、次の三つを先に作ります。
- 変数表:変数名と役割
- 状態表:処理ごとの値
- 条件文の日本語訳:何なら分岐するか
この三つがあれば、長い擬似コードでも「どこを追えばよいか」が明確になります。
コードの意味とアルゴリズムの目的を分ける
一行ずつ正しく追えても、「結局このプログラムは何をしているのか」が分からないことがあります。
最大値探索なら「今までの最大値を保存し、より大きい値が出たら更新する」というアルゴリズムです。
処理を追った後、最後に一文で目的を言い直すと、別の数値や別の変数名へ変わっても同じ構造だと気づけます。
次は条件を一つ変えて再トレースする
完成したコードに対して、
- 初期値を変える
- 繰り返し回数を変える
>を>=に変える
など、一条件だけ変えます。
そして最終値がどう変わるかを表で追います。
プログラミング問題は、コードを暗記する単元ではありません。状態がどう変化するかを、変数・条件・繰り返しの三つに分けて追跡することで、初見のコードにも対応しやすくなります。
参考資料
- 文部科学省「高等学校学習指導要領 情報編」



