第7講 繰り返し処理・if文・配列を総動員して3次魔方陣を自動生成する!
第4話 3の順列の生成
8778
を実現するプログラム例
#! ruby -Ks
print "3の順列の生成\n"
a=[0]
for i in 1..3
 a[0]=i
 for j in 1..3
  if j!=a[0] then
   a[1]=j
   for k in 1..3
    if k!=a[0] && k!=a[1] then
     a[2]=k
     for l in 0..2
      print a[l]," "
     end
     print "\n"
    end
   end
  end
 end
end
参考ダウンロード添付ファイル

    if k!=a[0] && k!=a[1] then
     a[2]=k
     for l in 0..2
      print a[l]," "
     end
     print "\n"
    end
の部分は、繰り返し処理ですから、
for文に出来ます。
#! ruby -Ks
print "3の順列の生成\n"
a=[0]
for i in 1..3
 a[0]=i
 for j in 1..3
  if j!=a[0] then
   a[1]=j
   for k in 1..3
    h=1
    for l in 0..1
     if k==a[l] then
      h=0
      break
     end
    end
    if h==1 then
     a[2]=k
     for l in 0..2
      print a[l]," "
     end
     print "\n"
    end
   end
  end
 end
end
参考ダウンロード添付ファイル


次に、4の順列に進みたいところですが、
ネスト(段)が深くなりすぎて、
プログラムコードが複雑になりすぎていますので、
メソッド=社員をつかって、コードを簡単にしておきます。
仕事を
a[0]に入力
a[1]に入力
a[2]に入力
画面に表示
に分割しておいて、それぞれの仕事を
a[0]に入力 ・・・f1
a[1]に入力 ・・・f2
a[2]に入力 ・・・f3
画面に表示・・・g
に割り振ります。
#! ruby -Ks
print "3の順列の生成\n"
a=[0]
def f1(a,i)
 a[0]=i
end
def f2(a,i)
 ・・・・・
 ・・・・・
 ・・・・・
end
def f3(a,i)
 ・・・・・
 ・・・・・
 ・・・・・
end
def g(a)
 ・・・・・
 ・・・・・
 ・・・・・
end
for i in 1..3
 f1(a,i)
 for j in 1..3
  h1=f2(a,j)
  if h1==1 then
   for k in 1..3
    h2=f3(a,k)
    if h2==1 then
     g(a)
    end
   end
  end
 end
end
では、皆さん
 ・・・・・
 ・・・・・
 ・・・・・
の部分を考えてコードを完成させて下さい。


第3話へ 第5話へ


004


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