第10講 Subプロシージャの再帰的使用理解のための課題

第1話 順列の作成

この第10講はSubプロシージャの再帰的使用の学習に入るための準備の講です。
ここでは順列作成に挑戦します。
最初、ループ版で組んでいただきその後第11講でSubプロシージャの再帰的使用によって組んでいただきます。
そのことによって、Subプロシージャの再帰的使用のすばらしさを体験していただこうというわけです。

順列とは、123を例に挙げれば
123,132,213,231,312,321
の6通りです。
次のようなシートとコードを作り、
シート
Form1
コード
Private Sub CommandButton1_Click()

End Sub

Private Sub CommandButton2_Click()

  Rows("5:10").Select
  Selection.ClearContents
  Cells(1, 1).Select

End Sub
実行ボタンを押すと、次の実行画面になるように実行コードをFor文ないしはWhile文を使い埋めてください。
実行画面
gr
といっても、ヒントなしでは無理ですね。ですから、考え方を30行下に書きます。
ノーヒントで考えたい方は、スクロールしないで考えてください。
どうしてもわからないときは、30行下の考え方を参照してください。



















考え方
1次元配列a(2)を用意して、a(0)とa(1)とa(2)のそれぞれについて考えます。

 1 2  3 

いずれのセル(枠)も、1,2,3の可能性があります。
ですから少なくとも、3次元以上のループになります。
2番目のセルと3番目のセルでは重複チェックが必要になります。
2番目のセルにつては重複チェックをクリアしたときだけ、3番目のセルへすなわち3つ目の次元に進めるようにします。
3番目のセルにつては重複チェックをクリアしたときだけ、シート上に表示することにします。
この時ループ文を使えば、4次元ループになります。
後の学習のことを考えれば、ループ文を使ってください。
この後、12345678の順列に挑戦します。
3番目以降のセルからは、重複チェックについてもループ処理をしてください。

123(3つの場合3次元順列と名付けます。)の場合に限定しても、超難問と言えます。
ですから、今回は30分程度試行錯誤しても皆目見当がつかなかったら、
次話の解答例を見ることをお勧めします。
3次元でさえ、超難問なのに、8次元になれば頭が爆発しそうになります。

申し訳ありませんが、For文などのループ処理では、この課題は困難であることを理解していただくことが目的です。
Subプロシージャの再帰的使用を使えば実は簡単にできます。
といっても、コーティングが簡単なだけで、内容を理解するにはかなり難しいということは予告しておきます。
ですが、皆さんが理解できるようにきわめて詳しく丁寧に説明していきますので、ご安心ください。


第9講第8話へ 第2話へ

004


vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ

数学研究室に戻る