------------------------------------------------------------------------------
MC logo
Point With Struct
[^] Code Examples
------------------------------------------------------------------------------
<<C Structs pt.c C++ Point Class I>>
#include <stdio.h>
#include <math.h>

/* Points. */
typedef struct Point {
        double xval, yval;
} Point;

/* Fill in a point. */
Point mkpt(double x, double y) {
        Point p;

        p.xval = x;
        p.yval = y;

        return p;
}

/* Distance to another point.  Pythagorean thm. */
double dist(Point a, Point b) {
        double xd = a.xval - b.xval;
        double yd = a.yval - b.yval;
        return sqrt(xd*xd + yd*yd);
}

/* Add or subtract two points. */
Point add(Point a, Point b)
{
        return mkpt(a.xval + b.xval, a.yval + b.yval);
}
Point sub(Point a, Point b)
{
        return mkpt(a.xval - b.xval, a.yval - b.yval);
}

/* Move the existing point. */
void move(Point *p, double a, double b)
{
        p->xval += a;
        p->yval += b;
}

/* Print the point to standard output.  The class ostream is a base class
   for output streams of various types. */
void print(Point p)
{
        printf("(%g,%g)", p.xval, p.yval);
}

// Print a line of the form x op y = z, where x, y, and z are points. 
void prline(Point x, char *op, Point y, Point z)
{
        print(x);
        printf(" %s ", op);
        print(y);
        printf(" = ");
        print(z);
        printf("\n");
}

main() 
{
        // Some points.
        Point a = mkpt(5.2, -4.8);
        Point b = mkpt(3.0, 9.0);
        Point c = mkpt(-3.38, 0.0);
        Point d = mkpt(0.0, 0.0);

        // Some arith. on the points.
        d = sub(b, c);
        prline(b, "-", c, d);
        prline(a, "+", b, add(a, b));
        print(a); printf(" is %g from ", dist(a,d)); print(d); printf("\n");

        // Point variables are not references.
        Point fred[5];
        int m;
        for(m = 0; m < 5; m++) fred[m] = a;
        double w = 4.5;
        double x = -2.31;
        for(m = 0; m < 5; m++) {
                move(&fred[m], w, x);
                w += 3.4;
                x -= 1.3;
        }
        for(m = 0; m < 5; m++) {
                print(fred[m]);
                printf("\n");
        }
}
<<C Structs C++ Point Class I>>