ITパスポート試験 / 平成22年度 春期 ITパスポート試験 / 問53
certification-simodake-work

平成22年度 春期 ITパスポート試験 問53 解説 変数の値の入れ替え

設問図

変数AとBに格納されているデータを入れ替えたい。データを一時的に格納するための変数をTMPとすると,データが正しく入れ替わる手順はどれか。ここで“x←y”は,yのデータでxの内容を置き換えることを表す。

選択肢図
  1. ✓ 正答

解説

正解はイです。変数の入れ替え(スワップ)は、コップに入った水を別のコップへ移し替える作業をイメージすると簡単に解けます。

手順の考え方

変数Aと変数Bに入っているデータを入れ替えるためには、次の3ステップが必要です。

  1. 変数Aのデータを空の変数TMPに退避させる。
  2. 変数Aが空になった(データはTMPにある)ので、変数Bのデータを変数Aに入れる。
  3. 変数Bが空になったので、退避させていたTMPのデータを変数Bに入れる。

この手順を記号で表すと以下のようになります。

  1. TMPATMP \leftarrow A
  2. ABA \leftarrow B
  3. BTMPB \leftarrow TMP

選択肢イはこの手順を正しく踏んでいます。

なぜ一時変数が必要なのか

コンピュータの代入処理は、新しい値を代入した瞬間に古い値が消えて上書きされるという性質を持っています。もし、TMPのような退避場所を使わずに ABA \leftarrow BBAB \leftarrow A だけを実行しようとすると、最初の代入でどちらかの値が失われてしまいます。

例えば、A=1,B=2A=1, B=2 の状態で、いきなり ABA \leftarrow B を実行すると、Aの値は2になり、元の1という情報はどこにも残らなくなります。そのため、入れ替えという「操作」には必ず「退避」という工程が不可欠になるのです。

プログラミングにおける活用

この「3つの箱を使った入れ替え」は、プログラミングにおいて非常に頻出するアルゴリズムの基礎です。

特に、データを小さい順や大きい順に並び替える「整列(ソート)」の処理では、隣り合う値を比較し、順序が逆であれば入れ替えるという操作を何度も繰り返します。このとき、一時変数を用いたスワップ処理が何万回、何百万回と実行されています。

この問題の教育的意義は、単なる手順の暗記ではなく、コンピュータがデータを扱う際の「一方向的な上書き」という特性を理解し、それを補うための論理的思考を身につけることにあります。この考え方は、プログラムのバグを減らしたり、効率的なアルゴリズムを設計したりするための第一歩となります。

参考リンク

学習の記録にははてなブックマーク!

気づいたこと・覚えたことをコメントにメモしよう