#include #include int notend_p (char *s) { return (s [0] != 'E' || s [1] != 'N' || s [2] != 'D'); } int main (void) { char data [220]; char *dend; double f = 1 / sqrt (2.0); dend = gets (data); while (dend != NULL && notend_p (data)) { int p = 0; double x = 0; double y = 0; double add; int i, dx, dy, nxt; while (data[p] != '.') { if (data [p] == ',') p++; sscanf (data + p, "%d", &i); while (data [p] >= 48 && data [p] <= 57) p++; nxt = 0; switch (data [p]) { case 'N': nxt = 1; dy = 1; break; case 'S': nxt = 1; dy = -1; break; case 'E': dx = 1; dy = 0; break; case 'W': dx = -1; dy = 0; break; } p++; if (nxt) switch (data [p]) { case 'W': dx = -1; p++; break; case 'E': dx = 1; p++; break; default: dx = 0; nxt = 0; break; } add = i; if (nxt) add *= f; x += dx * add; y += dy * add; } printf ("You can go to (%.3f,%.3f), the distance is %.3f steps.\n", x, y, sqrt (x * x + y * y)); dend = gets (data); } return (0); }