第7講 テトリス開発(4つのブロックを描くまで)
第2話 多次元配列について
第6講第8話で配列について学びました。
このときは、x[0]のように添え字が1つしかありませんでした。
ですが、添え字が複数の配列もあります。
添え字が1つしかない配列を1次元配列と呼び、
2つある配列を2次元配列、3つある配列を3次元配列といいます。
ようするに添え字がn個である配列をn次元配列というのです。
そして、nが2以上のとき多次元配列といいます。
添え字が2つとは、x[2][3]のような場合です。
添え字が2つですから、2次元配列です。
次元とは、皆さんがご存じのように、方向の数です。
1次元とは、方向の1つしかない直線世界です。
2次元とは、縦と横の2方向を持つ平面世界です。
3次元は、2次元に高さの方向を加えた私たちが住む世界です。
添え字が2つのときになぜ2次元配列というのでしょうか。
理由は、方向が2つあるからです。
例えば、
int a[
2][3];
と宣言した場合には縦方向が2つ、横方向が3つの配列になります。
すべてを書き出してみると、
縦方向が2つ、横方向が3つの配列であることがよくわかります。
a[0][0],a[0][1],a[0][2],
a[1][0],a[1][1],a[1][2]
( 1次元配列に注意したことを思い出して下さい。
2のときは、添え字は2-1=1で終わるのでしたね。
同様に、3-1=2で終わります。)
縦方向が2つで横方向が3つの配列になっていますね。
数学の世界では縦方向が2つで横方向が3つを2行3列といいます。
皆さんは、横列も縦列も両方列と呼びますが、
数学やプログラミングの世界では、横列を行、縦列を列と呼びます。
これは覚えて下さい。
この言葉を使えば、
int a[2][3];
は2行3列の配列ということになります。

以上の説明から2次元配列はa[縦][横]となっているわけですが、
第4話を読んでいただければ、わかりますように、
縦横をひっくり返して、a[横][縦]として使うこともできます。
同じ長方形でも視点を変えれば、
になります。
視点を変えるとは、見る人が90°回転することを指しています。
要するに縦横は視点の問題、解釈の問題にすぎませんから、
プログラマが必要に応じて縦横を交換して使えばよいだけです。
実際にこれから開発するテトリスではa[横][縦]としています。



さて、実例を作ってみましょう。
プロジェクトのaまたはbを開いて、
コードを次のように変更しましょう。
#include<stdio.h>
int x[2][3]; //2行3列の2次元配列
void f(); //データ作成社員
void g(); //データ表示社員
int main(){
  f(); //社員f()に仕事を命じる
  g(); //社員g()に仕事を命じる
  return(0);
}
void f(){
  int i,j;
  for(i=0;i<2;i++){
    for(j=0;j<3;j++){
      x[i][j]=3*i+j+1;
    }
  }
}
void g(){
  int i,j;
  for(i=0;i<2;i++){
    for(j=0;j<3;j++){
      printf("x[%d][%d]=%d ",i,j,x[i][j]);
    }
    printf("\n");
  }
}
コピペ用添付ファイル
実行結果
x[0][0]=1 x[0][1]=2 x[0][2]=3
x[1][0]=4 x[1][1]=5 x[1][2]=6

for文の中にfor文を入れ子式に入れるやり方を、
2次元ループ(繰り返し)といいます。
もし、入れ子式に2つfor文が入るなら、
3次元ループといいます。
多次元配列を理解した皆さんなら、
多次元ループも理解できるはずです。
ただ、初心者の方にとって多次元ループは、
理解するのは困難なものですから、
すぐにはわかった気持ちにはならないかもしれませんが。
何事にも忍耐が必要ですよ。
繰り返しますが『習うより慣れろ』が絶対の真理です。
理解できない初心者は、多次元配列とパラレル(並行)に考えるとよいと思います。
1個目の制御変数iは縦方向に動き、
2個目の制御変数jは横方向に動くのだと。


では、皆さんコードを改良して実行結果が
x[0][0][0]= 1 x[0][0][1]= 2 x[0][0][2]= 3
x[0][1][0]= 4 x[0][1][1]= 5 x[0][1][2]= 6
x[0][2][0]= 7 x[0][2][1]= 8 x[0][2][2]= 9

x[1][0][0]=10 x[1][0][1]=11 x[1][0][2]=12
x[1][1][0]=13 x[1][1][1]=14 x[1][1][2]=15
x[1][2][0]=16 x[1][2][1]=17 x[1][2][2]=18

x[2][0][0]=19 x[2][0][1]=20 x[2][0][2]=21
x[2][1][0]=22 x[2][1][1]=23 x[2][1][2]=24
x[2][2][0]=25 x[2][2][1]=26 x[2][2][2]=27

x[3][0][0]=28 x[3][0][1]=29 x[3][0][2]=30
x[3][1][0]=31 x[3][1][1]=32 x[3][1][2]=33
x[3][2][0]=34 x[3][2][1]=35 x[3][2][2]=36

となるようにして下さい。
本当は、3Dで表現したいのですが、
パソコンやタブレットの画面は2次元ですので、
上のようにしました。


第1話へ  第3話へ

002

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

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