第7講 多次元配列と1次元配列の関係
第4話 第6講第4話の課題を1次元配列によって実現する
037
を1次元配列とデータ生成とデータ表示をすべて2次元For文で実現するコード例

Module Module1

  Sub Main() '私は社長だ。
    'Rnd(-1)
    'Randomize(Timer())
    f()
  End Sub

  Sub f()
    Dim a(11) As Integer '配列aの宣言
    Dim i, j As Integer
    'ランダムデータ生成
    For i = 0 To 2
      For j = 0 To 3
        a(4 * i + j) = Int(Rnd() * 100)
      Next
    Next
    'データ表示
    For i = 0 To 2
      For j = 0 To 3
        If a(4 * i + j) < 10 Then Console.Write(" {0:d} ", a(4 * i + j)) '右端をそろえるための半角スペース
        If a(4 * i + j) >= 10 Then Console.Write("{0:d} ", a(4 * i + j))
      Next
      Console.WriteLine() '改行
    Next
    Console.WriteLine() '改行
    '左右反転行列の表示
    For i = 0 To 2
      For j = 0 To 3
        If a(4 * i + 3 - j) < 10 Then Console.Write(" {0:d} ", a(4 * i + 3 - j)) '右端をそろえるための半角スペース
        If a(4 * i + 3 - j) >= 10 Then Console.Write("{0:d} ", a(4 * i + 3 - j))
      Next
      Console.WriteLine() '改行
    Next
    Console.WriteLine() '改行
    '上下反転行列の表示
    For i = 0 To 2
      For j = 0 To 3
        If a(4 * (2 - i) + j) < 10 Then Console.Write(" {0:d} ", a(4 * (2 - i) + j)) '右端をそろえるための半角スペース
        If a(4 * (2 - i) + j) >= 10 Then Console.Write("{0:d} ", a(4 * (2 - i) + j))
      Next
      Console.WriteLine() '改行
    Next
    Console.WriteLine() '改行
    '転置行列の表示
    For i = 0 To 3
      For j = 0 To 2
        If a(4 * j + i) < 10 Then Console.Write(" {0:d} ", a(4 * j + i)) '右端をそろえるための半角スペース
        If a(4 * j + i) >= 10 Then Console.Write("{0:d} ", a(4 * j + i))
      Next
      Console.WriteLine() '改行
    Next
  End Sub

End Module

第5話の課題は、
    '左右反転行列の表示
    For i = 0 To 2
      For j = 0 To 3
        If a(4 * i + 3 - j) < 10 Then Console.Write(" {0:d} ", a(4 * i + 3 - j)) '右端をそろえるための半角スペース
        If a(4 * i + 3 - j) >= 10 Then Console.Write("{0:d} ", a(4 * i + 3 - j))
      Next
      Console.WriteLine() '改行
    Next
    Console.WriteLine() '改行
の部分を1次元For文で実現するです。
ノーヒントでは難しすぎる課題ですから、
ヒントを出しておきます。
改行のタイミングは、第3話の
    For i = 0 To 11
      
If i > 0 And (i Mod 4) = 0 Then Console.WriteLine() '改行
      If a(i) < 10 Then Console.Write(" {0:d} ", a(i)) '右端をそろえるための半角スペース
      If a(i) >= 10 Then Console.Write("{0:d} ", a(i))
    Next

      If i > 0 And (i Mod 4) = 0 Then Console.WriteLine() '改行
で良いわけですが、表示内容を左右反転にするのが難問中の難問です。

  j→
   
 ↓  
0 1 2 3
0  0   1 2 3
1 4 5 6 7
2 8 9 10 11

1次元配列の添え字03に、
1次元配列の添え字12に、
1次元配列の添え字21に、
1次元配列の添え字30に、
1次元配列の添え字47に、
1次元配列の添え字56に、
1次元配列の添え字65に、
       ・
       ・
       ・
1次元配列の添え字118に、
に変換できればクリアです。
そんなうまい方法はあるでしょうか。
これを実現するには、
0,1,2,3
4,5,6,7
8,9,10,11

を一方では
0,0,0,0
4,4,4,4
8,8,8,8

に変換し、他方では、
0,1,2,3
0,1,2,3
0,1,2,3

に変換して、
さらに、
0,1,2,3

3,2,1,0
に変換する方法を考え組み合わせます。

組み合わせるのは
0,0,0,0
4,4,4,4
8,8,8,8


3,2,1,0
3,2,1,0
3,2,1,0

です。

0,1,2,3
4,5,6,7
8,9,10,11


0,1,2,3
0,1,2,3
0,1,2,3

に変換するには、Modを利用します。
11 mod 4 =3
ですね。11を4で割った余りを求めます。

0,1,2,3
4,5,6,7
8,9,10,11


0,0,0,0
4,4,4,4
8,8,8,8

に変換するには、割り算とInt(*)を利用します。

Int(*)が*の小数部分を切り捨てて整数にする式です。





第3話へ   第5話へ

002

初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ