アルゴリスム – 2つの変数の値を交換する

2つの変数の値を交換する

プログラミングにおいて変数aと変数bの値を交換するにはどのような手順を行えばいいでしょうか?

変数の値を交換する手順は、プログラミングの経験者に取っては、「出来て当たり前」なぐらい超簡単なことですが、プログラミング初心者に取っては、意外と難しかったりします。

「まずは変数aの値を変数bに入れて、今度は変数bの値を変数aに入れて…」なんてことを考えていませんか?

これだと、どちらの変数にも同じ値が代入されてしまいます。

2つの変数の値を交換するには、一時的に退避させる変数tmpを用意して、変数a、変数b、変数tmpを三角交換の形で入れ替えします。

メモ

temp VS tmp

tempまたはtmpはTemporaryの略称です。Temporaryは日本語で「一時的な」という意味になります。

Windowsでは環境変数やフォルダ名にtempが使われています。Unixでは一時的に使用するディレクトリ名に/tmp, /var/tmpが使われています。

そのようなことからディレクトリの命名に、Windowsではtemp、Unixではtmpが使われる傾向があるようです。

プログラムや関数内で一時的に使用する変数名にどちらを使うかは明確なルールはありません。

個人的な感触としてネットで見かけるコードでは、一時的に使う変数名にtempよりもtmpを使用している事が多いように感じます。

交換のイメージ

2つの変数の値を交換する手順を図で表すと以下の図のようなイメージになります。

[変数データの入れ替え]

サンプルコード

2つの変数の値を交換するアルゴリスムを以下のプログラミング言語で紹介します。

  • Tcl
  • Python

サンプルコードについて

各プログラミング言語の基本的な制御構造とデータ構造を使って記述しています。

必要であれば、for, foreach、リスト、配列などに書き換えたり、関数化を行って練習してください。

Tcl

[サンプル:swap.tcl]

#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# 2つの変数の値を交換して結果を出力する。

set a 10
set b 20

# 変数a,bの値を交換する。

set tmp $a
set   a $b
set   b $tmp

# 変数a, bの値を出力する。

puts "a = $a b = $b"

[実行例]

$ ./swap.tcl
a = 20 b = 10

Python

[サンプル:swap.py]

#!/usr/bin/env python3

# 2つの変数の値を交換して結果を出力する。

a = 10
b = 20

# 変数a,bの値を交換する。

tmp = a
a = b
b = tmp

# 変数a, bの値を出力する。

print(f'a = {a} b = {b}')

[実行例]

$ ./swap.py
a = 20 b = 10

コメント

タイトルとURLをコピーしました