diff --git a/vector.cc b/vector.cc new file mode 100644 --- /dev/null +++ b/vector.cc @@ -0,0 +1,105 @@ +/** + * DEREFERNCING CLASSES + */ + +#include +#include +#include +#include + +#define GETRANDOM(max) (1+(int)((float)max*rand()/RAND_MAX+1.0)) +#define MAX 6 + +namespace algebra { + class Vector { + private: + int x; + int y; + + public: + Vector (int xx = 0, int yy = 0); + ~Vector (); + + int X () { return x; } + int Y () { return y; } + + Vector operator+ (Vector&); + Vector operator- (Vector&); + + void vector (); + double abs (); + }; + + Vector::Vector (int xx, int yy) { + x = xx; + y = yy; + } + + Vector::~Vector () { + fprintf (stderr, "Removing Vector (%.3d, %.3d)\n", x, y); + } + + Vector Vector::operator+ (Vector& v) { + return Vector (x + v.X (), y + v.Y ()); + } + + Vector Vector::operator- (Vector& v) { + return Vector (x - v.X (), y - v.Y ()); + } + + double Vector::abs () { + return sqrt (x * x + y * y); + } + + void Vector::vector () { + printf ("(%.3d, %.3d)", x, y); + } +} + +using namespace algebra; + +int main (int argc, char **argv) +{ + Vector *v[MAX]; + Vector result; + + srand (time (NULL)); + + if ((MAX % 2) != 0) { + printf ("MAX %% 2 != 0\n"); + return EXIT_FAILURE; + } + + for (int i = 0; i < MAX; i++) { + v[i] = new Vector (GETRANDOM (100), GETRANDOM (100)); + } + + for (int i = 0; i < MAX; i += 2) { + v[i + 1]->vector (); + printf ("+"); + v[i]->vector (); + printf ("="); + result = *v[i + 1] + *v[i]; + result.vector (); + printf (" = %3.2f\n", result.abs ()); + } + + printf ("\n"); + + for (int i = 0; i < MAX; i += 2) { + v[i + 1]->vector (); + printf ("-"); + v[i]->vector (); + printf ("="); + result = *v[i + 1] - *v[i]; + result.vector (); + printf (" = %3.2f\n", result.abs ()); + } + + printf ("\nCLEANUP\n"); + + for (int i = 0; i < MAX; i++) + delete v[i]; + + return EXIT_SUCCESS; +}