// CS 2SC3 / SE 2S03 solution for assignment 6 -- Pouya Larjani #include #include #include #include "prog6.h" vector error_vector = {0.0/0.0, 0.0/0.0}; node g(node n, int i) { return (n&&i>0)?g(n->next,i-1):n; } double vec_mag(vector v) { return sqrt(v.x*v.x+v.y*v.y); } vec_store make_vec_store() { return calloc(1,sizeof(struct vs)); } vector get_vec(vec_store s, int i) { if (!s || i<0 || i>=s->size) { fprintf(stderr, "Index out of bounds.\n"); return error_vector; } else return g(s->seq, i)->data; } void delete_vec(vec_store s, int i) { if (!s || i<0 || i>=s->size) { fprintf(stderr, "Index out of bounds.\n"); return; } node p = g(s->seq, i-1); if (i) { node n=p; p = p->next; n->next = p->next; } else s->seq = p->next; free(p); s->size--;} void insert_vec(vec_store s, vector v) { node n = (node)malloc(sizeof(struct node_record)); double m = vec_mag(v); n->data = v; n->next = s->seq; s->size++; for (node p=n; p; p=p->next) if (!p->next || vec_mag(p->next->data) > m) { n->next = p->next; if (p==n) s->seq = n; else p->next = n; break;}} void print_vec_store(vec_store s) { printf("vec_store[%d] = {", s->size); for (node n=s->seq; n; n=n->next) printf("(%f,%f)%s", n->data.x, n->data.y, n->next?", ":"}\n"); }