SOURCE FILE: ex1004a.cpp


//   
// Example 10.4 a. Program to read golf scores from the file "ex1003.dat"   
// (no white space after last score) and then to print the winning score
//    
   
#include <fstream.h>
#include <iomanip.h>
#include <assert.h>   
   
const int MAX_NUM_PLAYERS = 100; // maximum number of players  

int main(void)   
{   
   void ReadScoresFile(int [], int&); // prototypes
   int winner(const int [], int);   

   int TourneyScore[MAX_NUM_PLAYERS], // array of scores 
       TourneyNum;                    // actual number of players 

   ReadScoresFile(TourneyScore, TourneyNum);
   cout << "The winning score is " 
        << winner(TourneyScore, TourneyNum) << ".\n";

   return 0;
}   
  
//   
// Function to read values for an array    
// Pre:  ex1003.dat is a file of golf scores.   
// Post: score is a constant integer array of golf scores.
//       NumPlayers is the number of golf scores.   
//    
   
void ReadScoresFile(int score[], int& NumPlayers)
{
   ifstream GolfFile("ex1003.dat"); 
   assert(GolfFile);
   
   // read values for array score until end of file 
   NumPlayers = 0; 
   while ((NumPlayers < MAX_NUM_PLAYERS) && 
         (GolfFile >> score[NumPlayers]))
      NumPlayers++;   
   
   // print error message if too much data for array 
   if (!GolfFile.eof())   
      cout << "\nFile contained more than " << MAX_NUM_PLAYERS 
           << " scores.\n"
           << "Only the first " << MAX_NUM_PLAYERS
           << " scores will be processed.\n";

   GolfFile.close();   
}

//   
// Example 10.4a. Function to return the winning (minimum) 
// score of a golf tournament
// Pre:  score is a nonempty constant array of integer golf scores.
//       NumPlayers is the number of values in score.   
// Post: The winning score was returned.   
//    
   
int winner(const int score[], int NumPlayers)   
{   
   int min;     // ongoing minimum in array 
   
   min = score[0];   
   
   for (int player = 1; player < NumPlayers; player++)    
      if (score[player] < min)    
         min = score[player];   
         
   return min;
}