第7講 一般種法による魔方陣作成
第2話 ソースの改良する場所

前話で問題を2つ出しました。
@種を作るプログラムを作るにはどうしたらよいか。
A二つ目の種が一つ目の種と直交しているしているかどうかをどうやって判定するか。
@の方は簡単で、残確定法1を少し改良するだけでできます。

Sub sakusei(g As Integer)

  Dim i, j, k, l, hh, hhh, wa, sa As Integer
  j = jz(g)
  i = iz(g)

  If g = n - 1 Then
    wa = 0
    For k = 0 To n - 2
      wa = wa + mah(k, k)
    Next
    hhh = 0
    
sa = Int(n * (n * n + 1) / 2) - wa
    
If sa < 1 Or sa > n * n Then GoTo owari1
    
If tyouhukuhantei(sa - 1) = 1 Then GoTo owari1
      mah(i, j) = sa
      
tyouhukuhantei(sa - 1) = 1
      hhh = 1
      sakusei (g + 1)
      GoTo owari1
    End If
  End If
    ・
    ・
    ・
  
kk = (n + 1) * i
  For k = 1 To n * n
    kkk = (k + kk - 1) Mod n * n + 1
    mah(i, j) = kkk
    'Cells(i + 5, 1 + j) = mah(i, j)
    hh = 0
    
If tyouhukuhantei(kkk - 1) = 1 Then GoTo owari
    
tyouhukuhantei(kkk - 1) = 1
    hh = 1
    
If hh = 1 Then tyouhukuhantei(kkk - 1) = 0
      ・
      ・
  Next
owari1:
   ・
   ・
   ・
  If hhh = 1 Then tyouhukuhantei(sa - 1) =
0


End Sub

のピンクの部分だけを直せばよいのです。
直していく際に、手作業ではなく是非とも置換を使って頂きたいと思います。
なぜなら
    sa = Int(n * (n * n + 1) / 2) - wa
    
If sa < 1 Or sa > n * n Then GoTo owari1
    
If tyouhukuhantei(sa - 1) = 1 Then GoTo owari1
      mah(i, j) = sa
      
tyouhukuhantei(sa - 1) = 1
の記述は7回も出てくるからです。
具体的には変更したい文をドラッグして反転させた後
メニューバーの編集→置換の順でクリックし、
対象をカレントプロシージャにして、
すべて置換を押せば、7つの文が一気に変更できます。
さて、それではどのように直したらよいのでしょうか。


第7講第1話へ 
第7項第3話へ

VB入門講義応用編トップへ

VB入門講義トップへ