initial commit / finished report
This commit is contained in:
commit
90a915fcf0
12 files changed
+318
No files matched your search
@@ -0,0 +1,85 @@
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include <math.h>
|
||||
|
||||
typedef enum {
|
||||
ABSOLUTE,
|
||||
DELTA,
|
||||
NUM_INPUT_TYPE
|
||||
} InputType;
|
||||
|
||||
typedef struct {
|
||||
double x;
|
||||
double y;
|
||||
} Point;
|
||||
|
||||
typedef struct {
|
||||
Point pt;
|
||||
double fuel;
|
||||
} Car;
|
||||
|
||||
double calc_dist(Point *p1, Point *p2) {
|
||||
double x2 = (p1->x - p2->x) * (p1->x - p2->x);
|
||||
double y2 = (p1->y - p2->y) * (p1->y - p2->y);
|
||||
return sqrt(x2 + y2);
|
||||
}
|
||||
|
||||
void get_info(Car *c) {
|
||||
printf("Current Position: (%.2f, %.2f)\nFuel Available: %.2f Liter\n",
|
||||
c->pt.x,
|
||||
c->pt.y,
|
||||
c->fuel
|
||||
);
|
||||
}
|
||||
|
||||
int move(Car *c, Point *dest) {
|
||||
double d = calc_dist(&c->pt, dest);
|
||||
if (d > c->fuel) return 0;
|
||||
|
||||
c->pt = *dest;
|
||||
c->fuel -= d;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
|
||||
Car myCar = {{0.0,0.0}, 90.0};
|
||||
Point pt = {0};
|
||||
|
||||
while(1) {
|
||||
get_info(&myCar);
|
||||
char c;
|
||||
printf("Continue? [y/n]: ");
|
||||
scanf("%1[a-zA-Z]", &c);
|
||||
if (c == 'n') break;
|
||||
InputType t;
|
||||
bool isValidInput = false;
|
||||
while (!isValidInput) {
|
||||
printf("Select mode [0 = Absolute Position / 1 = Relative Position]: ");
|
||||
scanf("%u", (unsigned int*)&t);
|
||||
if (t < NUM_INPUT_TYPE) isValidInput = true;
|
||||
else puts("Invalid mode!");
|
||||
}
|
||||
printf("Input x coordinate: ");
|
||||
scanf("%lf", &pt.x);
|
||||
printf("Input y coordinate: ");
|
||||
scanf("%lf", &pt.y);
|
||||
switch (t) {
|
||||
case ABSOLUTE:
|
||||
break;
|
||||
case DELTA:
|
||||
pt.x += myCar.pt.x;
|
||||
pt.y += myCar.pt.y;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
int res = move(&myCar, &pt);
|
||||
if (res == 0) {
|
||||
puts("Low Fuel!");
|
||||
}
|
||||
getchar(); // environment specific fix
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in new issue
Block a user