科目Bのプログラムは、1行ずつの意味は分かるのに、通して読むと分からなくなります。それは読み方の問題です。ここでは、その解き方 ── トレース表の書き方を身につけます。
期間限定クーポンPR|Udemy の講座科目B オリジナル模試 3回分・60問42%OFF 1,500円第2部 定番処理の型 全26回A1-1トレース表の書き方一覧を開く
A1-1トレース表の書き方A1-2繰返しのトレースA1-3配列のトレースA2-1配列を全部見るA2-2最大・最小を見つけるA2-3探す(線形探索)A2-4入れる・消す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コントロールブレーク処理
この回の内容を動画で見る
講義「トレース表の書き方」(全7分26秒)です。
なぜ、頭の中では追えなくなるのか
電話番号を口頭で言われて、書き留めずに覚えていられるのはせいぜい数桁です。これを「記憶力が悪い」とは言いません。人が一度に置いておける数には、もともと限りがあるからです。
プログラムも同じです。変数が2つのうちは頭で追えます。3つ、4つと増えたところで、こぼれます。
頭の中に置いておけるのは、2つか3つまで
箱=変数(左が名前、右がいま入っている値)
変数が2つのうちは、頭の中で追える
a3
b5
3つ、4つと増えると、こぼれる
a3
b5
goukei8
i1
tmp?
a と b を覚えたまま goukei・i・tmp まで追うと、どれかの値が「?」になる。
追えなくなるのは、覚えていられる量の問題。
追えなくなるのは、能力の問題ではない
だから 頭の外に書き出します。書き出す先がトレース表です。
試験では、プログラムを読む力と覚えていられる量は別々に問われません。書き出してしまえば、前者だけの勝負になります。
トレース表 ── 左に行、右に変数
形はとても単純です。
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つのマスを書き換えて使ってしまうこと。それだと途中の値が残らず、頭の中で暗算しているのと同じになります。表にした意味がありません。
実際に、1行ずつ動かしてみる
下のプログラムを、ボタンで1行ずつ進めてください。トレース表が1行ずつ積み上がっていくのが見えます。
代入だけのプログラムを追う
当サイトオリジナルの例題
ループ開始前
いま計算していること
変数の状態
結果
トレース表(進めると1行ずつ積み上がります)
x ← x + y のような行は、右側を先に計算してから、左の箱に書き込みます。そのときの x と y の値を、表の上の行から読んでください(G2-3)。
右側に出てきた変数は読まれただけなので、値は変わりません。
書くのは、値が変わったマスだけ
ここまでの書き方には、まだ無駄があります。変わっていない値まで、毎行そのまま書き写していることです。
実際に手を動かすと、これがいちばん時間を食います。そして同じ数字が縦に並ぶので、どこが変わったのか目で追えません。
書くのは、値が変わったマスだけ
同じ数字が縦に並ぶと、どこが変わったのか目で追えない
全部のマスを埋めた表
| 実行した行 | 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行足す。前の行は消さない |
| 実行する前の値を書く | 書くのは実行し終わったあとの値 |
| 本番でも、全部のマスを毎行埋める | 時間が足りなくなる。値が変わったマスだけ書く。空いたマスは「上と同じ」 |
| 右側の変数も変わったと思う | ← の右は読まれるだけ。変わるのは左の箱 |
次に読む
| A1-2 | 繰返しのトレース ─ 1周を1行に書く |
| G2-3 | 代入「←」 ─ 右を先に計算して、左へ入れる |
| G1 | 擬似言語とは ─ 記号の読み方と書き方を1枚で |
| 目次 | 基本情報技術者試験 科目B 攻略ガイド |
科目Bが難しいと感じたら、この順番で
読み方の基礎を固めてから、本番と同じ形の問題で試す。
まず、読み方の基礎
科目B 基礎講義
プログラムを1行ずつたどって、値の変わり方を見る。定番アルゴリズムの型をそろえる。
0円通常 2,600円先着100名・12月3日まで
講義の目次と無料の1本を見てから、Udemy で0円で受講できます
この記事で引用した資料
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では、引用した箇所の文言を改変していません(省略や補いがある場合は、その場に明記しています)。
この記事のプログラムと表は、すべて当サイトが説明のために作ったものです。IPAの出題そのものは扱っていません(実際の出題の解説は公開問題の解説にあります)。

