第14講 フリーストア配列とCLI配列
第6話 1次元CLI配列の学習
第5話問題解答例
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
         array<int>^ a=gcnew array<int>(5);
         int i;
         for(i=0;i<5;i++)a[i]=i+1;

         String^ w=L"";
         for(i=0;i<5;i++)w+=a[i].ToString()+L" ";

         label1->Text=w;
}
フリーストア配列のときは、関数終了直前に必ず削除しなければなりませんでしたが、
CLI配列では、関数の終了と同時に変数は消滅しますので、削除は必要ありません。

(コピーペースト用

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
array<int>^ a=gcnew array<int>(5);
String^ w=L"";
int i;
for(i=0;i<5;i++)a[i]=i+1;
for(i=0;i<5;i++)w+=a[i].ToString()+L" ";
label1->Text=w;
}


では皆さん問題です。
この解答例では、すべてSystem::Void button1_Clickで処理させていますが、
データ作成部分とデータ表示部分を関数f(a)g(a)に独立させて、
System::Void button1_Clickが
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
         array<int>^ a=gcnew array<int>(5);
         f(a);
         g(a);
}
となるようにしてください。解答例は20行下。






















private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
         array<int>^ a=gcnew array<int>(5);
         f(a);
         g(a);
     }
     void f(array<int>^ x){
         int i;
         for(i=0;i<5;i++)x[i]=i+1;
     }
     void g(array<int>^ x){
         String^ w=L"";
         int i;
         for(i=0;i<5;i++)w+=x[i].ToString()+L" ";
         label1->Text=w;
     }


(コピーペースト用

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
array<int>^ a=gcnew array<int>(5);
f(a);
g(a);
}
void f(array<int>^ x){
int i;
for(i=0;i<5;i++)x[i]=i+1;
}
void g(array<int>^ x){
String^ w=L"";
int i;
for(i=0;i<5;i++)w+=x[i].ToString()+L" ";
label1->Text=w;
}



さらに、System::Void button1_ClickでString^ w=L"";を定義して、
それをfに送り、fからかえしてもらいSystem::Void button1_Clickで表示させるプログラムに変更してください。
つかり、関数gを不要にしてください。
解答例は20行下。
























解答例
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
         array<int>^ a=gcnew array<int>(5);
         String^ w=L"";
         w=f(a,w);
         label1->Text=w;
      }
      String^ f(array<int>^ x,String^ w){
         int i;
         for(i=0;i<5;i++)x[i]=i+1;
         for(i=0;i<5;i++)w+=x[i].ToString()+L" ";
         return(w);
      }

(コピーペースト用

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
array<int>^ a=gcnew array<int>(5);
String^ w=L"";
w=f(a,w);
label1->Text=w;
}
String^ f(array<int>^ x,String^ w){
int i;
for(i=0;i<5;i++)x[i]=i+1;
for(i=0;i<5;i++)w+=x[i].ToString()+L" ";
return(w);
}




次に、2次元CLI配列に挑戦しましょう。
2次元配列を宣言するには、
array<要素の型,2>^ g=gcnew array<要素の型,2>(要素数,要素数);
とします。例えば、
array<int,2>^ a=gcnew array<int,2>(5,8);
と宣言して、実行結果がとなるソフトを作りましょう。
1つだけ注意しておきます。
2次元CLI配列の場合、添え字の使い方はa[i][j]ではなく、a[i,j]です。



第11講第6話へ
 第12講第1話へ 第13講第10話へ 第14講第5話へ 第14講第7話へ



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