第8講 多次元ループ=多次元For文の学習
第4話 2次順列作成(2次元For文)コード例
を実現するプログラム例
Private Sub CommandButton1_Click()
CommandButton2_Click
f '2順列作成プロシージャ
End Sub
Sub f()
Dim i As Integer, j As Integer, k As Integer, cn As Integer
Dim a(2) As Integer
cn = 0
For i = 1 To 2
a(0) = i
For j = 1 To 2
If j <> a(0) Then
a(1) = j
Call g(cn, a())
cn = cn + 1
End If
Next
Next
End Sub
Sub g(cn As Integer, a() As Integer)
Dim i As Integer
For i = 0 To 1
Cells(5, 1 + i + 3 * cn) = a(i)
Next
End Sub
(CommandButton2_Clickは省略。この後も省略します。)
参考ダウンロード添付ファイル
解説
コードの行数は短いですが、
かなり頭が混乱しますね。
a(0)とa(1)のすべての場合は
(1,1)(1,2)(2,1)(2,2)
ですが、このうち(1,1)と(2,2)が順列の規則に反します。
規則は、数字の重複があってはならないです。
重複させないために、
For j = 1 To 2
If j <> a(0) Then
a(1) = j
Call g(cn, a())
cn = cn + 1
End If
Next
中のIf文があります。
この条件をクリアして(1,2)となったときに順列になりますので、
始めて表示関数gによって、結果シートに打ち出されているわけです。
Cells(5, 1 + i + 3 * cn) = a(i)
のcnは結果が3つ飛びに表示させる働きをしています。
D5はA5から3つ飛んでますよね。
もし、
Cells(5, 1 + i ) = a(i)
だったとすると、
(1,2)と(2,1)が同じ
A5とB5に重ねて表示されてしまいます。
以上をヒントに3次順列に挑戦しましょう。
難しいですが、粘り強く頑張りましょう。
第3話へ 第5話へ
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言語入門 基礎から応用まで
本サイトトップへ