第15講 3次魔方陣と4次魔方陣の作成

第2話 2次元に並んでいるセルに1次元セル番号を割り振る

 
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話へ

004
  


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

数学研究室に戻る