第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が対象になっています。
対象がピンク(つまり対角線上のセル)の場合は、ですから、0,1,2も対象になっています。
a(i, i)となっているのは、後半のiはから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)の交換を行っています。






第6話へ 第8話へ

004


vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ

数学研究室に戻る