<一覧に戻る

擬似言語で値の上書きする方法

変数には、新しい値をもう一度入れることができます。 これを上書きと考えると分かりやすいです。

擬似言語では、変数に値を入れるときに を使います。 同じ変数にもう一度代入すると、前の値は残らず、新しい値に置き換わります。

基本情報技術者試験の擬似言語では、変数の値が何度も変わる問題がよく出てきます。 そのため、値の上書きを理解しておくと、アルゴリズムの流れを追いやすくなります。

まずは、同じ変数に2回代入する例を見てみましょう。

後から入れた値が残る

次のプログラムをシミュレーターで実行してみましょう。

○main
整数型: score
score ← 40
score ← 90
print(score)

出力は 90 です。

最初に score に40を入れました。 しかし、その後で score に90を入れています。

同じ変数に新しい値を入れたので、前の40は上書きされます。 最後に残っているのは90なので、print(score) の出力も90になります。

プログラムを読むときは、昔の値ではなく、その時点で最新の値を見る必要があります。

上書きは変数の中身を入れ替えること

変数を箱に例えると、上書きは箱の中身を入れ替えることです。

最初は、score という箱に40が入っています。 次に、同じ箱に90を入れます。 すると、箱の中身は90になります。

40と90が両方入っているわけではありません。 最後に入れた値だけが、現在の値として残ります。

この考え方は、擬似言語のトレースでとても大切です。 変数を見るたびに、「今この変数には何が入っているか」を確認しましょう。

今の値を使って上書きする

上書きでは、今入っている値を使って新しい値を作ることもできます。

○main
整数型: count
count ← 1
count ← count + 1
count ← count + 1
print(count)

出力は 3 です。

流れを追うと、こうなります。

  • 最初に count は1
  • 1回目の count + 1 で2になる
  • 2回目の count + 1 で3になる
  • 最後に3を表示する

count ← count + 1 は、今の count に1を足して、その結果をもう一度 count に入れるという意味です。

この形は、繰返し処理で何度も出てきます。 何回処理したかを数える変数を、カウンタと呼ぶことがあります。

右側を先に計算する

count ← count + 1 を読むときは、左側と右側を同時に考えると混乱しやすいです。 代入では、いつも右側を先に計算します。

count ← count + 1

この行は、次の順番で読みます。

  • 右側の count + 1 を見る
  • 今の count の値を確認する
  • 1を足す
  • 計算結果を左側の count に入れる

たとえば、今の count が5なら、右側は 5 + 1 です。 結果は6なので、count は6に上書きされます。

このように、上書きは「今の値を使って、次の値を作る」場面でよく使われます。

合計を上書きしながら増やす

次は、合計を求める例を見てみましょう。

○main
整数型: sum
整数型: score
sum ← 0
score ← 70
sum ← sum + score
score ← 80
sum ← sum + score
print(sum)

出力は 150 です。

このコードでは、sum に合計を入れています。 最初に0を入れておき、点数を足すたびに sum を上書きしています。

流れは次のようになります。

  • sum に0を入れる
  • score に70を入れる
  • sum + score は0 + 70なので、sum は70になる
  • score に80を入れる
  • sum + score は70 + 80なので、sum は150になる
  • sum を表示する

ここで大切なのは、sum が途中で変わっていることです。 最初の sum は0ですが、途中で70になり、最後に150になります。

合計を求めるアルゴリズムでは、このように変数を上書きしながら値を増やしていきます。

上書きとコピーの違い

上書きと似たところで、変数の値を別の変数にコピーする処理があります。

○main
整数型: a
整数型: b
a ← 10
b ← a
a ← 20
print(b)

出力は 10 です。

b ← a の時点で、b にはそのときの a の値10が入ります。 その後で a が20に上書きされても、b は10のままです。

つまり、ba とずっと連動しているわけではありません。 代入された時点の値が入っているだけです。

この違いを理解しておくと、変数が複数出てくる擬似言語の問題も読みやすくなります。

上書きが必要になる場面

値の上書きは、次のような場面でよく使われます。

  • 回数を1ずつ増やす
  • 合計を更新する
  • 最大値や最小値を更新する
  • 条件に応じて状態を変える
  • 繰返しの中で変数の値を変える

たとえば、最大値を探す処理では、より大きい値が見つかったときに max を上書きします。 合計を求める処理では、新しい値を足すたびに sum を上書きします。

このように、上書きはアルゴリズムの中で「今の状態を更新する」ために使われます。

最新の値を追う練習をしよう

上書きで大切なのは、常に最新の値を見ることです。 プログラムは上から順に実行されるため、同じ変数でも行によって中身が変わります。

次のコードを見て、出力を予想してから実行してみましょう。

○main
整数型: x
x ← 2
x ← x × 3
x ← x + 4
print(x)

出力は 10 です。

流れは次のようになります。

  • x に2を入れる
  • x × 3 は2 × 3なので、x は6になる
  • x + 4 は6 + 4なので、x は10になる
  • x を表示する

もし最初の2だけを見てしまうと、正しい出力を予想できません。 代入されるたびに、変数の中身を更新して考えることが大切です。

値の上書きはトレースの基本

値の上書きは、擬似言語を読むうえで欠かせない考え方です。 特に、基本情報技術者試験のアルゴリズム問題では、変数の値が何度も変わります。

上書きを読むときは、次の3つを意識しましょう。

  • 同じ変数に代入すると、前の値は新しい値に置き換わる
  • 右側を先に計算してから、左側を上書きする
  • プログラムを読むときは、その時点での最新の値を見る

慣れるまでは、変数名と値をメモしながらトレースしましょう。 シミュレーターで実行結果を確認すると、上書きの動きがより分かりやすくなります。

値の上書きが理解できると、繰返し処理、合計計算、最大値探索など、アルゴリズムの基本的な考え方にもつながっていきます。

このトピックの他のセクション:

  1. 擬似言語の変数とは何か
  2. 擬似言語の代入とは何か
  3. 擬似言語で値の上書きする方法(現在表示中)

出力結果:


            

診断:


            

変数: