// FILENAME: dogclass.cpp // ** NOTE in order for file to be "readable", // the racing program is cut down to one race, & all of the // 2-digit nums in one-eigth & stretch must be truncated // and the race header is also removed. #include "dogclass.h" #include "unit1.h" // GLOBAL DECLARATIONS #define RACENUM 6 //************************* Constructor/Destructor **************************** Dog::Dog( float record, int dist ) { trackrecord = record; recdist = dist; inout = 'n'; } //----------------------- Dog::~Dog( void ) { } //------------------------------------------------------- void Dog::getinfo(FILE* &ins) { int ctr; // char *str = NULL; eatspace(ins); getname(ins); eatheader(ins); for (ctr = 0;ctr < RACENUM;ctr++) if (!fillrace(ins,race[ctr])) { race[ctr].dist = race[ctr-1].dist; race[ctr].pp = race[ctr-1].pp; race[ctr].time = race[ctr-1].time; race[ctr].gate = race[ctr-1].gate; race[ctr].oneeigth = race[ctr-1].oneeigth; race[ctr].stretch = race[ctr-1].stretch; race[ctr].finish = race[ctr-1].finish; race[ctr].grade = race[ctr-1].grade; } eatspace(ins); geteffgrade(); calcform(); calculate(); } //---------------------------------------------------------- // Gets one integer from input file and return it to program void Dog::getname(FILE*& ins) { fgetc(ins); fgetc(ins); fgetc(ins); fgets(dogname,25,ins); } //---------------------------------------------------------- // Reads and discard "white space" from file void Dog::eatspace(FILE *&ins) { char ch; do { ch = (char)fgetc(ins); } while ((isspace(ch))||(ch =='-')); ungetc(ch,ins); return; } //---------------------------------------------------------- /// burn 3 lines of header... void Dog::eatheader(FILE*& ins) { while (fgetc(ins) != '\n') {} while (fgetc(ins) != '\n') {} while (fgetc(ins) != '\n') {} } //----------------------------------------------------------- // POSTCONDITION: Avg time, early speed, and // front/back runner info is calculated void Dog::calculate( void ) { int ctr, tot=0; float tot18=0.0, totfin=0.0; float tottime=0.0; float allsix=0.0, lastthree=0.0; //, pptimes=0.0; for(ctr=0;ctr= 4.75) effective_grade = 2; else if (avg >= 4.50) effective_grade = 3; else if (avg >= 4.10) effective_grade = 4; // B+ else if (avg >= 3.75) effective_grade = 5; else if (avg >= 3.50) effective_grade = 6; else if (avg >= 3.10) effective_grade = 7; // C+ else if (avg >= 2.75) effective_grade = 8; else if (avg >= 2.50) effective_grade = 9; else if (avg >= 2.10) effective_grade = 10; // D+ else if (avg >= 1.75) effective_grade = 11; else if (avg >= 1.50) effective_grade = 12; else if (avg >= 1.10) effective_grade = 13; // E+ else if (avg >= 0.75) effective_grade = 14; else effective_grade = 15; } } //-=---------------------------------------------------------------- void Dog::calcform(void) { if (((race[0].finish <= race[1].finish) && (race[1].finish <= race[2].finish)) && ((race[0].finish <= 5) && (race[1].finish <= 5) && (race[2].finish <= 5))) form = 'g'; else form = 'u'; if ((race[0].finish == 8) || (race[1].finish == 8) || (race[2].finish == 8)) form = 'i'; if (((race[0].finish >= race[1].finish) && (race[1].finish >= race[2].finish)) && ((race[0].finish >= 4) && (race[1].finish >= 4) && (race[2].finish >= 4))) form = 'o'; // in case a good dog slipped through.... saftey net if ((race[0].finish <= 3) && (race[1].finish <= 3) && (race[2].finish <= 3)) form = 'g'; } //------------------------------------------------------------------- void Dog::calcstyle(float early_speed) { int ctr; int incount = 0; int outcount = 0; if (early_speed <= 4) style = 'f'; else style = 'b'; if (style == 'f') { for (ctr=0;ctr<6;ctr++) { if ((race[ctr].pp == 1) || (race[ctr].pp == 2)) if ((race[ctr].finish == 1) || (race[ctr].finish == 2)) incount++; if ((race[ctr].pp == 7) || (race[ctr].pp == 8)) if ((race[ctr].finish == 1) || (race[ctr].finish == 2)) outcount++; } if (incount > outcount) // if happened twice... inout = 'i'; else if (incount < outcount) inout = 'o'; else inout = 'n'; incount = 0; outcount = 0; //cout << "(I)nside, (O)utside, or (N)o preference runner? "; } }