第8講 4次魔方陣と6次魔方陣の作成

第5話 6次魔方陣解答例


6次魔方陣コード例
Dim a(6, 6) As Integer 'グローバル配列
Private Sub CommandButton1_Click()
  
  Dim n As Byte
  n = 6

  f0 n '自然配列の生成
  f1 n '自然配列の表示
  f2 n '対角点線対称移動
  f3 n '線対称移動
  f4 n '6次魔方陣の表示
  f5 n '検証

End Sub

'自然配列の生成
Sub f0(n As Byte)

  Dim i As Byte, j As Byte

  For i = 0 To n - 1
    For j = 0 To n - 1
      a(i, j) = n * i + j + 1
    Next
  Next

End Sub

'自然配列の表示
Sub f1(n As Byte)

  Dim i As Byte, j As Byte


  Cells(5, 1) = "自然配列"
  For i = 0 To n - 1
    For j = 0 To n - 1
      Cells(6 + i, 1 + j) = a(i, j)
    Next
  Next

End Sub

'対角線点対称移動
Sub f2(n As Byte)

  Dim i As Byte, w As Byte, m As Byte

  m = Int(n / 2)
  '対角線移動
  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
  '逆対角線移動
  For i = 0 To m - 1
    w = a(n - 1 - i, i)
    a(n - 1 - i, i) = a(i, n - 1 - i)
    a(i, n - 1 - i) = w
  Next

End Sub

'線対称移動
Sub f3(n As Byte)

  Dim i As Byte, w As Byte, m As Byte

  m = Int(n / 2)
  '上下対称移動
  For i = 0 To m - 1
    w = a(i, (i + 1) Mod 3)
    a(i, (i + 1) Mod 3) = a(n - 1 - i, (i + 1) Mod 3)
    a(n - 1 - i, (i + 1) Mod 3) = w
  Next
  '左右下対称移動
  For i = 0 To m - 1
    w = a((i + 1) Mod 3, i)
    a((i + 1) Mod 3, i) = a((i + 1) Mod 3, n - 1 - i)
    a((i + 1) Mod 3, n - 1 - i) = w
  Next

End Sub

'6次魔方陣の表示
Sub f4(n As Byte)

  Dim i As Byte, j As Byte

  Cells(13, 1) = "6次魔方陣"
  For i = 0 To n - 1
    For j = 0 To n - 1
      Cells(14 + i, 1 + j) = a(i, j)
    Next
  Next

End Sub

'検証
Sub f5(n As Byte)

  Dim i As Byte, j As Byte, w As Byte

  Cells(21, 1) = "検証"
  '6次魔方陣再表示
  For i = 0 To n - 1
    For j = 0 To n - 1
      Cells(22 + i, 1 + j) = a(i, j)
    Next
  Next
  '行合計の算出と表示
  For i = 0 To n - 1
    w = 0
    For j = 0 To n - 1
      w = w + a(i, j)
    Next
    Cells(22 + i, 7) = w
  Next
  '列合計の算出と表示
  For i = 0 To n - 1
    w = 0
    For j = 0 To n - 1
      w = w + a(j, i)
    Next
    Cells(28, 1 + i) = w
  Next
  '対角線合計の算出と表示
  w = 0
  For i = 0 To n - 1
    w = w + a(i, i)
  Next
  Cells(21, 7) = "対角線合計"
  Cells(21, 9) = w
  '対角線合計の算出と表示
  w = 0
  For i = 0 To n - 1
    w = w + a(n - 1 - i, n - 1 - i)
  Next
  Cells(28, 7) = "対角線合計"
  Cells(28, 9) = w

End Sub

実行画面
実行画面

非常に難解です。でも心配はいりません。
前回も予告した通り、次話から5話程度かけて6次魔方陣プログラムの詳しい解説をしていきます。
粘り強く読んでいただければ必ず理解できますよ。



第4話へ 第6話へ

004


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

数学研究室に戻る