61939


２点間の距離を求めたいので、以下のようにプログラムしました。  
（実行例も貼り付けておきます。）

[code]

    #include <stdio.h>
    #include <math.h>
    
    #define sqr(n) ((n)*(n))
    
    struct point{
        double X;
        double Y;
    };
    
    struct point input_point(void)
    {
        struct point t;
    
        printf("X座標: ");
        scanf("%lf", &t.X);
        printf("Y座標: ");
        scanf("%lf", &t.Y);
    
        return t;
    }
    
    void  print_point(struct point t)
    {
        printf("(%0.2f)\n",t.X+t.Y);
    }
    
    struct point add_point(struct point a,struct point b)
    {
        struct point t;
        t.X+t.Y=sqrt(sqr(a.X-b.X)+sqr(a.Y-b.Y));
        return t;
    }
    
    int main(void)
    {
        struct point a, b, m;
    
        printf("座標 A\n");
        a = input_point();
        printf("座標 B\n");
        b = input_point();
    
        m=add_point(a,b);
    
        printf("座標 AB間の距離: ");
        print_point(m);
    
        return 0;
    }
    
[/code]

[code]

    実行例：
    $ ./a.out
    Aの座標を入力:
    X座標: 1
    Y座標: 1
    Bの座標を入力:
    X座標: 0
    Y座標: 0
    線分ABの長さ: 1.41
    
[/code]

ですが、エラーが以下のように出てきてしまいました。

[code]

    $ cc ex1104.c -lm
    ex1104.c: In function ‘add_point’:
    ex1104.c:36:12: error: lvalue required as left operand of assignment
         t.X+t.Y=sqrt(sqr(a.X-b.X)+sqr(a.Y-b.Y));
                ^
    
[/code]

このエラーから、add_point の部分がおかしいことはわかったのですが、どこがおかしいのかがわかりません。


CC BY-SA 4.0
2020-01-02T11:58:49.323
61937
2020-01-02T13:32:22.730
2020-01-02T12:32:24.900
3060
36412
question
c
2点間の距離を求めるプログラム


エラーそのものは、`t.X+t.Y`という足し算の結果に`sqrt(sqr(a.X-b.X)+sqr(a.Y-b.Y))`という値を代入しようとしているので、そんなことはできないと言っています。

しかし、そもそもの原因は、2点間の距離はスカラー値、つまり実数が一つの値なのに、座標値として返そうとしていることにあります。距離の型は`double`であるべきです。

関数`add_point()`は

[code]

    double add_point(struct point a,struct point b)
    {
        return sqrt(sqr(a.X-b.X)+sqr(a.Y-b.Y));
    }
    
[/code]

とし、`main()`は

[code]

    int main(void)
    {
        struct point a, b;
        double m;
    
        printf("座標 A\n");
        a = input_point();
        printf("座標 B\n");
        b = input_point();
    
        m=add_point(a,b);
    
        printf("座標 AB間の距離: %f\n", m);
    
        return 0;
    }
    
[/code]

とすれば、距離が求められます。


CC BY-SA 4.0
2020-01-02T13:32:22.730
61939
2020-01-02T13:32:22.730
3605
61937
answer