• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:座標値を読み込んである領域に含まれているかどうかを示すプログラム)

座標値を読み込んで領域に含まれているかどうかを判定するプログラム

yama5140の回答

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.1

(こんな方法もある、ということで・・)   《方法》  ・X,Yともに境界値が4つある。  ・これをひとつずつ判定し、条件に合ったらフラグたてる。        Yで使用 Xで使用   8ビット 0000 0000   「領域」 2211 2211        ABCD EFGH 《結果》 領域1:xx11 xx11 0x33(16進) 領域2:11xx 11xx 0xCC(16進) 領域3:1111 1111 (おまけ◆) ---------------------------------------------- #include <stdio.h> void main() {  float x, y; // 型注意  unsigned char cFlg = 0x00;  int iKekka = 0;  scanf( "%f%f", &x, &y );  if( x >= 7.0 ) cFlg |= 0x01; // H  if( x <= 21.2 ) cFlg |= 0x02; // G  if( x >= -12.4 ) cFlg |= 0x04; // F  if( x <= 10.0 ) cFlg |= 0x08; // E  if( y >= -1.5 ) cFlg |= 0x10; // D  if( y <= 13.8 ) cFlg |= 0x20; // C  if( y >= -14.0 ) cFlg |= 0x40; // B  if( y <= 0.0 ) cFlg |= 0x80; // Aおまけ( 7.5, -1.0 )◆ // if( y <= -7.7 ) cFlg |= 0x80; // A  if( 0x33 == ( cFlg & 0x33 ) ) iKekka += 1;  if( 0xCC == ( cFlg & 0xCC ) ) iKekka += 2;  printf( "(%4.1f,%4.1f)は、%d 領域です[%02X]。\n", x, y, iKekka, cFlg ); } 注:インデントに全角空白を用いています。タブに一括変換して下さい。

noname#90946
質問者

お礼

アドバイスありがとうございます! ただ、C言語始めたばっかりの者で、私の理解を超えます…^^; でも、さっぱり、というわけでもないので、参考にさせていただきます。 ありがとうございました^^

関連するQ&A

  • 極座標から直交座標に変換

    極座標を直交座標に変換するプログラムです。 ptor関数を使って作成するのですが、上手く実行できません。 度からradに変換の仕方も良く分かりません。 どこが間違っているのか教えてください。 #include <stdio.h> #include <math.h> #define PI 3.14159265358979323846 struct rect{ double x; double y; }; struct pole{ double r; double theta; }; double po2(double *x, double *y, double r, double theta ) { double rad; rad = theta ; x = r * cos(rad); y = r * sin(rad); } int main(void) { double x, y; double r, theta; printf("r = "); scanf("%lf",&r); printf("theta = "); scanf("%lf",&theta); printf("(r:%f, theta:%f) => (x:%f, y:%f)\n", r, theta, x, y); return(0); }

  • 座標をランダムに表示させてx座標順にソートするプログラムを考えています

    座標をランダムに表示させてx座標順にソートするプログラムを考えています とりあえず、以下の様に決まった数の座標でソートすることはできたのですが、ランダムにするとなるとどうすればいいのかわかりません。 ------------------------------------------------- #include <stdio.h> int makepoints(int * pn, double * x, double * y){ double xp,yp; int k; int i,j; int n; n = 7; *pn = n; xp = 1; for(k=0;k<n;k++) { xp = xp/2; yp = xp*xp; x[k] = xp; y[k] = yp; } printf("初期座標列:\n"); for(k=0;k<n;k++) { printf("%f_%f\n",x[k],y[k]); } for(j=1;j<n;j++) { for(i=0;i<j;i++) { if(x[i]>x[j]){ xp=x[i];x[i]=x[j];x[j]=xp; yp=y[i];y[i]=y[j];y[j]=yp; } } } printf("整列後の座標列:\n"); for(k=0;k<n;k++) { printf("%d %f %f\n",k ,x[k],y[k]); } return 0; } ------------------------------------------------- なんとなくrand関数を使えばいいのかな、というのはわかるのですが、プログラミングに弱く困っています。 この後のプログラミング教えてくださる方いればよろしくお願いします。

  • プログラム問題

    質問】 2つの実数xとyを入力し、xとyの値とx,yが格納されている領域のアドレスを表示するプログラムを作成します。 【プログラム作成例】 数 x と y を入力しなさい=> 2 3 数 x = 2.000000 x のアドレス = #0044 数 y = 3.000000 y のアドレス = #0048 上記の解答は下記の通りなのですが、下記以外の解答方法を教えてはいただけないでしょうか? C言語に詳しい方よろしくお願いいたします。 #include <stdio.h> void main(void) { float x, y; printf("数 x と y を入力しなさい=> "); scanf("%f %f", &x, &y); printf("数 x = %f x のアドレス = %p\n", x, &x); printf("数 y = %f y のアドレス = %p\n", y, &y); }

  • ヘロンの公式を作ったプルグラムなのですが、プログラムの間違いを教えてください。

    プログラムの間違いを教えてください ヘロンの公式を作ったプログラムなんですが・・・ #include <stdio.h> #include <math.h> void main(void) { float a,b,c,s,x; printf("三角形の三辺の長さを入れてください\n"); printf("a="); scanf("%f",&a); printf("b="); scanf("%f",&b); printf("c="); scanf("%f",&c); s=(a+b+c)/2; x= sqrt(s*(s-a)*(s-b)*(s-c)); printf("\n%f",x); }

  • プログラムの練習問題をやっていたのですが、練習問題の答えのような実行結

    プログラムの練習問題をやっていたのですが、練習問題の答えのような実行結果にならないので教えていただけませんか? 下記に記したプログラムを実行すると x=9 y=-9 [ 9]*[-9]=[ -81],[ 9]*[-8]=[ -72],[ 9]*[-7]=[ -63],・・・・ ・・・・ [10]*[-9]=[ -90],[10]*[-8]=[-80],・・・・ ・・・・ のようになるのですが、 x=9 y=-9 [ 9]*[-9]=[ -81],[10]*[-9]=[-90],・・・ [ 9]*[-8]=[ -72],[10]*[-8]=[-80],・・・ [ 9]*[-7]=[ -63],・・・ ・・・・ のようにするためにはどうすればいいですか? #include <stdio.h> int main(void) { int x,y,m,n; printf("x="); scanf("%d",&x); printf("y="); scanf("%d",&y); for(m=x;m<=x+3;m++) { printf("\n"); for(n=y;n<=y+14;n++) { printf("[%2d]*[%2d]=[%4d],",m,n,m*n); } printf("\n"); } return(0); }

  • c プログラム 

    以下のプログラムは,第n項までのe^xのマクローリン展開をさせるものです. これを修正して,理論値と近似値の誤差がある値(自分で入力)になったときに,計算を終了させるにはどうしたらよいでしょうか.御教授いただければ幸甚 です. ---------------------------------------- #include <stdio.h> #include <math.h> int main(void) { int n; double x=1.0,y=1.0,e=1.0,err; int i; double f=1.0,p=1.0; printf("x="); scanf("%lf",&x); printf("n="); scanf("%d",&n); printf("Mclaurin展開によるn項までのexp(x)の\n n 理論値 近似値 誤差\n"); for(i=1;i<=n;i++){ f*=(double)i; p*=x; y+=p/f;近似値 e=exp(x);理論値 err=e-y;誤差 printf("%2d %12.8e %12.8e %12.8e\n",i,e,y,err); } return 0; }

  • C言語 座標軸の設定

    こんにちわ。私は最近プログラミングを学び始めた女学生です。 環境はVisual Studio 2008で、C++を使っています。 今回、課題として座標軸を-と|でつくり、その上にxの3乗-9xのグラフをあらわすというものが出ました。 おおよそわかったのですが、なぜかx軸を形成する軸(-)がこのプログラムだとひとつおきに表示されてしまい、軸として成立しません。なぜなのでしょうか。熟練者の方々、ご指導ご鞭撻のほど、よろしくお願いいたします。 #include<stdio.h> main(void){ int a[40][60],x,y; for(x=0;x<40;x++){ for(y=0;y<60;y++){ a[x][y]=0; if (x==20){ printf ("-");} else if (y==30) { printf ("|"); } if(y==(x-20)*(x-20)*(x-20)-9*(x-20)+30){ printf("*"); } else {printf(" "); } } printf("\n"); } }

  • for文を使ったプログラムで困っています

    for文を使って、10000からある数xを何回引けるか?またその残りを求めるプログラム(例:10000から3000は3回引くことができ、残りは1000である。)を作りたいのですが、引く回数が1多くなってしまいます。どこがいけないかわからないので困っています。よろしくおねがいします。 #include<stdio.h> void main() { int x; int Sa = 10000; int y; printf("10000以下の数を入力してください:"); scanf("%d",&x); for(y = 1; y*x <= 10000 ; y++) { Sa = Sa - x; } printf("10000から%d回引くことができます。\n",y); printf("残りは%dです。",Sa); }

  • 結果の表示

    よろしくお願いします。 プログラミングの勉強をしています。 座標上にx1、x2、y1、y2をとり、この2点間の距離が表示されるプログラムを作っています。 最終的には自分で座標を入力し、以下のように表示されることが目標です。 x1:0 y1:0 x2:1 y2:1 この2点間の距離は1.414214です。 次のように作ってみましたが、1.414・・・となるところが、0.0000・・・となってしまいます。どこを直したらよいでしょうか、お願いいたします。 #include <stdio.h> #include <math.h> main() { int x1 = 0, y1 = 0, x2 = 0, y2 = 0; double A = 0.0, dx = 0.0, dy = 0.0; A = sqrt(dx * dx + dy * dy); dx = x1-x2; dy = y1-y2; printf("x1:"); scanf("%d",&x1); printf("y1:"); scanf("%d",&y1); printf("x2:"); scanf("%d",&x2); printf("y2:"); scanf("%d",&y2); printf("この2点間の距離は%lfです\n", A); }

  • 3つの整数が等しいかどうか調べるプログラム

    3つの整数が等しいかどうか調べるプログラムがよくわからないので、どなたか教えていただけないでしょうか?ちなみに、わからないながらに作ってみました。 #include <stdio.h> int main(void) { int x, y, z; puts("3つの整数を入力してください。"); printf("整数1:"); scanf("%d",&x); printf("整数2:"); scanf("%d",&y); printf("整数3:"); scanf("%d",&z); if (x==y==z) puts("3つの整数の値は同じです。"); else puts("3つの整数の値は違います。"); return (0); }