第15講 フリーストア配列
第6話 2次元フリーストア配列を関数に送るその4
第5話問題解答例
#include<iostream>
#include<vector>
using namespace std;
void f(int** m);
void h(int** m);
void g(int** m);
void main(){
int** m=new int*[6];
for(int i=0;i<6;i++)m[i]=new int[6];
cout<<"自然配列"<<endl;
f(m); //自然配列作成
h(m); //自然配列表示
g(m); //データ交換
cout<<endl<<"6次魔方陣"<<endl;
h(m); //6次魔方陣表示
cout<<endl;
delete[] m;
cout<<"プロジェクト終了";
}
void f(int** m){
for(int i=0;i<6;i++){
for(int j=0;j<6;j++){
m[i][j]=6*i+j+1;
}
}
}
void h(int** m){
int i,j,w;
w=0;
for(i=0;i<6;i++){
w=w+m[5-i][i];
}
cout<<" "<<w<<endl;
for(i=0;i<6;i++){
for(j=0;j<6;j++){
if(j==0)cout<<" ";
if(m[i][j]<10)cout<<"0"<<m[i][j]<<"
"; else cout<<m[i][j]<<" ";
}
cout<<" ";
w=0;
for(j=0;j<6;j++)w=w+m[i][j];
if(w<100)cout<<" "<<w<<endl; else cout<<w<<endl;
}
w=0;
for(i=0;i<6;i++){
w=w+m[i][i];
}
cout<<" "<<w<<endl;
for(i=0;i<6;i++){
w=0;
for(j=0;j<6;j++){
w=w+m[j][i];
}
if(w<100)cout<<" "<<w<<" ";
else cout<<w<<" ";
}
cout<<endl;
}
void g(int** m){
int w;
for(int i=0;i<3;i++){ //対角線交換
for(int j=0;j<6;j++){
if(i==j || 5-j==i){
w=m[5-i][5-j];
m[5-i][5-j]=m[i][j];
m[i][j]=w;
}
}
}
for(int i=0;i<3;i++){ //左右交換
w=m[(1+i)%3][i];
m[(1+i)%3][i]=m[(1+i)%3][5-i];
m[(1+i)%3][5-i]=w;
}
for(int i=0;i<3;i++){ //上下交換
w=m[(2+i)%3][i];
m[(2+i)%3][i]=m[5-(2+i)%3][i];
m[5-(2+i)%3][i]=w;
}
}
ダウンロード用添付ファイル
さらに、
『第9講 関数の再帰的使用 第10話 関数の再帰的使用による汎用的魔方陣自動生成ソフト非グローバル版小改良』
参考ファイル
をポインタではなく、フリーストア配列に変更してみましょう。
第5話へ 第7話へ
eclipse c++ 入門講義第1部へ
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ