SOURCE FILE: ex1005.cpp


// Example 10.5. Tally numbers between RANGE_LOW and RANGE_HIGH   
   
#include <iostream.h>
#include <iomanip.h>
   
const int RANGE_LOW  = 80;   
const int RANGE_HIGH = 89;   
const int SIZE = (RANGE_HIGH - RANGE_LOW + 1);   
      
int main(void)   
{   
   void frequency(const int ar[], int NumEls); 
     
   int ar[] = {88, 83, 88, 79, 85, 94, 88, 82, 87, 76,    
               87, 83, 89, 90, 80, 86, 86, 89, 87, 88},   
       NumEls = 20,   // number of elements in ar
       tally[SIZE];   // array to tally ar elements from
                      // RANGE_LOW to RANGE_HIGH
           
   frequency(ar, NumEls);   

   return 0;
}   
   
//   
// Function to print the frequency of values between RANGE_LOW 
// and RANGE_HIGH in array ar from ar[0] to ar[NumEls - 1]   
// Pre:  ar is a constant array of integers.   
//       NumEls is the number of elements in ar.   
// Post: The frequency of values from ar between    
//       RANGE_LOW and RANGE_HIGH was displayed.   
//    
   
void frequency(const int ar[], int NumEls)   
{   
    int tally[SIZE], // one bin for each number in the range 
        bin;         // index for tally 
      
   // initialize array tally to zero 
   for (bin = 0; bin < SIZE; bin++)
      tally[bin] = 0;   
      
   // tally elements of array ar 
   for (int i = 0; i < NumEls; i++)   
      if (RANGE_LOW <= ar[i] && ar[i] <= RANGE_HIGH)   
         tally[ar[i] - RANGE_LOW]++;    
   
   // print tally results 
   cout << "\n       Frequency Distribution\n\n";
   cout << "\tValue\tFrequency\n";
   cout << "\t-----\t---------\n";
      
   for (bin = 0; bin < SIZE; bin++)   
      cout << "\t" << setw(3) << bin + RANGE_LOW 
           << "\t" << setw(3) << tally[bin] << endl;
}