ID非公開
ID非公開さん
2021/1/23 10:21
1回答
c言語で、自動車の移動のプログラムを作っています。ある特定の座標で、プログラムを終了するように設定したい(chack関数)のですが、書き方が分からないので教えて頂きたいです…
c言語で、自動車の移動のプログラムを作っています。ある特定の座標で、プログラムを終了するように設定したい(chack関数)のですが、書き方が分からないので教えて頂きたいです… #include <math.h> #include <stdio.h> #include <stdlib.h> #define sqr(n) ((n) * (n)) /*=== 点の座標を表す構造体 ===*/ typedef struct { double x; /* X座標 */ double y; /* Y座標 */ } Point; /*=== 自動車を表す構造体 ===*/ typedef struct { Point pt; /* 現在位置 */ double fuel; /* 残り燃料 */ } Car; /*--- 点paと点pbの距離を返す---*/ 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); } /*--- cの指す車を目的座標destに移動 ---*/ int move(Car *c, Point dest) { double d = distance_of(c->pt, dest); /* 移動距離 */ if (d > c->fuel) /* 移動距離が燃料を超過 */ return 0; /* 移動不可 */ c->pt = dest; /* 現在位置を更新(destに移動) */ c->fuel -= d; /* 燃料を更新(移動距離dの分だけ減る) */ return 1; /* 移動成功 */ } void check(Car *c, Point target){ double d = sqrt(sqr(?) + sqr(?)); printf("目的地までの距離:%.2f",d); if(d<1.0){ printf("目的地に到着しました!\n"); printf("目的地の位置は(%.2f,%.2f)でした。", ?,?); } } int main(void) { Car mycar = {{0.0, 0.0}, 90.0}; while (1) { int select; Point dest; /* 目的地の座標 */ put_info(mycar); /* 現在位置と残り燃料を表示 */ Point target = {rand() % 100 *0.1, rand() % 100 *0.1}; printf("移動しますか【Yes…1/No…0】:"); scanf("%d", &select); if (select != 1) break; printf("目的値のX座標:"); scanf("%lf", &dest.x); printf(" Y座標:"); scanf("%lf", &dest.y); if (!move(&mycar, dest)) puts("\a燃料不足で移動できません。"); check(&mycar, target); } return 0; }
C言語関連・22閲覧・50
ベストアンサー
check関数で目的地についたかどうかの結果を返して、whileループを抜ければよいかと思います。 int check(Car *c, Point target){ double d = distance_of( c->pt, target) printf("目的地までの距離:%.2f",d); if(d<1.0){ printf("目的地に到着しました!\n"); printf("目的地の位置は(%.2f,%.2f)でした。", target.x, taeget.y); return 1; } return 0; } int main(void){ : while(1){ : if (check(&mycar, target)) break; } return 0; }
この返信は削除されました
質問者からのお礼コメント
distance_ofで距離は返せました…ありがとうございます。
お礼日時:1/23 18:07