第9講 サブプロシージャの再帰的使用

第6話 魔方陣になっているかの検査をFor文でいかに実現するか?
  If (a(0) + a(1) + a(2)) <> 15 Then Exit Sub
  If (a(3) + a(4) + a(5)) <> 15 Then Exit Sub
  If (a(6) + a(7) + a(8)) <> 15 Then Exit Sub
  If (a(0) + a(3) + a(6)) <> 15 Then Exit Sub
  If (a(1) + a(4) + a(7)) <> 15 Then Exit Sub
  If (a(2) + a(5) + a(8)) <> 15 Then Exit Sub
  If (a(0) + a(4) + a(8)) <> 15 Then Exit Sub
  If (a(2) + a(4) + a(6)) <> 15 Then Exit Sub
の部分をFor文で実現するのは、
初心者には難しい課題です。
いかなるnに対しても対応しなければなりません。
(実際は、このプログラムではnは3が限界です。
この第9講でも改良していきますが、
それでも4が限界です。
前にも申し上げた通り、講義が進展していきますと、
26次魔方陣でも1秒で数百個の単位で生産できるようになるのですが、
いろいろな工夫を重ねていかないと、
それは出来ません。
第9講は4次魔方陣の生成までを目標にします。)

例えば、3次魔方陣では、

a(0) a(1) a(2)
a(3) a(4) a(5)
a(6) a(7) a(8)

と並んでいるわけですが、
4次では、

a(0) a(1) a(2) a(3)
a(4) a(5) a(6) a(7) 
a(8)  a(9)  a(10)  a(11) 
a(12) a(13) a(14) a(15) 

です。
何次でも対応できるようになるためには、
すべてに共通な性質を見つけてやらなければなりません。
座標とa(9)等を対応させなければなりません。

  1
0 a(0) a(1) a(2) a(3)
1 a(4) a(5) a(6) a(7) 
2 a(8)  a(9)  a(10)  a(11) 
3 a(12) a(13) a(14) a(15) 

つまり、21から9という数字を作り出さなければなりません。
これが分かれば、魔方陣の条件検査をFor文で実現することが出来ます。
横(行)合計検査と列(縦)合計検査は2次元Forで、
対角線合計検査は1次元For文で実現できます。

いきなり全部では難しいですから、
段階的に実現していきことにしましょう。
まずは、行(横)合計検査を2次元For文で実現して下さい。
p
(行合計の条件しかクリアしていないのでたくさん出来てしまいます。)




第5話へ 第7話へ
004

eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ第2部へ
小学生からエンジニアまでのRuby入門へ
本サイトトップへ