変数には、新しい値をもう一度入れることができます。 これを上書きと考えると分かりやすいです。
擬似言語では、変数に値を入れるときに ← を使います。
同じ変数にもう一度代入すると、前の値は残らず、新しい値に置き換わります。
基本情報技術者試験の擬似言語では、変数の値が何度も変わる問題がよく出てきます。 そのため、値の上書きを理解しておくと、アルゴリズムの流れを追いやすくなります。
まずは、同じ変数に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 は1count + 1 で2になるcount + 1 で3になるcount ← count + 1 は、今の count に1を足して、その結果をもう一度 count に入れるという意味です。
この形は、繰返し処理で何度も出てきます。 何回処理したかを数える変数を、カウンタと呼ぶことがあります。
count ← count + 1 を読むときは、左側と右側を同時に考えると混乱しやすいです。
代入では、いつも右側を先に計算します。
count ← count + 1
この行は、次の順番で読みます。
count + 1 を見るcount の値を確認する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のままです。
つまり、b は a とずっと連動しているわけではありません。
代入された時点の値が入っているだけです。
この違いを理解しておくと、変数が複数出てくる擬似言語の問題も読みやすくなります。
値の上書きは、次のような場面でよく使われます。
たとえば、最大値を探す処理では、より大きい値が見つかったときに 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つを意識しましょう。
慣れるまでは、変数名と値をメモしながらトレースしましょう。 シミュレーターで実行結果を確認すると、上書きの動きがより分かりやすくなります。
値の上書きが理解できると、繰返し処理、合計計算、最大値探索など、アルゴリズムの基本的な考え方にもつながっていきます。