第11講 配列・ポインタを関数に渡す  
第4話 2次元配列を関数に渡すさまざまな演習その2
C
解答例
#include<iostream>
using namespace std;
void f(int **a);
void g(int **a);
void h(int **a);
int main(){
   int **a,i,j;
   a=(int **)malloc(20);
   for(i=0;i<6;i++)a[i]=(int *)malloc(20);
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       a[i][j]=5*i+j+1;
     }
   }
   cout<<"変換前"<<endl;
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       if(a[i][j]<10)cout<<" "<<a[i][j]<<" ";
       if(a[i][j]>=10)cout<<a[i][j]<<" ";
   }
   cout<<endl;
   }
   f(a);
   cout<<endl;
   cout<<"変換後"<<endl;
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       if(a[i][j]<10)cout<<" "<<a[i][j]<<" ";
       if(a[i][j]>=10)cout<<a[i][j]<<" ";
     }
     cout<<endl;
   }
   h(a);
   cout<<endl; 
   cout<<"左右対称変換後"<<endl;
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       if(a[i][j]<10)cout<<" "<<a[i][j]<<" ";
       if(a[i][j]>=10)cout<<a[i][j]<<" ";
     }
     cout<<endl;
   }
}
void f(int **a){
   int i,j;
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       a[i][j]=2*a[i][j];
     }
   }
}
void g(int **a){
   int i,j;
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       a[i][j]=a[j][i];
     }
   }
}
void h(int **a){
   int i,j,b[5][5];
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       b[i][j]=a[i][j];
     }
   }
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       a[i][j]=b[i][4-j];
     }
   }
}
さらに、上下対称変換を加えて
入門
となるようにしましょう。解答例は30行下。




















解答例
#include<iostream>
using namespace std;
void f(int **a);
void g(int **a);
void h(int **a);
void k(int **a);
int main(){
   int **a,i,j;
   a=(int **)malloc(20);
   for(i=0;i<6;i++)a[i]=(int *)malloc(20);
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       a[i][j]=5*i+j+1;
     }
   }
   cout<<"変換前"<<endl;
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       if(a[i][j]<10)cout<<" "<<a[i][j]<<" ";
       if(a[i][j]>=10)cout<<a[i][j]<<" ";
   }
   cout<<endl;
   }
   f(a);
   cout<<endl;
   cout<<"変換後"<<endl;
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       if(a[i][j]<10)cout<<" "<<a[i][j]<<" ";
       if(a[i][j]>=10)cout<<a[i][j]<<" ";
     }
     cout<<endl;
   }
   h(a);
   cout<<endl; 
   cout<<"左右対称変換後"<<endl;
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       if(a[i][j]<10)cout<<" "<<a[i][j]<<" ";
       if(a[i][j]>=10)cout<<a[i][j]<<" ";
     }
     cout<<endl;
   }
   k(a);
   cout<<endl;
   cout<<"上下対称変換後"<<endl;
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       if(a[i][j]<10)cout<<" "<<a[i][j]<<" ";
       if(a[i][j]>=10)cout<<a[i][j]<<" ";
     }
     cout<<endl;
   }
}
void f(int **a){
   int i,j;
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       a[i][j]=2*a[i][j];
     }
   }
}
void g(int **a){
   int i,j;
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       a[i][j]=a[j][i];
     }
   }
}
void h(int **a){
   int i,j,b[5][5];
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       b[i][j]=a[i][j];
     }
   }
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       a[i][j]=b[i][4-j];
     }
   }
}
void k(int **a){
   int i,j,b[5][5];
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       b[i][j]=a[i][j];
     }
   }
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
       a[i][j]=b[4-i][j];
     }
   }
}


さて、そろそろプロジェクトを新しく作り、
3次元配列を関数fに送り、fの機能を2倍加として
mainで変換前と変換後を表示させましょう。
C

第3話へ 第5話へ

戻る

C言語講義第1部へ
VB講義へ
VB講義基礎へ

vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)