第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話へ
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る