こんにちは。ECF代表のヒガです。
はじめに
アルゴリズムとは、コンピューターに行わせる計算手順のことです。自在にプログラムを作るには、プログラム言語の文法の知識とともにアルゴリズムの考え方を身につけることが必要になります。
アルゴリズム技法習得の肝は「繰り返し」の活用です。この連載では、簡単な題材で繰り返しを使うアルゴリズムの基本パターンを練習していきます。
演習問題の一覧や勉強スタイルについてのアドバイスはこちらからどうぞ。
【オプション問題】スワップ処理 〜 2つの変数データの入れ替え
今回は繰り返しアルゴリズムではありませんが、知っておくとかなり便利なアルゴリズムのご紹介です。
2つの数値型変数に別々の初期値が格納されている状態から、この2つの変数に格納されているデータを入れ替えてください。確認のため、入れ替えの前後で変数の値を表示させてください。
実行例は次のとおりです。実行例(下で紹介するフローチャート例やプログラム実装例)では2つの変数名を「x」「y」としたため、表示の際は区別がつくように「x : 」「y : 」のラベルを表示させています。
2つの変数の値を交換するアルゴリズムはスワップ処理と呼ばれます。
ヒント
2つの変数を「x」「y」として、単純に
x = y;
とだけ書いてしまうと、元の変数xの格納値が上書きされて消えてしまい、yには代入ができなくなってしまいます。もう一つ、一時退避用の変数が必要になります。
解答例と解説
考え方
ヒントにもあるように、交換対象の2つの変数とは別に、一時退避用の変数を用意します。そして以下の手順で代入を実行します。
- 一時退避用変数に変数1の値を代入し退避させる
- 変数1に変数2の値を代入する(上書きされるが、退避済みなのでOK)
- 変数2に一時退避用変数の値(元の変数1の値)を代入する
これで変数1と変数2の格納値が交換されることになります。
フローチャート例
オレンジの3つがスワップ処理です。ここでは一時退避用変数はworkという名前にしています。これはワークスペース(メモリ上の作業領域)を意味しており、一時退避用変数によく付けられる名前です。
Javaでの実装例
public class SwapOption { public static void main(String[] args) { int x = 1; int y = 2; System.out.println("スワップ処理前"); System.out.println("x : " + x); System.out.println("y : " + y); int work; // 一時退避用変数 // スワップ処理 work = x; //一方を退避 x = y; // 退避済みの変数に上書き y = work; // 退避先からコピー System.out.println("スワップ処理後"); System.out.println("x : " + x); System.out.println("y : " + y); } }
入れ替え前後の表示の際には、文字列結合を使って「x : 」や「y : 」のラベルを一緒に表示させています。また、表示をわかりやすくするために「スワップ処理前」「スワップ処理後」の表示も合わせて行っています。
おわりに
人間の頭の中では無意識に行うような単純な手順でも、アルゴリズムとして落とし込むときには具体的な手順を踏む必要が出てきます。これはアルゴリズムをプログラムとして実装した時に、コンピューターが正しく実行できるようにするためです。
このあたり、初心者には意識するのはちょっと面倒ではありますが、今回紹介したスワップ処理のように典型的なパターンを覚えておくことで、スムーズにアルゴリズムを考えることができます。繰り返しパターンと同じ様にしっかり身につけましょう。
次回はこちらです。
合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。