第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倍以上の倍加効果が期待できます。


第10話へ 第13講第1話へ



トップ

初心者のためのc++ vc++ c言語 入門 基礎から応用までへ
初心者のための excel 2007 2010 2013 vba マクロ 入門 基礎から応用まで
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
vb講義トップへ
VB講義基礎へ
専門用語なしのC++入門へ
専門用語なしのJava入門へ
専門用語なしのVBA入門

数独のページ
魔方陣のページ
数学研究室に戻る
本サイトトップへ