第5講 配列の学習

第1話 配列とは? 

私の作った魔方陣作成ソフトだと、変数が何十万個と出てきます。
例えば、VBAで作ったソフト 魔方陣(細胞構成法)をダブルクリックしてオプションでこのコンテンツを有効にするを選び実行されてみてください。
VC++講座の卒業研究課題は、まだ決めていませんが魔方陣も選択肢の一つに考えております。
さて、変数が何十万と出てくる場合、
int a1,a2,・・・,
ではきりがありません。
そして、なんといっても大きな問題はこれらはfor文の対象にできないことです。
この2つの欠点を解消する方法があります。
それが配列です。配列とはa[8]のような添え字付き変数です。

配列は次のように宣言します。
int a[100];
このように宣言すると100個の変数を使えるようになります。
VBの場合は、
Dim a(100) As Integer
と宣言しますが、同じ100なのに変数の数に違いがあります。
VBではこのように宣言すると、101個の添え字付き変数が用意されます。
理由は、a(0),a(1),a(2),・・・,a(100)だからです。
a(0)も含めて数えて101個です。

VC++の場合は、添え字付き変数はちょうど100個です。
添え字は0から始まり、a[0],a[1],a[2],・・・,a[99]と99で終わるからです。
ですから、int a[100]; と宣言しているのにa[100]=100; 等とするとエラーします。
VBにおけるa(100)の100は添え字の最後の番号を指すのに対して、
VC++におけるa[100]の100は配列変数の個数を表します。
VBから入った方は、うっかり間違えるところですので気をつけてください。

配列の添え字は、for文の対象にできます。
例えば、a[0],a[1],a[2],・・・,a[99]のすべてに0を代入するなら、
for(i=0;i<100;i++){
  a[i]=0;
}
です。あるいは、1,2,3,4,・・・,100と入れていきたいなら
for(i=0;i<100;i++){
  a[i]=i+1;
}
です。同じような添え字a1とa[1]では天と地ほど違うことがわかります。
a1の方なら、
a1=1;
a2=2;
a3=3;
 ・
 ・
 ・
a100=100;
と同じような文を100個も入れていかなければならないからです。
もちろん、説明のために使っている省略記号
 ・
 ・
 ・
は使えません。もし、
for(i=0;i<100000;i++){
  a[i]=i+1;
}
の相当するものをa1のようなもので実現しようとすると、
100000この文を永遠に書き続けなければならないのです。
for文やif文で扱える添え字であるということが如何に威力を発揮するかがわかると思います。
理由は、for文とif文があればどんなに複雑なプログラムでも組むことができるからです。
魔方陣(細胞構成法)も結局for文とif文の組み合わせにすぎないのです。

添え字が1つのときを1次元配列といい、2つ以上を多次元配列といいます。
例えば、2次元配列を宣言したければ、
int a[10][10];
とします。
この場合扱える変数は、
a[0][1],a[0][1],a[0][2],a[0][3],・・・,a[0][9]
a[1][1],a[1][1],a[1][2],a[1][3],・・・,a[1][9]
a[2][1],a[2][1],a[2][2],a[2][3],・・・,a[2][9]
a[3][1],a[3][1],a[3][2],a[3][3],・・・,a[3][9]
        ・    
        ・
        ・
a[9][1],a[9][1],a[9][2],a[9][9],・・・,a[9][9]
100個です。10×10=100です。

前にも説明しましたが結局dataGridView1[3,6]も実質結局2次元配列です。
ただし、[]と使い方と列行で違いが2点あります。
配列ではa[行][列]ですが、dataGridViewではdataGridView1[列,行]です。
この行と列の違いが頭の混乱の原因になりますので注意しましょう。

では皆さん、配列を使う簡単なソフトを作ってみましょう。
最初は1次元配列からです。
Form1にボタンとLabelとTextBoxを貼り付け、次のように表示させるにはどうしたよいでしょうか
a
textBox1に表示させるときは、String^型変数を用意してください。
String^ w="";
このように宣言すると、String^型変数を用意し、同時に初期化を行うことができます。
つまり、
String^ w;
w=L"";
としたのと同じです。
尚、w=L"";は整数型変数でいえば0を代入したことに相当します。
L""の""の間がString^型変数の中身ですから、中身なしを意味します。
半角スペースを入れたいなら
w=L" ";
ですし、全角スペースを入れたいなら
w=L" ";
です。
String^型変数でも w=w+L" "+i.ToString(); のような足し算ができることを思い出してください。
では、皆さんコーティングに挑戦してください。

尚、これは配列を使わなくても実現できますが、配列を使い実現していただきたいので、
w=w+L" "+a[i].ToString();
のように使ってください。


第4講第13話へ 第2話へ

025


vc++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ

数学研究室に戻る