第13講 ベクタの学習
第6話 2次元ベクタを関数に渡す(その2)
前話問題1解答例
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
int a[3][3];
int* b=(int* )malloc(9*sizeof(int));
vector< vector<int> > c(3);
int i;
for(i=0;i<3;i++)c[i].resize(3);
f1(&a[0][0]);
f2(b);
vector< vector<int> >::iterator j;
j=c.begin();
f3(j);
g1(&a[0][0]);
g2(b);
g3(j);
}
void f1(int* x){
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
*(x+3*i+j)=3*i+j+1;
}
}
}
void f2(int* y){
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
*(y+3*i+j)=3*j+i+1;
}
}
}
void f3(vector< vector<int> >::iterator z){
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
z[i][j]=3*(2-i)+(2-j);
}
}
}
void g1(int* x){
int i,j;
String^ w;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
w+=(*(x+3*i+j)).ToString()+L" ";
}
w+=L"\n";
}
label1->Text=w;
}
void g2(int* y){
int i,j;
String^ w;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
w+=(*(y+3*i+j)).ToString()+L" ";
}
w+=L"\n";
}
label2->Text=w;
}
void g3(vector< vector<int> >::iterator z){
int i,j;
String^ w;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
w+=z[i][j].ToString()+L" ";
}
w+=L"\n";
}
label3->Text=w;
}
前話問題2解答例
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^
e) {
int a[3][3];
int* b=(int* )malloc(9*sizeof(int));
vector< vector<int> > c(3);
int i;
for(i=0;i<3;i++)c[i].resize(3);
String^ w;
w=f1(&a[0][0],w);
label1->Text=w;
w=L"";
w=f2(b,w);
label2->Text=w;
w=L"";
vector< vector<int> >::iterator j;
j=c.begin();
w=f3(j,w);
abel3->Text=w;
}
String^ f1(int* x,String^ w){
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
*(x+3*i+j)=3*i+j+1;
w+=(*(x+3*i+j)).ToString()+L" ";
}
w+=L"\n";
}
return(w);
}
String^ f2(int* y,String^ w){
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
*(y+3*i+j)=3*j+i+1;
w+=(*(y+3*i+j)).ToString()+L" ";
}
w+=L"\n";
}
return(w);
}
String^ f3(vector< vector<int> >::iterator
z,String^ w){
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
z[i][j]=3*(2-i)+(2-j)+1;
w+=z[i][j].ToString()+L" ";
}
w+=L"\n";
}
return(w);
}
では、次に3次元ベクタに挑戦しましょう。プロジェクトを新規作成して、次のようなForm1を作ってください。
今回は、3次元ベクタを使いビルドして実行ボタンを押すと、
と表示させるプログラムを考えてください。
a[4][3][5]タイプのの3次元ベクタを宣言するには、
vector< vector < vector <int> > > a(4);
for(i=0;i<4;i++)a[i].resize(3);
for(i=0;i<4;i++){
for(j=0;j<3;j++){
a[i][j].resize(5);
}
}
のようにします。
では皆さん、大変難問だと思いますが、11話、12話を参考にして考えてみてください。
第11講第6話へ 第12講第1話へ 第13講第5話へ 第13講第7話へ
vc++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ