• ベストアンサー

C言語 配列で座標

C言語で二次元の配列a[11][11]を考えたとき、a[1][0]はxy座標の(1,0)を、a[0][5]はxy座標の(0, 5)を表しているという風な考えはあっているのでしょうか? また、C言語で、xy座標で(0.5, 3.1)などの小数を表そうとしたらどうしたら良いのでしょうか?

  • rkot
  • お礼率0% (0/20)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

もう少し数の小さい例で説明します。 以下のように配列を宣言したとします。 *************** //配列宣言 int a[3][4]; *************** この場合 int型の値を格納できる変数が3×4=12個 作られたと考えることができます。 配列の使い方は以下のようになります。 ********************* //配列の扱い方の例 a[0][0]=1; a[0][1]=234; a[0][2]=-123; a[0][3]=5; a[1][0]=a[0][2]; ・ ・ ・ ******************* つまり普通のint型の変数とそれぞれが同じ扱い方ができます。 どの様に使うかは様々です。 イメージとしては   [0][1][2][3] [0] □ □ □ □ [1] □ □ □ □ [2] □ □ □ □ このようなint型の値が格納できる箱が用意されるような感じです。 ここからは主観ですが 配列で座標を扱うといった概念はあまりないように思います。 たくさんの座標を扱うのであれば便利かもしれません。 少数の座標を表現する方法ですが **************** //double型で座標を表現 double x = 0.5; double y = 3.1; **************** のように扱うといいかもしれません。 構造体を知っているのであれば それで記述するとまとまって見やすいかもしれません。

その他の回答 (4)

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

(質問文を、「可能性として」読むと) >C言語で二次元の配列a[11][11]を考えたとき、a[1][0]はxy座標の(1,0)を、a[0][5]はxy座標の(0, 5)を表しているという風な考えはあっているのでしょうか?  たとえば、11 × 11 ピクセルの図を処理、というのであれば・・。  その座標に、色データを代入するとか・・(「考え」には、ここが欠落?)。 -------------------------------------------------- (質問文を、「そのまま?」読むと)  int a[11][11]; ここでの 11 は、「個数」です。  a[1][0] = 9; ここでの 0 や 1 は、配列の先頭からの「位置」(を示すもの)で、9 は「値」です。  配列は、小数で、配列の先頭からの「位置」を指定できません。 >C言語で、xy座標で( 0.5, 3.1 )などの 小数を表そう としたらどうしたら良いのでしょうか?  X = 0.5; という「値」ですよね。  Y = 3.1;  配列を使うなら、  #define XXX 0  #define YYY 1  double dZahyo[ 200 ][ 2 ];  dZahyo[ 0 ][ XXX ] = 0.5;  dZahyo[ 0 ][ YYY ] = 3.1; のような使い方をします。  No.4 さんが   >構造体を知っているのであれば >それで記述するとまとまって見やすいかもしれません。  としています(私も推奨)。   typedef struct{     double dX;     double dY;   }POINT;      POINT sWork[ 200 ];   200「個」の座標確保      sWork[ 199 ].dX = 0.5; 200番目(「位置」)に座標「値」代入   sWork[ 199 ].dY = 3.1;   のようになるかと・・。

回答No.3

> また、C言語で、xy座標で(0.5, 3.1)などの小数を表そうとしたらどうしたら良いのでしょうか? a[0.5][3.1]とは書けませんので、整数になるよう10倍してa[5][31]とするか、発想を変えてn番目の点をx[n]とy[n]の2変数で管理するなどの工夫が必要かと思います。

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

> a[0][5]はxy座標の(0, 5)を表しているという風な考え プログラムによります。 > xy座標で(0.5, 3.1)などの小数を表そうとしたら x座標の値とy座標の値をメンバーとする構造体を定義してみてはいかがでしょうか。

  • ryuudou
  • ベストアンサー率25% (24/94)
回答No.1

A[α][β]とすれば、α個の箱の一つ一つにβ個の箱がそれぞれ入っている、という考えの方が良いでしょうね。 二次元配列を平面座標のような図にしたければ、小学校で習った掛け算の九九表のイメージを持ってください。

関連するQ&A

  • C言語の配列のコピーについて

    C言語の配列のコピーについて int a[] = {1,2,3}; int b[3]; memcpy(b, a, sizeof(a)); は、分かるのですが、 int c[][3] = { {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12} }; int d[4][3]; memcpy(d, c, sizeof(c)); の使い方は正しいのでしょうか? 1次元配列の場合は連続するメモリ?なのでmemcpyでOKだと思うのですが 2次元以上の配列の場合は、メモリが連続しているか知らないので 不安に思いました。 実際、C言語でのメモリの取り方など詳しく書かれている本などありますか? よく初心者向け本にメモリは箱という大雑把なイメージで取り挙げられているのですが、突っ込んだ書籍等も探しています。 玄人の方、難しく(^^教えてください。

  • C言語で巨大配列を作るにはどうすれば良いのでしょうか?

    C言語で巨大配列を作るにはどうすれば良いのでしょうか? テストで作ってみた配列を用いたプログラムが動かなかったので(コンパイルは正常)、なんでだろうと思って調べてみると、巨大な配列はcalloc関数等を用いて作る必要があると知りました。 しかし正直解説サイトを見てもよく意味が分かりませんでした…。 例えばA[1000][1000][1000]の様な配列は、どの様に作ればいいのでしょうか? A[x][y][z]みたいに表現して、Aを変えて同じ様な配列を8個ほど作りたいです。 初心者なので勉強不足かも知れませんが、どうぞ宜しくお願い致します。

  • C言語です。

    C言語です。 2次元配列を用いて、2つの2行3列の行列 A=[ 1 2 3 4 5 6 ] B=[ 6 3 4 5 1 2 ] の和を表示するプログラムを教えてください。 コンパイル結果 7 5 7 9 6 8

  • vrmlとc言語について

    vrmlでの3次元データを読み込んでc言語で処理をするには どうしたらいいのでしょうか? あと、vrmlでの3次元物体の座標(x,y,z)をc言語で読み込んで 処理をすることは可能なのでしょうか?

  • C言語 行列 配列

    現在、C言語を勉強中です。 C言語で (10000*10000)の大きさの行列を扱いたいです。 double a[10000][10000]の配列ではメモリ不足となってしまいます。 このような場合はどのようにプログラムを組んでいったら良いのでしょうか?

  • 【C言語を教えてください!】2次元配列について

    【C言語を教えてください!】2次元配列について 2次元配列を用いて、コンソール画面(ターミナル)の中央付近に*を表示させるプログラムを作りたいのですがさっぱり分かりません。 画面の大きさは半角で横80 縦25です。 25は奇数ですので40×12に表示したいと思います。 2重ループでなら出来たのですが配列でのやり方がわかりません。 #include<stdio.h> main() { int i,j; for(i=0;i<25;i++){ for(j=0;j<80;j++){ if(i==12&j==39){ putchar('*'); }else{ putchar(' '); } } } return 0; } 回答お願いします!

  • C言語のプログラミング 配列について

    C言語の課題でわからないところがあって困ってます。ちなみに初心者です。 int i; //添え字 for(i=0;i<○;i+=16){ //○はデーター数 a[2*i]=b[i]; a[2*i+1]=b[i+1]; a[2*i+2]=b[i+2]; a[2*i+3]=b[i+3]; : a[2*i+15]=b[i+15]; a[2*i+16]=c[i]; a[2*i+17]=c[i+1]; a[2*i+18]=c[i+2]; a[2*i+19]=c[i+3]; : a[2*i+31]=b[i+15]; } という風な配列がありまして、これをすっきりまとめたいのですが どうもエラーか配列aにNULLばかりはいってしまって上手くいきません。 どうすればよいのか教えてください。よろしくお願いします。

  • C言語の2次元配列 容量が大きすぎる場合の対処方法

    私はC言語をもちいて2次元配列を作ろうとしています。 しかし、配列数が double c[10000][10000]; と大きいものにすると、エラーになってしまいます。 もちろん小さい double c[10][10]; のような配列では問題ありません。 malloc関数とかも調べたのですがなかなかいい文献が見つからずに 困っています。 どうかいいご意見があればよろしくお願いします。

  • ビットマップ画像の座標を小数で扱う方法について。

    ビットマップ画像の座標を小数で扱う方法について。 プログラムでビットマップ画像を扱っています。 現在、ビットマップ画像のRGBの値を2次元配列に格納しています。 そのため、例えば画像の白い部分の座標がどこかを知りたいときは、2次元配列の場所を辿り、整数値として座標を得ています。 これを整数値ではなく、少数値で扱うことは可能でしょうか? 配列で扱う以外に方法が思いつかないです;; よろしくお願いします。

  • C言語の配列番号が"0"から始まる理由

    C言語の配列番号は"0"から始まりますが "1"からではなく"0"から始める理由を教えてください。 例えば char a[5]; と宣言した場合 配列a[]は a[1], a[2], ・・・, a[5] ではなく、 a[0], a[1], ・・・, a[4] である理由を教えてください。

専門家に質問してみよう