このプログラムの問題点を教えてください。
//数独
#include <iostream.h>
const int num_Max = 100; //一辺のマス最高値
void input_data( int a, int [num_Max][num_Max] ); //入力関数
void yoko_data( int a, const int [100][100], int & ); //判定
void tate_data( int a, const int [100][100], int & );
void block_data( int a, int b, const int [100][100], int & );
main()
{
int num; //一辺のマスの数
int m; //一ブロックの一辺にあるマスの数
int okey; //numが正常か判別
int dx, dy, dz;
int masu[num_Max][num_Max]; //全部のマス
cout << "\n埋められた数独が正しいかどうか判断するプログラムです。\n";
while(1){
cout << "横何マスありますか? (4-100)>>" ;
cin >> num ;
if( num > num_Max || num < 4){
cout <<"範囲外です。再入力して下さい。" ;
}else{
m = sqrt( num );
okey = num - m * m;
if(okey != 0)
cout << "その数字は数独として成り立ちません。再入力して下さい。";
}
}
//マスの入力
input_data( num, masu );
//横判定
yoko_data( num, masu, dx );
if(dx = 0){
//縦判定
tate_data( num, masu, dy );
if(dy = 0){
//マス判定
block_data( num, m, masu, dz );
}
}
if(dx == dy == dz == 0)
cout <<"\n大正解♪ おめでっとー。\n";
return 0;
}
//入力
void input_data( int kazu, const int matrix[num_Max][num_Max])
{
cout <<"\nマスの数字の入力を左上から順に、右へと行って下さい。";
for(int i = 0; i < kazu; i++){
for(int j = 0; j < kazu; j++){
cout << i+1 << "行目の" << j+1 << "列目 >>";
cin >> matrix[i][j] ;
}
}
}
//横列(行)を順に判定
void yoko_hantei( int kazu, int matrix[num_Max][num_Max])
{
int kaburi; //かぶっているか判定する用
int vx = 0; //かぶっていたと判定されたかどうかを見る用
for(int i = 0; i < kazu; i++){
//横一列取り出しました。
for(int j = 0; j < kazu; j++){
for( int k = 1; j+k < kazu; k++){
kaburi = matrix[i][j] - matrix[i][j+k];
if(kaburi == 0){ //かぶってたらループから抜け出す
vx++;
break;
}
}
}
}
if(vx > 0)
cout << "\n横列(行)検索時に不適切な部分を発見しました。\n";
return vx;
}
//縦列(列)を順に判定
void tate_hantei( int kazu, int matrix[num_Max][num_Max])
{
int kaburi; //かぶっているか判定する用
int vy = 0; //かぶっていたと判定されたかどうかを見る用
for(int j = 0; j < kazu; j++){
//縦一列取り出しました。
for(int i = 0; i < kazu; i++){
for( int k = 1; k < kazu-1; k++){
kaburi = matrix[i][j] - matrix[i+k][j];
if(kaburi == 0){ //かぶってたらループから抜け出す
vy++;
break;
}
}
}
}
if(vy > 0)
cout << "\n縦列(列)検索時に不適切な部分を発見しました。\n";
return vy;
}
//1ブロックごとに判定
void block_data( int kazu, int ruto, int matrix[num_Max][num_Max])
{
int hantei[num_Max][num_Max] ; //判定する部分を切り出す用
int kaburi;
int vz;
//まずブロックごとに切り出してみる
for(int i = 0; i < ruto-1; i++){
for(int j = 0; j < ruto-1; j++){
int h = 0; //何ブロック目か
int g = 0; //そのブロックの何個目か
(h-1)++;
for(int l = 0; l < ruto-1; l++){
for(int k = 0; k < ruto-1; k++){
hantei[h][g++] = matrix[i * m + k][j * m + l];
}
}
}
}
//かぶっているか判定する
for(int x = 0; x < kazu; x++){
for(int y = 0; y < kazu; y++){
for( int z = 1; z < kazu-1; z++){
kaburi = hantei[x][y] - matrix[x+z][y];
if(kaburi == 0){ //かぶってたらループから抜け出す
vz++;
break;
}
}
}
}
return vz;
}
C++で作成したものです。
コンパイルエラーが出てしまうのですが、原因を教えていただけませんか?
お礼
BlurFiltanさま わかりやすく解説してくださってありがとうございます! 参考リンクのテンプも本当にありがとうございます!! 読みながら勉強してみます。 BlurFiltanさまのほかの方への回答もとても丁寧でわかりやすいので いつも参考にさせていただいています。 ありがとうございました!