home *** CD-ROM | disk | FTP | other *** search
- /*
- C++ program that demonstrates pointers to structured types
- */
-
- #include <iostream.h>
- #include <stdio.h>
- #include <math.h>
-
- const MAX_RECT = 4;
- const TRUE = 1;
- const FALSE = -1;
-
- struct point {
- double x;
- double y;
- };
-
- struct rect {
- point ulc; // upper left corner
- point lrc; // lower right corner
- double area;
- int id;
- };
-
- typedef rect rectArr[MAX_RECT];
-
- main()
- {
- rectArr r;
- rect temp;
- rect* pr = r;
- rect* pr2;
- double length, width;
- int offset;
- int inOrder;
-
- for (int i = 0; i < MAX_RECT; i++, pr++) {
- cout << "Enter (X,Y) coord. for ULC of rect. # "
- << i << " : ";
- cin >> pr->ulc.x >> pr->ulc.y;
- cout << "Enter (X,Y) coord. for LRC of rect. # "
- << i << " : ";
- cin >> pr->lrc.x >> pr->lrc.y;
- pr->id = i;
- length = fabs(pr->ulc.x - pr->lrc.x);
- width = fabs(pr->ulc.y - pr->lrc.y);
- pr->area = length * width;
- }
-
- // sort the rectanges by areas
- offset = MAX_RECT;
- do {
- offset = (8 * offset) / 11;
- offset = (offset == 0) ? 1 : offset;
- inOrder = TRUE;
- pr = r;
- pr2 = r + offset;
- for (int i = 0;
- i < MAX_RECT - offset;
- i++, pr++, pr2++)
- if (pr->area > pr2->area) {
- inOrder = FALSE;
- temp = *pr;
- *pr = *pr2;
- *pr2 = temp;
- }
- } while (!(offset == 1 && inOrder));
-
- pr = r; // reset pointer
- // display rectangles sorted by area
- for (i = 0; i < MAX_RECT; i++, pr++)
- printf("Rect # %d has area %5.4lf\n", pr->id, pr->area);
- return 0;
- }
-