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

第3話 2次元For文を利用して上下反転を行う
mj
tah
を実現するプログラム例
Private Sub CommandButton1_Click()
  
  Dim i As Integer
  Dim h(10, 10) As Integer

  Call f(h()) 'データ入力関数
  Call g(1, h()) 'データ表示関数
  Call t(h()) 'データ転置関数
  Call g(12, h()) 'データ表示関数
  Call t(h()) 'データ転置関数
  Call hn(h()) 'データ左右反転関数
  Call g(23, h()) 'データ表示関数
  Call hn(h()) 'データ左右反転関数
  Call jg(h()) 'データ左右反転関数
  Call g(34, h()) 'データ表示関数
  
End Sub
Sub f(h() As Integer)

  Dim i As Integer, j As Integer
  For i = 0 To 9
    For j = 0 To 9
      h(i, j) = 10 * i + j + 1
    Next
  Next
  
End Sub
Sub g(a As Integer, h() As Integer)

  Dim i As Integer, j As Integer
  For i = 0 To 9
    For j = 0 To 9
      Cells(4 + i, a + j) = h(i, j)
    Next
  Next
  
End Sub
Sub t(h() As Integer)

  Dim i As Integer, j As Integer
  Dim h1(10, 10) As Integer
  For i = 0 To 9
    For j = 0 To 9
      h1(i, j) = h(i, j)
    Next
  Next
  For i = 0 To 9
    For j = 0 To 9
      h(i, j) = h1(j, i)
    Next
  Next
  
End Sub
Sub hn(h() As Integer)

  Dim i As Integer, j As Integer
  Dim h1(10, 10) As Integer
  For i = 0 To 9
    For j = 0 To 9
      h1(i, j) = h(i, j)
    Next
  Next
  For i = 0 To 9
    For j = 0 To 9
      h(i, j) = h1(i, 9 - j)
    Next
  Next
  
End Sub
Sub jg(h() As Integer)

  Dim i As Integer, j As Integer
  Dim h1(10, 10) As Integer
  For i = 0 To 9
    For j = 0 To 9
      h1(i, j) = h(i, j)
    Next
  Next
  For i = 0 To 9
    For j = 0 To 9
      h(i, j) = h1(9 - i, j)
    Next
  Next
  
End Sub

Private Sub CommandButton2_Click()
  
  Rows("4:20000").Select
  Selection.ClearContents
  Cells(1, 1).Select
  
End Sub

参考ダウンロード添付ファイル


では、転置等は以上にしまして、
第9講および第10講に繋がる課題として
3次順列の作成を3次元For文によって実現することを考えます。
順列とは
123 132 213 131 312 321
です。
私は、個数が3つのときを3次と名付けています。
すべての順列を網羅するには、3次元For文が必要です。
そして、4次順列の生成になると4次元For文となります。
最終的には、9次順列や16次順列などを考えていきます。
もちろん、16次元For文はとても組む気にはならないことを
9次元For文まで組んで頂き体験して頂くことが目的です。
9次元For文=9次元ループでさえ、とても大変なのに、
プロシージャの再帰的使用=自分が自分に仕事を依頼する方法を使うと、
1万次元ループであろうと、簡単に実現できてしまいます。
本サイトのどの講義でも、n次順列の作成を題材にしています。
理由は、例えば9次順列
123456789 123456798 123456879 ・・・
を2次元に並べると

1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 9 8
1 2 3
4 5 6
8 7 9


・・・・





すでにこれらは数独のブロックを構成しています。
また、この2次元に並べた9次順列のなかで、
すべての行(横)合計、すべての列(縦)合計、すべての対角線合計
が等しいものを見つけてやると、
それは、3次魔方陣です。

8 1 6
3 5 7
4 9 2

本サイトは、魔方陣の研究から始まり、
その題材を基にVBA・Visual Basic・Visual C++・Java等の入門講義をやってきて、
それぞれがGoogle検索においてトップまたは上位に位置してきたのです。
特に、Visual C++入門講義においては『vc++ 入門』『Visual C++ 初心者』『vc# 基礎』
等の検索項目100項目以上で、Googleのトップを独占してきました。
Visual Basic入門講義でも多くの検索項目でGoogleの首位を占めています。
そして、このExcel 2016 vba 入門講義の前に始めた
eclipse c++ 入門講義が各検索においてGoogleのトップに君臨しつつあります。

数独自動生成ソフトも魔方陣の研究を応用したものにすぎません。
ですから、数独=ナンプレが世界的に人気になっていても、
なかなか問題自動作成ソフトが出てこなかった中、
いち早く自動数独問題作成ソフトを開発できたのです。

さて、
p
皆さんにこれを開発して頂きたいのですが、
ノーヒントでは、初心者の皆さんには難しすぎる課題です。
そこで、2次順列のコードを次話で見せて解説して3次順列に挑戦して頂きます。
m




第2話へ 第4話へ

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言語入門 基礎から応用まで
本サイトトップへ