第7講 多次元配列と1次元配列の関係
第1話 多次元配列の正体
001
を1次元配列で実現することは可能だと思いますか。

もちろん、慧眼な読者は『多次元配列と1次元配列の関係』という講のテーマ名から、
可能にちがいないと考えますよね。
その通りです。
いきなり、3次元配列と1次元配列の関係を考えるのでは複雑ですから、
2次元配列と1次元配列の関係から考えましょう。
第6講第3話で
    Dim a(2, 3) As Integr '2次元配列の宣言
とすると、2次元配列となります。
2次元という意味は、
a(0, 0),a(0, 1),a(0, 2),a(0, 3),
a(1, 0),a(1, 1),a(1, 2),a(1, 3),
a(2, 0),a(2, 1),a(2, 2),a(2, 3)
と縦と横を持つ配列になるからです。

と書きましたが、本当は少しレトリック(過剰表現または粉飾)があります。
だって本当は、メモリ上では
a(0, 0),a(0, 1),a(0, 2),a(0, 3),a(1, 0),a(1, 1),a(1, 2),a(1, 3),a(2, 0),a(2, 1),a(2, 2),a(2, 3)
と並んでいるのですから。
これって1次元ですよね。
だったら、第6講第4話の
059
を実現するプログラム例
Module Module1

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

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

End Module
の2次元配列
    Dim a(2, 3) As Integer '配列aの宣言
は1次元配列
    Dim a(
*) As Integer '配列aの宣言
に変更しても実現できるはずです。
では、要素数*はいくつですか。
答えは30行下に示します。































答え
059
を見れば要素数
*は、3×4−1=11であることがわかります。
1引いているのは、配列は0から始まるからです。
実際に、
0,1,2,3,4,5,6,7,8,9,10,11
を数えれば12個であることおわかりですね。
実行画面がない場合には次のように計算します。
    Dim a(2, 3) As Integer '配列aの宣言
(2+1)×(3+1)−1=11
です。
1を加えている理由はおわかりですね。
0,1,2
0,1,2,3
でしたね。+1は0もカウントするためです。

では、059を1次元配列
    Dim a(11) As Integer '配列aの宣言
によって実現して下さい。

第6講第8話へ   第2話へ

002

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

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