home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / tybc4 / ptr6.cpp < prev    next >
C/C++ Source or Header  |  1993-03-30  |  2KB  |  75 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. const TRUE = 1;
  11. const FALSE = -1;
  12.  
  13. struct point {
  14.   double x;
  15.   double y;
  16. };
  17.  
  18. struct rect {
  19.   point ulc; // upper left corner
  20.   point lrc; // lower right corner
  21.   double area;
  22.   int id;
  23. };                  
  24.  
  25. typedef rect rectArr[MAX_RECT];
  26.  
  27. main()
  28. {
  29.   rectArr r;          
  30.   rect temp;                                
  31.   rect* pr = r;
  32.   rect* pr2;
  33.   double length, width;            
  34.   int offset;
  35.   int inOrder;
  36.   
  37.   for (int i = 0; i < MAX_RECT; i++, pr++) {
  38.     cout << "Enter (X,Y) coord. for ULC of rect. # " 
  39.          << i << " : ";
  40.     cin >> pr->ulc.x >> pr->ulc.y;
  41.     cout << "Enter (X,Y) coord. for LRC of rect. # " 
  42.          << i << " : ";                 
  43.     cin >> pr->lrc.x >> pr->lrc.y;         
  44.     pr->id = i;
  45.     length = fabs(pr->ulc.x - pr->lrc.x);
  46.     width = fabs(pr->ulc.y - pr->lrc.y);
  47.     pr->area = length * width;
  48.   }                               
  49.   
  50.   // sort the rectanges by areas
  51.   offset = MAX_RECT;
  52.   do {           
  53.     offset = (8 * offset) / 11;
  54.     offset = (offset == 0) ? 1 : offset;
  55.     inOrder = TRUE;
  56.     pr = r;
  57.     pr2 = r + offset;
  58.     for (int i = 0; 
  59.          i < MAX_RECT - offset; 
  60.          i++, pr++, pr2++)
  61.       if (pr->area > pr2->area) {
  62.         inOrder = FALSE;
  63.         temp = *pr;
  64.         *pr = *pr2;
  65.         *pr2 = temp;
  66.       }
  67.   } while (!(offset == 1 && inOrder));
  68.       
  69.   pr = r; // reset pointer
  70.   // display rectangles sorted by area
  71.   for (i = 0; i < MAX_RECT; i++, pr++) 
  72.     printf("Rect # %d has area %5.4lf\n", pr->id, pr->area);
  73.   return 0;
  74. }
  75.