プログラムの追跡・評価・改善

プログラミングの学習において、コードを書くだけでなく「正しく動くか確認し、より良く直していく」プロセスは非常に重要です。共通テストでは、提示されたプログラムがどのように動くかを正確に読み取る力や、どこを直せば効率が良くなるかを判断する力が問われます。

「プログラムが長くなると頭が混乱しちゃう…」と不安になる必要はありません!一行ずつ確実に追いかけるコツを身につければ、パズルのように解くことができますよ。


1. プログラムの追跡(トレース)

プログラムの実行手順を一行ずつ追いかけ、変数の値がどのように変化するかを確認することをトレース(またはドライラン)と呼びます。頭の中だけで考えるとミスが起きやすいため、「トレース表」を書くのが鉄則です。

トレース表の書き方

表の列に「行番号」「各変数の名前」を書き、行が進むごとに変化した値を書き込んでいきます。

【例題】次のプログラムを実行したとき、最後に出力される \(sum\) の値は?
(1) \(sum = 0\)
(2) \(i\) を \(1\) から \(3\) まで \(1\) ずつ増やしながら繰り返す:
(3) | \(sum = sum + i\)
(4) 表示する(\(sum\))

トレースの様子:

  • (1)を実行:\(sum\) は \(0\)
  • (2)の1回目:\(i = 1\) となる
  • (3)を実行:\(sum = 0 + 1\) なので \(sum\) は \(1\)
  • (2)の2回目:\(i = 2\) となる
  • (3)を実行:\(sum = 1 + 2\) なので \(sum\) は \(3\)
  • (2)の3回目:\(i = 3\) となる
  • (3)を実行:\(sum = 3 + 3\) なので \(sum\) は \(6\)
  • (4)を実行:6を表示

【ポイント】
共通テスト形式の「\(i\) を \(1\) から \(3\) まで」という繰り返しは、1も3も含みます。どこまで繰り返すのか、範囲の端っこに注意しましょう!

【よくある間違い】
「\(sum = sum + i\)」を数学の等式だと思って「\(0 = i\) ?」と混乱してしまうことがあります。プログラミングの「\(=\)」は「右側の計算結果を左側の変数に入れる(代入)」という意味なので、「今の \(sum\) に \(i\) を足して、新しい \(sum\) に更新する」と考えましょう。


2. プログラムの評価

プログラムが完成したら、それが「良いプログラム」かどうかを評価します。評価のポイントは主に3つあります。

① 正確性(正しく動くか)

どんな入力に対しても、期待通りの結果を出すかを確認します。特に、「繰り返しがちょうどいい回数で終わるか」「条件分岐の境界線(以上・以下など)」にミスがないかチェックします。

② 効率性(速く動くか・メモリを節約できるか)

同じ結果を出すプログラムでも、計算回数が少ないほうが優秀です。無駄な計算を繰り返していないか、よりシンプルな手順(アルゴリズム)がないかを考えます。

③ 読みやすさ(メンテナンス性)

自分や他の人が後で見ても、何をしているか分かりやすい構造になっているかです。これには関数の活用が大きく関わります。

【豆知識】
昔のコンピュータは性能が低かったため、1行でも短く、少しでもメモリを節約することが最優先でした。現代ではコンピュータの性能が上がったため、「人間にとっての読みやすさ」も同じくらい重要視されています。


3. プログラムの改善

評価の結果、問題が見つかったらプログラムを改善します。共通テストの範囲で特に重要なのが「関数の定義・使用による構造化」です。

関数の活用による改善

同じような処理が何度も出てくる場合、それを関数としてまとめると、以下のようなメリットがあります。

  • プログラム全体が短くなり、見通しが良くなる。
  • もし計算式にミスが見つかっても、関数の中身を一箇所直すだけで済む。
  • 処理に名前(関数名)がつくので、何をしているか理解しやすくなる。

性能の改善例

例えば、「リストの中から特定の条件に合うものを探す」とき、見つかった瞬間に繰り返しを終了(中断)するように書き換えるだけで、無駄なループが減り、実行速度が向上します。

【ポイント】
「計算の限界」に注意!
コンピュータは数値を有限のビット数(0と1)で表現しています。そのため、非常に大きな数や、細かい小数の計算(浮動小数点数)では誤差が生じることがあります。「計算結果が理論上と少し違う?」と思ったら、この内部表現の限界を疑うことも評価のひとつです。


まとめ:学習のアドバイス

プログラムの改善は、まずは「間違っている場所(バグ)を見つける」ことから始まります。問題文の中で「期待した結果が \(10\) なのに、このプログラムだと \(9\) になってしまう。どこを直すべきか?」といった形式で出題されることが多いです。

【クイック復習】

  • トレース: 表を書いて、変数の変化をメモしながら追いかける!
  • 評価: 正確さ、速さ、読みやすさの3点で見直す!
  • 改善: 関数を使って整理したり、無駄な計算を省いたりする!

最初はトレース表を書くのが面倒に感じるかもしれませんが、急がば回れです。何度も練習するうちに、表を書かなくても頭の中でスムーズに処理が追えるようになっていきますよ。頑張りましょう!