第13講 ベクタの学習
第8話 3次元ベクタを関数に渡す(その2)

前話解答例
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
         int n1,n2,n3,i,j,k;
         n1=4;
         n2=3;
         n3=5;
         vector< vector < vector <int> > > a(n1);
         for(i=0;i<n1;i++)a[i].resize(n2);
           for(i=0;i<n1;i++){
             for(j=0;j<n2;j++){
               a[i][j].resize(n3);
             }
           }
           String^ w;
           vector< vector < vector <int> > >::iterator x;
           x=a.begin();
           w=f1(x,w,n1,n2,n3);
           label1->Text=w;
           w=L"";
           vector< vector < vector <int> > > b(n1);
           for(i=0;i<n1;i++)b[i].resize(n2);
             for(i=0;i<n1;i++){
               for(j=0;j<n2;j++){
                 b[i][j].resize(n3);
               }
             }
             x=b.begin();
             w=f2(x,w,n1,n2,n3);
             label2->Text=w;
             w=L"";
             for(i=0;i<n1;i++){
               for(j=0;j<n2;j++){
                 for(k=0;k<n3;k++){
                   if((a[i][j][k]+b[i][j][k])<10){
                     w+=L"0"+(a[i][j][k]+b[i][j][k])+L" ";
                   }
                   else{
                     w+=a[i][j][k]+b[i][j][k]+L" ";
                   }
                 }
               w+=L"\n";
             }
             w+=L"\n";
          }
          label3->Text=w;
        }
        String^ f1(vector< vector < vector <int> > >::iterator x,String^ w,int n1,int n2,int n3){
          int i,j,k;
            for(i=0;i<n1;i++){
              for(j=0;j<n2;j++){
                 for(k=0;k<n3;k++){
                   x[i][j][k]=(i+j+k)%9+1;
                   w+=x[i][j][k]+L" ";
                 }
                 w+=L"\n";
              }
            w+=L"\n";
            }
          return(w);
        }
        String^ f2(vector< vector < vector <int> > >::iterator x,String^ w,int n1,int n2,int n3){
          int i,j,k;
          for(i=0;i<n1;i++){
            for(j=0;j<n2;j++){
              for(k=0;k<n3;k++){
                x[i][j][k]=(3*i+2*j+k)%9+1;
                w+=x[i][j][k]+L" ";
              }
              w+=L"\n";
            }
          w+=L"\n";
        }
        return(w);
      }


(コピーペースト用

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
int n1,n2,n3,i,j,k;
n1=4;
n2=3;
n3=5;
vector< vector < vector <int> > > a(n1);
for(i=0;i<n1;i++)a[i].resize(n2);
for(i=0;i<n1;i++){
for(j=0;j<n2;j++){
a[i][j].resize(n3);
}
}
String^ w;
vector< vector < vector <int> > >::iterator x;
x=a.begin();
w=f1(x,w,n1,n2,n3);
label1->Text=w;
w=L"";
vector< vector < vector <int> > > b(n1);
for(i=0;i<n1;i++)b[i].resize(n2);
for(i=0;i<n1;i++){
for(j=0;j<n2;j++){
b[i][j].resize(n3);
}
}
x=b.begin();
w=f2(x,w,n1,n2,n3);
label2->Text=w;
w=L"";
for(i=0;i<n1;i++){
for(j=0;j<n2;j++){
for(k=0;k<n3;k++){
if((a[i][j][k]+b[i][j][k])<10){
w+=L"0"+(a[i][j][k]+b[i][j][k])+L" ";
}
else{
w+=a[i][j][k]+b[i][j][k]+L" ";
}
}
w+=L"\n";
}
w+=L"\n";
}
label3->Text=w;
}
String^ f1(vector< vector < vector <int> > >::iterator x,String^ w,int n1,int n2,int n3){
int i,j,k;
for(i=0;i<n1;i++){
for(j=0;j<n2;j++){
for(k=0;k<n3;k++){
x[i][j][k]=(i+j+k)%9+1;
w+=x[i][j][k]+L" ";
}
w+=L"\n";
}
w+=L"\n";
}
return(w);
}
String^ f2(vector< vector < vector <int> > >::iterator x,String^ w,int n1,int n2,int n3){
int i,j,k;
for(i=0;i<n1;i++){
for(j=0;j<n2;j++){
for(k=0;k<n3;k++){
x[i][j][k]=(3*i+2*j+k)%9+1;
w+=x[i][j][k]+L" ";
}
w+=L"\n";
}
w+=L"\n";
}
return(w);
}




ベクタを反復子で渡しましたが、配列のように直接アドレスを渡す方法もあります。
第9話ではその方法について研究します。


第11講第6話へ
 第12講第1話へ 第13講第7話へ 第13講第9話へ


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