第8講 4次魔方陣と6次魔方陣の作成
第4話 4次魔方陣解答例
第4話で4次魔方陣解答例を示し、
第5話で6次魔方陣解答例を示します。
そして、6次魔方陣の解答例については、
第6話以降から5話程度かけて詳しく解説していきます。
尚、4次魔方陣の方は初心者のためのvisual basic入門講義基礎編の第6講 4次魔方陣を作ってみよう
の 第6話 解答1解説 第7話 解答2解説において詳しく解説していますので、
そちらも参照していただければと思います。
コード例
Dim a(4, 4) As Integer 'グローバル配列
Private Sub CommandButton1_Click()
Dim n As Byte 'この行と次の行を省力して、f0 n以降をf0 4などとプログラムしてもよいが、
n = 4 'この2行を入れてf0 nなどとしておけばn = 6と変更するだけで6次の場合になる。
'プログラムを考える場合、汎用性=一般性が広くなるように組むことがコツ
f0 n '自然配列の生成
f1 n '自然配列の表示
f2 n '対角線対称移動
f3 n '4次魔方陣の表示
f4 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
'4次魔方陣の表示
Sub f3(n As Byte)
Dim i As Byte, j As Byte
Cells(11, 1) = "4次魔方陣"
For i = 0 To n - 1
For j = 0 To n - 1
Cells(12 + i, 1 + j) = a(i, j)
Next
Next
End Sub
'検証
Sub f4(n As Byte)
Dim i As Byte, j As Byte, w As Byte
Cells(17, 1) = "検証"
'4次魔方陣再表示
For i = 0 To n - 1
For j = 0 To n - 1
Cells(19 + 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(19 + i, 5) = w
Next
'列合計の算出と表示
For i = 0 To n - 1
w = 0
For j = 0 To n - 1
w = w + a(j, i)
Next
Cells(23, 1 + i) = w
Next
'対角線合計の算出と表示
w = 0
For i = 0 To n - 1
w = w + a(i, i)
Next
Cells(18, 6) = "対角線合計"
Cells(18, 8) = w
'対角線合計の算出と表示
w = 0
For i = 0 To n - 1
w = w + a(n - 1 - i, n - 1 - i)
Next
Cells(23, 6) = "対角線合計"
Cells(23, 8) = w
End Sub
Private Sub CommandButton2_Click()
Rows("5:1000").Select
Selection.ClearContents
Cells(1, 1).Select
End Sub
実行画面
第3話へ 第5話へ
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る