home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / tybc4 / ptr4.cpp < prev    next >
C/C++ Source or Header  |  1993-03-27  |  2KB  |  64 lines

  1. /*
  2.   C++ program that demonstrates pointers to structured types
  3. */
  4.  
  5. #include <iostream.h>
  6. #include <stdio.h>
  7. #include <math.h> 
  8.  
  9. const MAX_RECT = 4;
  10.  
  11. struct point {
  12.   double x;
  13.   double y;
  14. };
  15.  
  16. struct rect {
  17.   point ulc; // upper left corner
  18.   point lrc; // lower right corner
  19.   double area;
  20.   int id;
  21. };                  
  22.  
  23. typedef rect rectArr[MAX_RECT];
  24.  
  25. main()
  26. {
  27.   rectArr r;          
  28.   rect temp;                                
  29.   rect* pr = r;
  30.   rect* pr2;
  31.   double length, width;
  32.   
  33.   for (int i = 0; i < MAX_RECT; i++, pr++) {
  34.     cout << "Enter (X,Y) coord. for ULC of rect. # " 
  35.          << i << " : ";
  36.     cin >> pr->ulc.x >> pr->ulc.y;
  37.     cout << "Enter (X,Y) coord. for LRC of rect. # " 
  38.          << i << " : ";                 
  39.     cin >> pr->lrc.x >> pr->lrc.y;         
  40.     pr->id = i;
  41.     length = fabs(pr->ulc.x - pr->lrc.x);
  42.     width = fabs(pr->ulc.y - pr->lrc.y);
  43.     pr->area = length * width;
  44.   }                               
  45.   
  46.   pr -= MAX_RECT; // reset pointer
  47.   // sort the rectanges by areas
  48.   for (i = 0; i < (MAX_RECT - 1); i++, pr++) {
  49.     pr2 = pr + 1; // reset pointer pr2
  50.     for (int j = i + 1; j < MAX_RECT; j++, pr2++)
  51.       if (pr->area > pr2->area) {
  52.         temp = *pr;
  53.         *pr = *pr2;
  54.         *pr2 = temp;
  55.       }
  56.   }
  57.       
  58.   pr -= MAX_RECT - 1; // reset pointer
  59.   // display rectangles sorted by area
  60.   for (i = 0; i < MAX_RECT; i++, pr++) 
  61.     printf("Rect # %d has area %5.4lf\n", pr->id, pr->area);
  62.   return 0;
  63. }
  64.