演習 12-5

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

#define sqr(n) ((n) * (n))

typedef struct{
    double x;
    double y;
} Point;

typedef struct{
    Point pt;
    double fuel;
} Car;

double distance_of(Point pa, Point pb){
    return sqrt(sqr(pa.x - pb.x) + sqr(pa.y - pb.y));
}

void put_info(Car c){
    printf("現在位置 : (%.2f, %.2f)\n", c.pt.x, c.pt.y);
    printf("残り燃料 : %.2fリットル\n", c.fuel);
}

int move(Car *c, Point dest){
    double d = distance_of(c->pt, dest);
    if(d > c->fuel) return 0;
    c->pt = dest;
    c->fuel -= d;
    return 1;
}

int main(){

    Car mycar = {{0.0, 0.0}, 90.0};

    while(true){
        int select;
        Point dest;
        put_info(mycar);
        printf("移動しますか? yes:1/no:0 -> ");   scanf("%d", &select);
        if(select != 1) break;
        printf("目的地を入力:1 / 移動距離を入力:2 -> "); scanf("%d", &select);
        if(select == 1){
            printf("目的地のx座標 : ");   scanf("%lf", &dest.x);
            printf("目的地のy座標 : ");   scanf("%lf", &dest.y);
            if(!move(&mycar, dest)) printf("移動できません\n");
        }else if(select == 2){
            printf("x方向の移動距離 : ");   scanf("%lf", &dest.x);
            printf("y方向の移動距離 : ");   scanf("%lf", &dest.y);
            dest.x += mycar.pt.x;
            dest.y += mycar.pt.y;
            if(!move(&mycar, dest)) printf("移動できません\n");                       
        }
    }

    return 0;
}

0 件のコメント:

コメントを投稿