第6講 4次魔方陣を作ってみよう。
第1話 交換プログラム
基礎の学習の途中ですが、
今までの学習ですでに4次魔方陣を作成することができます。
魔方陣とは、
8 | 1 | 6 |
3 | 5 | 7 |
4 | 9 | 2 |
のようにすべての縦、すべての横、2つの対角線の合計が
すべて同じになるもををいいます。
上の例の場合すべて合計は15です。
そして、一辺の長さが3のとき3次魔方陣といいます。
4次魔方陣を作成する方法は、
非常に簡単です。
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 |
1から16まで普通に並べておいて、ピンクの部分を点対称移動すればいいのです。
16 | 2 | 3 | 13 |
5 | 11 | 10 | 8 |
9 | 7 | 6 | 12 |
4 | 14 | 15 | 1 |
自然配列から魔方陣へ(偶数次魔方陣の一般的作成方法)第1弾その1参照
上の1から16まで並べるプログラムは、
For文を使えばできます。
考えて自分でマクロを組んでみましょう。
自然配列解答
問題は、1と16、6と11等をどのように交換するかです。
サンプル9を開いてみましょう。
これは変数aとbの値をExcelのシート上に
a=8
b=3
と表示させるプログラムです。
このプログラムは、
Private Sub CommandButton1_Click()
Dim a As Integer, b As Integer, w As Integer
a = 8
b = 3
Cells(5, 1) = "a="
Cells(5, 2) = a
Cells(6, 1) = "b="
Cells(6, 2) = b
End Sub
です。
そこで皆さんにプログラムを改良して、
aとbの値を交換して、次のように表示させるプログラムを考えて欲しいのです。
a=8
b=3
aとbの交換後
a=3
b=8
次のようなプログラムはどうでしょうか。
Private Sub CommandButton1_Click()
Dim a As Integer, b As Integer, w As Integer
a = 8
b = 3
Cells(5, 1) = "a="
Cells(5, 2) = a
Cells(6, 1) = "b="
Cells(6, 2) = b
Cells(7, 1) = "aとbの交換後"
a = b
b = a
Cells(8, 1) = "a="
Cells(8, 2) = a
Cells(9, 1) = "b="
Cells(9, 2) = b
End Sub
これで一見できそうですが、実行結果は次のようになってしまいます。
a=8
b=3
aとbの交換後
a=3
b=3
どうしてでしょうか。
はじめ、
a = 8
b = 3
の操作によって、
となっています。
次に
a = b
の操作をすると、a = bは実際にはa ← bという操作ですから、
3がaの箱に入ります。
箱には常に値は1個しか入りませんから、
8は追い出されて、
となってしまいます。この瞬間8は消えてしまうのです。
ですから、次の操作b = aは意味がなく、
が繰り返されるだけです。
最初の値8を保存するためには実はもう一つ箱(変数)を用意しておく必要があるのです。
その変数を例えばwとしておいて、
w=a
a=b
b=w
としておけば、うまくいきます。
wの箱は値8を保存しておくための箱なのです。
手順を図にすると、
a=8
b=3
w=a
a=b
b=w
となって、交換がうまくいきます。
交換プログラム解答
では皆さん自然配列解答を改良して魔方陣プログラムを作りましょう。