第8講 多次元ループ=多次元For文の学習

第7話 5次順列作成(5次元For文)コード例
po
wqe

を実現するプログラム例
Private Sub CommandButton1_Click()

  CommandButton2_Click
  f '5順列作成プロシージャ

End Sub
Sub f()

  Dim i As Integer, j As Integer, k As Integer
  Dim l As Integer, m As Integer, n As Integer
  Dim cn As Integer
  Dim a(5) As Integer
  cn = 0
  For i = 1 To 5
    a(0) = i
    For j = 1 To 5
      If j <> a(0) Then
        a(1) = j
        For k = 1 To 5
          If k <> a(0) And k <> a(1) Then
            a(2) = k
            For l = 1 To 5
              If l <> a(0) And l <> a(1) And l <> a(2) Then
                a(3) = l
                For m = 1 To 5
                  If m <> a(0) And m <> a(1) And m <> a(2) And m <> a(3) Then
                    a(4) = m
                    Call g(cn, a())
                    cn = cn + 1
                  End If
                Next
              End If
            Next
          End If
        Next
      End If
    Next
  Next
  
End Sub

Sub g(cn As Integer, a() As Integer)

  Dim i As Integer
  For i = 0 To 4
    Cells(5 + Int(cn / 5), 1 + i + 6 * (cn Mod 5)) = a(i)
  Next
  
End Sub

参考ダウンロード添付ファイル
さて、今度は一気に9次順列です。
これが出来れば、3次魔方陣生成ソフトが出来ますし、
数独問題自動作成ソフトへの足がかりができます。
といいたいところですが、
やっぱり、一気にやると頭が混乱しますので、
忍耐強く一歩一歩登っていくことにしましょう。
実際に、私は一気に9次へと跳躍したのですが、
大変でした。
プログラム歴30年近い私でも、苦戦したのですから、
初心者の方は、一つ一つ階段を上がっていくしかありません。
5次までは
For m = 1 To 5
  If m <> a(0) And m <> a(1) And m <> a(2) And m <> a(3) Then
という芸のない記述をしてきましたが、
6次以降は、ここもFor文とIf文を見合わせて工夫することにしましょう。
皆さんに、GoTo文を紹介したいと思います。
このGoto文は、BASICの時代スパゲッティプログラムの原因だと、
批判されたのですが、
私は、飛ぶ方向を1カ所に限定すれば、
どんどん使用して全く問題ないと考えています。
スパゲティプログラムは、出口と入り口がたくさんあり、
あっちに飛んだり、こっちに飛んだり、
して混線して見通しの悪いプログラムです。
出口と入り口を1カ所にして、飛ぶ方向も上から下に限定すれば、
何も問題はありません。
さて、Goto文は次のように使います。
    For n = 1 To 6
       For o=0 to 4
         If n = a(o) Then
Goto tobi
       Next
       a(5) = n
              ・
              ・
              ・
tobi:
    Next
:のついた文を行ラベルといいます。
間を飛ばして行ラベルまで飛ぶ命令がGoto文です。
今の例では、tobiまで飛ぶわけです。
nがa(0),a(1),a(2),a(3),a(4)のいずれか等しい場合に、
tobiに飛ぶようにすれば、a(5)との重複を防ぐことが出来ます。
w
      


第6話へ 第8話へ

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入門へ
小学生からエンジニアまでのC言語入門 基礎から応用まで
本サイトトップへ