第8講 4次魔方陣と6次魔方陣の作成
第7話 6次魔方陣コード解説その1(対角線移動)
0 | 1 | 2 | |
0 | 1 | 2 | 3 |
1 | 7 | 8 | 9 |
2 | 13 | 14 | 15 |
に対応しているのが、
For i = 0 To m - 1
w = a(i, i)
a(i, i) = a(n - 1 - i, n - 1 - i)
a(n - 1 - i, n - 1 - i) = w
Next
などのコードです。m = Int(n / 2)で、n = 6ですから、m = 3 です。
したがって、For i = 0 To m - 1はFor i = 0 To 2 です。つまり、0,1,2が対象になっています。
対象がピンク(つまり対角線上のセル)の場合は、i=jですから、0,1,2も対象になっています。
a(i, i)となっているのは、後半のiはi=jからjでもあるからです。
ですから、このコードの場合iは一人二役です。一人で、iとjの役を演じています。
さて、問題はa(n - 1 - i, n - 1 - i)が何を意味するかです。
0 | 1 | 2 | 3 | 4 | 5 | |
0 | 1 | 2 | 3 | 4 | 5 | 6 |
1 | 7 | 8 | 9 | 10 | 11 | 12 |
2 | 13 | 14 | 15 | 16 | 17 | 18 |
3 | 19 | 20 | 21 | 22 | 23 | 24 |
4 | 25 | 26 | 27 | 28 | 29 | 30 |
5 | 31 | 32 | 33 | 34 | 35 | 36 |
22 | 23 | 24 |
28 | 29 | 30 |
34 | 35 | 36 |
の色を付けた部分が a(n - 1 - i, n - 1 - i)です。
i=0のときは、 a(n - 1 - i, n - 1 - i)= a(6 - 1 - 0, 6 - 1 - 0)= a(5, 5)
i=1のときは、 a(n - 1 - i, n - 1 - i)= a(6 - 1 - 1, 6 - 1 - 1)= a(4, 4)
i=2のときは、 a(n - 1 - i, n - 1 - i)= a(6 - 1 - 2, 6 - 1 - 2)= a(3, 3)
で確かにそうですね。
ですから、
For i = 0 To m - 1
w = a(i, i)
a(i, i) = a(n - 1 - i, n - 1 - i)
a(n - 1 - i, n - 1 - i) = w
Next
では、(1,36),(8,29),(15,22)の交換を行っています。
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る