2つの座標を入力してその座標間の距離を求めて表示するプログラムを作成しています。
(座標を渡してその座標間距離を戻り値とする関数distanceを定義して利用することが条件です。)
以下のような手順でプログラムを書いていきたいのですが、どのようにしてプログラムを書いたらいいのかわかりません。
書き出しだけ作成してみたので、どのようにして書いていけば良いのか教えてください。
(1)x座標とy座標をメンバとする2次元座標を表す構造体pointを定義する。さらにtypedefを使って名前をPointとして再定義する。
(2)2つの座標を入力してその座標間の距離を表示するプログラムを作成する。(座標(x1,y1)と(x2,y2)の2点間の距離は、(x2-x1)^2 + (y2-y1)^2の平方根)
(3)距離を求める処理を関数double distance(Point a, Point b)として定義する。
#include<stdio.h>
#include<math.h>
//座標を表す構造体
struct point {
};
typedef struct point Point;
double distance(Point a, Point b)
{
return;
}
int main(void)
{
Point p1, p2;
printf("== 2次元直交座標系における2点間の距離 ==\n");
//座標の入力
printf("座標1 (x,y)>"); scanf("%d", &p1);
printf("座標2 (x,y)>"); scanf("%d", &p2);
printf("2点間の距離: %f\n", distance());
return 0;
}
構造体<2次元直交座標系における2点間の距離>
-
- 記事: 48
- 登録日時: 8年前
Re: 構造体<2次元直交座標系における2点間の距離>
ルートを求めるにはc言語では、sqrt()という関数を使います。
あとは、三平方の定理で求まります。
√(X*X+Y*Y)です。
とここで、Xとは2点間のX座標の差分、Yとは2点間のY座標の差分を指します。
あとは、三平方の定理で求まります。
√(X*X+Y*Y)です。
とここで、Xとは2点間のX座標の差分、Yとは2点間のY座標の差分を指します。
- 添付ファイル
-
- ピタゴラス(三平方の定理).png (2.43 KiB) 閲覧数: 6043 回
- purin52002
- 記事: 235
- 登録日時: 8年前
- 連絡を取る:
Re: 構造体<2次元直交座標系における2点間の距離>
こんにちは
(1)
struct point 内にx座標とy座標を表すメンバ変数を定義する必要があります。
構造体のメンバ変数を定義するには、 のようにします。
(2)
与えられた公式通りに式を打ち込みます。
ここで「math.h」というヘッダファイルをインクルードしておけば、べき乗を計算するpow関数や平方根を計算するsqrt関数が使えます。
(3)
(2)で計算した値をreturnします。 質問者さんがC言語をどこまで理解しているか(Hello worldしか書けません!とか構造体はばっちりです!とか)を書いてもらえると
答える側も答えやすくなるかもしれません^^
(1)
struct point 内にx座標とy座標を表すメンバ変数を定義する必要があります。
構造体のメンバ変数を定義するには、 のようにします。
(2)
与えられた公式通りに式を打ち込みます。
ここで「math.h」というヘッダファイルをインクルードしておけば、べき乗を計算するpow関数や平方根を計算するsqrt関数が使えます。
(3)
(2)で計算した値をreturnします。 質問者さんがC言語をどこまで理解しているか(Hello worldしか書けません!とか構造体はばっちりです!とか)を書いてもらえると
答える側も答えやすくなるかもしれません^^
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
Re: 構造体<2次元直交座標系における2点間の距離>
ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
他の部分は他の回答者さんが書いてくれているような感じで、
scanfで読み込めるのは、intやdoubleなどの基本的なデータのみなので、座標の各要素を1個ずつ読み込ませなければいけません。
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
他の部分は他の回答者さんが書いてくれているような感じで、
これはよくないですね。riko さんが書きました: //座標の入力
printf("座標1 (x,y)>"); scanf("%d", &p1);
printf("座標2 (x,y)>"); scanf("%d", &p2);
scanfで読み込めるのは、intやdoubleなどの基本的なデータのみなので、座標の各要素を1個ずつ読み込ませなければいけません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
- 記事: 48
- 登録日時: 8年前
Re: 構造体<2次元直交座標系における2点間の距離>
」//座標の入力
printf("座標1 (x,y)>"); scanf("%d", &p1);
printf("座標2 (x,y)>"); scanf("%d", &p2);
printf("2点間の距離: %f\n", distance());
これでは、2次元直交座標はX座標とY座標で構成されているのに対し、
scanf関数で謎の構造体のアドレスを引数として渡しています。
なので、typedefの使い方と構造体(struct)の宣言の仕方をネットで検索し調べた上で、
ここでは素直に、X座標とY座標を
printf("座標1(X,Y)>"); scanf("%d",&p1.x); scanf("%d",&p1.y);
以下、同様に座標2も取得すれば良いと思います。
Re: 構造体<2次元直交座標系における2点間の距離>
Windows10,VS2017Community,C 使用。scanf の 型に注意。
#include <stdio.h>
#include <math.h>
//座標を表す構造体
struct point {
double x;
double y;
};
typedef struct point Point;
double distance(Point a, Point b)
{
return sqrt((b.x - a.x)*(b.x - a.x) + (b.y - a.y) * (b.y - a.y));
}
int main(void)
{
Point p1, p2;
printf("== 2次元直交座標系における2点間の距離 ==\n");
//座標の入力
printf("座標1 p1.x="); scanf("%lf", &p1.x);
printf("座標1 p1.y="); scanf("%lf", &p1.y);
printf("座標2 p2.x="); scanf("%lf", &p2.x);
printf("座標2 p2.y="); scanf("%lf", &p2.y);
printf("2点間の距離: %f\n", distance(p1,p2));
return 0;
}