第15講 3次魔方陣と4次魔方陣の作成
第2話 2次元に並んでいるセルに1次元セル番号を割り振る
0 | 1 | 2 | |
0 | 0 | 1 | 2 |
1 | 3 | 4 | 5 |
2 | 6 | 7 | 8 |
座標は、グローバル配列 Dim x( 3 ) As Integer,y( 3 ) As Integer を用意しておいて、
次のようにプログラミングすれば2次元を1次元に対応させることが出来ます。
For i = 0 To i = 8
x( i ) = i mod 3
y( i ) = Int( i / 3 )
Next
トレースしてみましょう。
i = 0のとき、
x( 0 ) = 0 mod 3 = 0
y( 0 ) = Int(0 / 3) = 0
i = 1のとき、
x( 1 ) = 1 mod 3 = 1
y( 1 ) = int(1 / 3) = 0
i = 2のとき、
x( 2 ) = 2 mod 3 = 2
y( 2 ) = Int(2 / 3) = 0
i = 3のとき、
x( 3 ) = 3 mod 3 = 0
y( 3 ) = Int(3 / 3) = 1
i = 4のとき、
x( 4 ) = 4 mod 3 = 1
y( 4 ) = Int(4 / 3) = 1
i = 5のとき、
x( 5 ) = 5 mod 3 = 2
y( 5 ) = Int(5 / 3) = 1
i = 6のとき、
x( 6 ) = 6 mod 3 = 0
y( 6 ) = Int(6 / 3) = 2
i = 7のとき、
x( 7 ) = 7 mod 3 = 1
y( 7 ) = Int(7 / 3) = 2
i = 8のとき、
x( 8 ) = 8 mod 3 = 2
y( 8 ) = Int(8 / 3) = 2
どうです。見事に1次元番号を2次元に割り振っていることがわかります。
実際にはグローバル配列は、将来のことを考え
Dim x( 50 ) As Integer,y( 50 ) As Integer
とサイズを大きめにとっておきましょう。
将来は、26次魔方陣あたりでも1秒で数百の単位で作成できるようになるからです。
また、普遍的なプログラムにするため
グローバル変数 Dim n As Integerを用意しておいて、
Private Sub CommandButton1_Click()において、
n = Cells(3,10)
などとしておいて、
For i = 0 To i = n * n - 1
x( i ) = i mod n
y( i ) = Int( i / n )
Next
としておきましょう。
では、皆さんシートとコードを考えましょう。
第1話へ 第3話へ
VBA講義第1部へ
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る