ページ 11

2次元平面上の2点間を計算する関数について

Posted: 2017年5月24日(水) 22:24
by Makoto
2次元平面上の2点間の距離を計算する関数distanceを作成したいのですが分かりません。ご教授お願いします。
double distance(double *p1, double *p2);
/* 点p1とp2との距離を計算して返却する */
各点の座標は,要素数2の1次元配列を用いて,要素番号0にx座標,要素番号1にy座標を格納すること.
実行例
点p1の入力
1 2
点p2の入力
2 3
2点間の距離は1.414214

#include <stdio.h>
#include <math.h>

double distance(double *, double *);

int main(void)
{
double p1[2], p2[2], d;

printf("点p1の入力¥n");
scanf( ・・・ );
printf("点p2の入力¥n");
scanf( ・・・ );

d = distance( ・・・ );
printf("2点間の距離は%f¥n", d);

return 0;
}

コード:

#include <stdio.h>
#include <math.h>

double distance(double *, double *);

int main(void)
{
    double p1[2], p2[2], d;

    printf("点p1の入力\n");
    scanf("%lf %lf", &p1[0], &p1[1]);
    printf("点p2の入力\n");
    scanf("%lf %lf", &p2[0], &p2[1]);

    d=distance(p1,p2);
    printf("2点間の距離は%f\n", d);

    return 0;
}

double distance(double *p1, double *p2)
{
    double n, i, j, d;
    n=double pow((p2[0]-p1[0]),2);
    i=double pow((p2[1]-p1[1]),2);
    j=n+i;
    d=double sqrt(j);
    
    return d;
}

Re: 2次元平面上の2点間を計算する関数について

Posted: 2017年5月24日(水) 22:48
by みけCAT
何がわからないのかよくわかりませんが、powやsqrtの前に入っている余計なdoubleを消せばコンパイルが通ってそれっぽい結果が出ました。
オフトピック
逆に、どうしてn+iの前には余計なdoubleをつけていないのでしょうか?関数呼び出しじゃないからかな?

Re: 2次元平面上の2点間を計算する関数について

Posted: 2017年5月24日(水) 23:54
by box

コード:

// double型にnとかiとかjとかいう変数名を付けているのが何となく違和感があったので、
// 思い切ってそういう変数を使わないようにしてみた

#include <stdio.h>
#include <math.h>

double distance(double *p1, double *p2);

int main(void)
{
    double p1[2], p2[2];

    printf("点p1の入力\n");
    scanf("%lf %lf", &p1[0], &p1[1]);
    printf("点p2の入力\n");
    scanf("%lf %lf", &p2[0], &p2[1]);
    printf("2点間の距離は%f\n", distance(p1, p2));
    return 0;
}

double distance(double *p1, double *p2)
{
    return sqrt(pow(p2[0] - p1[0], 2) + pow(p2[1] - p1[1], 2));
}