第12講 プロシージャの再帰的使用によって魔方陣を自動生成する
第11話 新しい番号付けコード
コード
Sub zahyousakusei(n As Byte, iz() As Byte, jz() As Byte)
Dim i As Byte, j As Byte, a(10, 10) As Byte, c As Byte
For i = 0 To n - 1
For j = 0 To n - 1
a(i, j) = 128
Next
Next
For i = 0 To n - 1
a(i, i) = i
Next
c = n
For i = 0 To n - 1
If a(i, n - 1 - i) = 128 Then
a(i, n - 1 - i) = c
c = c + 1
End If
Next
For i = 0 To n - 1
For j = i To n - 1
If a(i, j) = 128 Then
a(i, j) = c
c = c + 1
End If
Next
For j = i To n - 1
If a(j, i) = 128 Then
a(j, i) = c
c = c + 1
End If
Next
Next
For i = 0 To n - 1
For j = 0 To n - 1
iz(a(i, j)) = i
jz(a(i, j)) = j
Next
Next
End Sub
解説
このコードは、
読者の汪さんから寄せられたアイデアをもとにしています。
汪さんはなんとプログラミングの学習をはじめて、
1,2週間目でこのすばらしいアイデアを着想されたそうです。
汪さんは、プログラミング初心者であるにもかかわらず、
いきなりC++の学習から初め、私の間違いを指摘されました。
汪さんのプログラムセンスには驚かされます。
汪さんのC++版のプログラミングコードを
VBA版に翻訳したものが上のコードです。
参考ファイルその1(旧番号付けの時間計測版)
ファイルその2(新番号付けの時間計測版)
旧番号付け版
新番号付け版
5次においてさえ77/15≒5.1倍もの倍速効果があります。
6次になると1000倍以上の倍加効果が期待できます。
初心者のためのc++ vc++ c言語 入門 基礎から応用までへ
初心者のための excel 2007 2010 2013 vba マクロ 入門 基礎から応用まで
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
vb講義トップへ
VB講義基礎へ
専門用語なしのC++入門へ
専門用語なしのJava入門へ
専門用語なしのVBA入門
数独のページ
魔方陣のページ
数学研究室に戻る
本サイトトップへ