科目Bのプログラムは、1行ずつの意味は分かるのに、通して読むと分からなくなります。それは読み方の問題です。ここでは、その解き方 ── トレース表の書き方を身につけます。
第2部 定番処理の型 全27回
A1-1トレース表の書き方A1-2繰返しのトレースA1-3配列のトレースA2-1配列を全部見るA2-2最大・最小を見つけるA2-3探す(線形探索)A2-4入れる・消すA2-52つの配列を突き合わせるA3-12次元配列の走査A3-22次元配列の集計A4-1文字列を1文字ずつA4-2文字列照合A5-1交換して並べるA5-2挿入ソートA6分割して並べるA7-12分探索A7-2ハッシュ表探索A8-1再帰とはA8-2再帰のトレースA9スタックとキューA10-1リストを読むA10-2リストの挿入と削除A11木構造A12木の巡回A13グラフA14AI・データを題材にしたプログラムA15ファイル処理
まず、通しで見る
1分10秒ほどの動画です(音声つき)。トレース表を1枚、最初から最後まで作ります。前半でどの順に、どこへ何を書くかが分かります。後半は本番で時間を落とさないための書き方です。全部のマスを埋めていると、それだけで試験時間が終わります。どこを省いてよいかまで見て、実際に使える形にします。
動画で追いかけるのは、この4行です。
整数型: a ← 3 整数型: b ← 5 整数型: goukei ← a + b goukei ← goukei × 2
トレース表の作り方(1分21秒・音声つき)
音が出ます。再生できないときは、この下の図と説明で同じ内容を追えます。
ここから、同じ内容を1つずつ確かめていきます。
なぜ、頭の中では追えなくなるのか
電話番号を口頭で言われて、書き留めずに覚えていられるのはせいぜい数桁です。これを「記憶力が悪い」とは言いません。人が一度に置いておける数には、もともと限りがあるからです。
プログラムも同じです。変数が2つのうちは頭で追えます。3つ、4つと増えたところで、こぼれます。
追えなくなるのは、覚えていられる量の問題
追えなくなるのは、能力の問題ではない
だから 頭の外に書き出します。書き出す先がトレース表です。
試験では、プログラムを読む力と覚えていられる量は別々に問われません。書き出してしまえば、前者だけの勝負になります。
トレース表 ── 左に行、右に変数
形はとても単純です。
2つの部分でできている
左実行した行を、上から順に書く
右そのあとの、それぞれの変数の値を書く
たとえば、次の4行のプログラムを追うとします。
整数型: a ← 3 整数型: b ← 5 整数型: goukei ← a + b goukei ← goukei × 2
変数は a、b、goukei の3つ。だから右の列は3本用意します。
用意するのは、この形だけ
整数型: a ← 3 / 整数型: b ← 5 / 整数型: goukei ← a + b / goukei ← goukei × 2
左に行、右に変数の数だけ列を立てる
| 実行した行 | a | b | goukei |
|---|---|---|---|
| 1行目 | |||
| 2行目 | |||
| 3行目 | |||
| 4行目 |
変数は a・b・goukei の3つ。だから右は3本
あとは、上から1行ずつ埋めていくだけ
用意するのは、それだけです。あとは埋めていきます。
1行実行したら、1行足す
埋め方も1つだけです。
やること
プログラムを1行実行するたびに、表を1行足す。足したその行に、実行し終わったあとの値を書く。
1行実行したら、1行足す
足したその行に、実行し終わったあとの値を書く
1行目 整数型: a ← 3 を実行した
| 実行した行 | a | b | goukei |
|---|---|---|---|
| 1行目 | 3 | ー | ー |
a に 3 が入った。b と goukei はまだ未定義
2行目 整数型: b ← 5 まで実行した
| 実行した行 | a | b | goukei |
|---|---|---|---|
| 1行目 | 3 | ー | ー |
| 2行目 | 3 | 5 | ー |
前の行は消さない。下に足す
4行目まで実行した
| 実行した行 | a | b | goukei |
|---|---|---|---|
| 1行目 | 3 | ー | ー |
| 2行目 | 3 | 5 | ー |
| 3行目 | 3 | 5 | 8 |
| 4行目 | 3 | 5 | 16 |
色が付いているのが、その行で変わった値
上から下へ書き足すだけ。前の行は消さない
ここで大事なのは、前の行を消さないことです。上から下へ書き足していくだけ。
消さないから、あとで「この値はどこで変わったのか」をさかのぼれます。答えが合わなかったときに、間違えた行がすぐ見つかります。
1つのマスを書き換えて使ってしまうこと。それだと途中の値が残らず、紙の上で暗算しているのと同じになります。表にした意味がありません。
書くのは、値が変わったマスだけ
ここまでの書き方には、まだ無駄があります。変わっていない値まで、毎行そのまま書き写していることです。
実際に手を動かすと、これがいちばん時間を食います。そして同じ数字が縦に並ぶので、どこが変わったのか目で追えません。
書くのは、値が変わったマスだけ
同じ数字が縦に並ぶと、どこが変わったのか目で追えない
全部のマスを埋めた表
| 実行した行 | a | b | goukei |
|---|---|---|---|
| 1行目 | 3 | ー | ー |
| 2行目 | 3 | 5 | ー |
| 3行目 | 3 | 5 | 8 |
| 4行目 | 3 | 5 | 16 |
薄い数字が、前の行から変わっていないのに書き写したぶん
変わったマスだけ書いた表
| 実行した行 | a | b | goukei |
|---|---|---|---|
| 1行目 | 3 | ||
| 2行目 | 5 | ||
| 3行目 | 8 | ||
| 4行目 | 16 |
空いたマスは「上と同じ」という意味
書かれている数字=その行で変わったもの
空けておいてよい
前の行と同じ値のマスは、空けておきます。空いたマスは「上と同じ」という意味です。
こうすると、書かれている数字=その行で変わったものになります。値の動きが縦に読めるようになるのが、いちばんの効きめです。
実際に、1行ずつ動かしてみる
下のプログラムを、ボタンで1行ずつ進めてください。トレース表が1行ずつ積み上がっていくのが見えます。
自分で書くときも、これとまったく同じものを書きます。
代入だけのプログラムを追う
当サイトオリジナルの例題
ループ開始前
いま計算していること
変数の状態
結果
トレース表(進めると1行ずつ積み上がります)
x ← x + y のような行は、右側を先に計算してから、左の箱に書き込みます。そのときの x と y の値を、1つ上の行から読んでください(G2-3)。
右側に出てきた変数は読まれただけなので、値は変わりません。
つまずきポイントまとめ
| まちがえ方 | 正しい書き方 |
|---|---|
| 頭の中だけで追う | 覚えていられる量の問題。書き出せば読む力だけの勝負になる |
| 1つのマスを書き換えて使う | 1行実行したら1行足す。前の行は消さない |
| 実行する前の値を書く | 書くのは実行し終わったあとの値 |
| 全部のマスを毎行埋める | 値が変わったマスだけ書く。空いたマスは「上と同じ」 |
| 右側の変数も変わったと思う | ← の右は読まれるだけ。変わるのは左の箱 |
次に読む
| A1-2 | 繰返しのトレース ─ 1周を1行に書く |
| G2-3 | 代入「←」 ─ 右を先に計算して、左へ入れる |
| G1 | 擬似言語とは ─ 記号の読み方と書き方を1枚で |
| 目次 | 基本情報技術者試験 科目B 攻略ガイド |
この記事で引用した資料
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。
この記事のプログラムと表は、すべて当サイトが説明のために作ったものです。IPAの出題そのものは扱っていません(実際の出題の解説は公開問題の解説にあります)。

