こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

このプログラムの問題点を教えてください。

//数独

#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++で作成したものです。
コンパイルエラーが出てしまうのですが、原因を教えていただけませんか?

投稿日時 - 2007-02-26 23:20:42

QNo.2786951

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

コンパイルエラーが出る原因はプログラムが間違っているからなんだけど, 普通はエラーメッセージを見ればわかるんじゃないかなぁ.
ちなみに, どんなエラーメッセージが出てます?

投稿日時 - 2007-02-27 00:09:42

ANo.1

>コンパイルエラーが出てしまうのですが、原因を教えていただけませんか?

きちんと設計せずにコードを書かれているからだと思います。

投稿日時 - 2007-02-26 23:48:15

お礼

課題で作ったものなので、コーディング前提作業は適当に
なっています。
それが原因といえば原因なんでしょうけど、そういうところは
目をつぶって、具体的にエラーコードと修正方法だけ明示して
いただけないものでしょうか。

車が走らないのは何故か聞きたいだけであって、設計が悪いから
燃費が悪いだのまっすぐ走らないだのっていうことが聞きたいのでは
ありません。

投稿日時 - 2007-02-26 23:53:06

あなたにオススメの質問