2012-03-22 9 views
0

ファイルからいくつかの座標を読み込み、それらを3x3グリッドにダイビングしてセルの値(0-2)を割り当てようとしています。コードによっては、x = 268やx = 269のような負のセル値を割り当てる値もあります。どこが間違っていますか?セルを3x3グリッドの座標に割り当てます。

76 62 
77 62 
78 62 
79 62 
81 62 
83 62 
86 62 
etc 

細胞割り当てるためのコード::あなたは最大値と最小値を見つけることを試みるところ

int x_points[99]; 
int y_points[99]; 
int i=0; 
int x,y; 
int max_x, max_y; 
int min_x, min_y; 

while(out.good()) 
{ 
    out>>x; 
    out>>y; 

     if(i==0) 
{ 
    max_x=x; 
    min_x=x; 
    min_y=y; 
    max_y=y; 
} 
else if (x>max_x) 
{ 
    max_x=x; 
} 
else 
if(x < min_x) 
{ 
    min_x=x; 
} 
else if (y>max_y) 
{ 
    max_y=y; 
} 
else 
if(y < min_y) 
{ 
    min_y=y; 
} 
x_points[i]=x; 
y_points[i]=y; 
i++; 
} 


for(i=0; i<99; i++) 
cout<<x_points[i]<<","<<y_points[i]<<"\n"; 

int cells_x[99]; 
int cells_y[99]; 

float x_width; 
float y_width; 
int divide = 3; 

//To find out the cells. Divide it by 20 

x_width=(max_x-min_x)/divide; 
y_width=(max_y-min_y)/divide; 

cout<<"\nx_width:"<<x_width; 
cout<<"y_width:"<<y_width<<"\n"; 

int x1; 
int y1; 
for(i=0; i<99; i++) 
{ 
x1=x_points[i]-min_x; 
y1=y_points[i]-min_y; 

    for(int j=0; j<divide; j++) 
    { 
     if(j*x_width<=x1 && x1<((j+1)*x_width)) 
      cells_x[i]=j; 

     if(j*y_width<=y1 && y1<((j+1)*y_width)) 
      cells_y[i]=j; 
    } 
    cout<<cells_x[i]<<" "<<i<<" "<<cells_y[i]<<"\n"; 

} 
+0

コードが正しくデバッグされ、正しくフォーマットされていれば間違いを見つけやすくなります。 –

+0

私はどのようにstackoverflowでそれをフォーマットするのか分かりません。しかし私のformatingをさらに改善しようとしています。 – codious

答えて

1

私が見る最初の問題があると私は次のようにoutput.txtとファイルを持っている

xとyの値を比較すると、xが新しい最大値または最小値のときにy値の分析が行われなくなります。 max_yとmin_yに実際にmaxとminが含まれていないので、プログラムの残りの部分で問題が発生します。 max_x = 8、およびmin_x = 0、あなたのコードがx_width = 8/3、または約2.6666666666666666666666666666667につながる

x_width=(max_x-min_x)/divide; // should be x_width=(max_x-min_x + 1)/divide; 
y_width=(max_y-min_y)/divide; //   y_width=(max_y-min_y + 1)/divide; 

場合:

次はx_widthとy_widthを計算しています。しかし、0-8は3の3つのグループに分割することができます.1を加えると、ラインの長さではなくポイントの数を計算してこれを修正します。

また、max_x == min_xの場合に発生する幅が0にならないようにします。次のセクションで0原因のトラブルの幅:

for(int j=0; j<divide; j++) 
{ 
    /* an x_width of 0 will cause this to never evaluate to true */ 
    /* x1 cannot ever be >= to 0 AND < 0 */ 
    if(j*x_width<=x1 && x1<((j+1)*x_width)) 
     cells_x[i]=j; 

    if(j*y_width<=y1 && y1<((j+1)*y_width)) 
     cells_y[i]=j; 
} 

x_widthがゼロの場合は、その後、あなたはそれはまだ可能性があり、その初期値に設定されます。つまり、[I]をcells_xに値を代入することはありません負の数です。

+0

申し訳ありませんが、デバッガを実行すると、それぞれの値が含まれています。 – codious

+0

あなたが見る実際の出力を添付できますか? –

+0

私はコードを修正しましたが、xwidth = 0は考慮しませんでした。それに百万円ありがとう。これは今すぐ動作するはずです。 – codious

関連する問題