第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入門講義トップへ