第14講 フリーストア配列とCLI配列
第5話 3次元フリーストア配列を関数に送る

解答例
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
         String^ w;
         int*** a=new int**[4];
         int i,j;
         for(i=0;i<4;i++)a[i]=new int*[5];
           for(i=0;i<4;i++)
             for(j=0;j<5;j++)
               a[i][j]=new int[6];
         for(i=0;i<4;i++){
           w=f1(a,w,i);
           label1->Text=w;
           w+=L"\n";
         }
         w=L"";
         int*** b=new int**[4];
         for(i=0;i<4;i++)b[i]=new int*[5];
         for(i=0;i<4;i++)
           for(j=0;j<5;j++)
             b[i][j]=new int[6];
         for(i=0;i<4;i++){
           w=f2(b,w,i);
           label2->Text=w;
           w+=L"\n";
         }
         w=L"";
         int*** c=new int**[4];
         for(i=0;i<4;i++)c[i]=new int*[5];
         for(i=0;i<4;i++)
           for(j=0;j<5;j++)
             c[i][j]=new int[6];
         for(i=0;i<4;i++){
           w=f3(a,b,c,w,i);
           label3->Text=w;
           w+=L"\n";
         }
        delete[] a;
        delete[] b;
        delete[] c;
       }
       String^ f1(int*** x,String^ w,int i){
         int j,k;
         for(j=0;j<5;j++){
           for(k=0;k<6;k++){
             x[i][j][k]=24*i+6*j+k+1;
             if(x[i][j][k]<10)
               w+=L"00"+(x[i][j][k]).ToString()+L" ";
             else if(x[i][j][k]<100)
               w+=L"0"+(x[i][j][k]).ToString()+L" ";
             else
               w+=(x[i][j][k]).ToString()+L" ";
           }
           w+=L"\n";
         }
         return(w);
       }
       String^ f2(int*** x,String^ w,int i){
         int j,k;
         for(j=0;j<5;j++){
           for(k=0;k<6;k++){
             x[i][j][k]=24*i+5*k+j+1;
             if(x[i][j][k]<10)
                w+=L"00"+(x[i][j][k]).ToString()+L" ";
             else if(x[i][j][k]<100)
               w+=L"0"+(x[i][j][k]).ToString()+L" ";
             else
               w+=(x[i][j][k]).ToString()+L" ";
           }
           w+=L"\n";
         }
         return(w);
       }
       String^ f3(int*** x,int*** y,int*** z,String^ w,int i){
         int j,k;
         for(j=0;j<5;j++){
           for(k=0;k<6;k++){
             z[i][j][k]=x[i][j][k]+y[i][j][k];
             if(z[i][j][k]<10)
               w+=L"00"+(z[i][j][k]).ToString()+L" ";
             else if(z[i][j][k]<100)
               w+=L"0"+(z[i][j][k]).ToString()+L" ";
             else
               w+=(z[i][j][k]).ToString()+L" ";
           }
           w+=L"\n";
         }
        return(w);
       }



(コピーペースト用

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
String^ w;
int*** a=new int**[4];
int i,j;
for(i=0;i<4;i++)a[i]=new int*[5];
for(i=0;i<4;i++)
for(j=0;j<5;j++)
a[i][j]=new int[6];
for(i=0;i<4;i++){
w=f1(a,w,i);
label1->Text=w;
w+=L"\n";
}
w=L"";
int*** b=new int**[4];
for(i=0;i<4;i++)b[i]=new int*[5];
for(i=0;i<4;i++)
for(j=0;j<5;j++)
b[i][j]=new int[6];
for(i=0;i<4;i++){
w=f2(b,w,i);
label2->Text=w;
w+=L"\n";
}
w=L"";
int*** c=new int**[4];
for(i=0;i<4;i++)c[i]=new int*[5];
for(i=0;i<4;i++)
for(j=0;j<5;j++)
c[i][j]=new int[6];
for(i=0;i<4;i++){
w=f3(a,b,c,w,i);
label3->Text=w;
w+=L"\n";
delete[] a;
delete[] b;
delete[] c;
}
}
String^ f1(int*** x,String^ w,int i){
int j,k;
for(j=0;j<5;j++){
for(k=0;k<6;k++){
x[i][j][k]=24*i+6*j+k+1;
if(x[i][j][k]<10)
w+=L"00"+(x[i][j][k]).ToString()+L" ";
else if(x[i][j][k]<100)
w+=L"0"+(x[i][j][k]).ToString()+L" ";
else
w+=(x[i][j][k]).ToString()+L" ";
}
w+=L"\n";
}
return(w);
}
String^ f2(int*** x,String^ w,int i){
int j,k;
for(j=0;j<5;j++){
for(k=0;k<6;k++){
x[i][j][k]=24*i+5*k+j+1;
if(x[i][j][k]<10)
w+=L"00"+(x[i][j][k]).ToString()+L" ";
else if(x[i][j][k]<100)
w+=L"0"+(x[i][j][k]).ToString()+L" ";
else
w+=(x[i][j][k]).ToString()+L" ";
}
w+=L"\n";
}
return(w);
}
String^ f3(int*** x,int*** y,int*** z,String^ w,int i){
int j,k;
for(j=0;j<5;j++){
for(k=0;k<6;k++){
z[i][j][k]=x[i][j][k]+y[i][j][k];
if(z[i][j][k]<10)
w+=L"00"+(z[i][j][k]).ToString()+L" ";
else if(z[i][j][k]<100)
w+=L"0"+(z[i][j][k]).ToString()+L" ";
else
w+=(z[i][j][k]).ToString()+L" ";
}
w+=L"\n";
}
return(w);
}




以上でフリーストア配列の学習は終わりにして、次に配列の最後の学習としてCLI配列を勉強します。
ネイティブ配列がC言語時代からあるのに対して、
Visual C++になって追加された配列がこれから学ぶCLI配列と考えてよいと思います。
まず、1次元のCLI配列から学習しましょう。
1次元のCLI配列は、次のように宣言します。
array<要素の型>^ 配列名=gcnew array<要素の型>(要素数);
例えば、整数型の配列aであれば
array<int>^ a=gcnew array<int>(5);
等と宣言します。
では、皆さんこのCLI配列を用いて、次のように表示させるソフトを新規に作りましょう。


第11講第6話へ
 第12講第1話へ 第13講第10話へ 第14講第4話へ 第14講第6話へ


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