//============================================================================== //Name: Minnie Kwok //Course: CMPSCI 101 //Date: 2007 November //Program Number: modstat.bpr //Project Filename: modstat.bpr //Program Filename: modstat.cpp //Executable File: modstat.exe //Output Filename: modstat.doc //============================================================================== // Program Abstract: Modularizing the calculations of average and standard dev. // ============================================================================= #include #include #include #include #include #include ofstream fout; void Pause (void); void SkipLineC (int); void SkipLineF (int); // ====================================================================== int main (void) { // local variable declaration char reply; double average, score [100], sum, sumsqr, stddev; int count, i, index; // function declarations double Average (double [], int); double StandardDeviation (double score [], int count); void Intro (void); bool Done (void); void GetData (double [], int&); void Record_on_Screen (double [], int); void Record_in_File (double [], int); void Record_ave_and_stddev_on_Screen (double average, double stddev); // initializing output textfile fout.open ("demo.txt"); cout << fixed << setprecision (2); fout << fixed << setprecision (2); Intro (); do { GetData (score, count); average = Average (score, count); stddev = StandardDeviation (score, count); Record_on_Screen (score, count); Record_in_File (score, count); } while (! Done ()); Record_ave_and_stddev_on_Screen (average, stddev); cin.get (); fout.close (); return 0; } // ============================================================================= void Intro (void) { int i; // introduction page SkipLineC (5); cout << setw (52) << " GGGGG RRRRRRR AAAAA DDDDDDD "; cout << "EEEEEEEEE RRRRRRR"; cout << endl; cout << setw (52) << " GGGGGGG RRRRRRRR AAAAAAA DDDDDDDD "; cout << "EEEEEEEEE RRRRRRRR"; cout << endl; cout << setw (52) << "GGG GGG RRR RRR AAA AAA DDD DDD "; cout << "EEE RRR RRR"; cout << endl; cout << setw (52) << "GGG GGG RRR RRR AAA AAA DDD DDD "; cout << "EEE RRR RRR"; cout << endl; cout << setw (52) << "GGG RRRRRRRR AAAAAAAAA DDD DDD "; cout << "EEEEEE RRRRRRRR "; cout << endl; cout << setw (52) << "GGG RRRRRRR AAAAAAAAA DDD DDD "; cout << "EEEEEE RRRRRRR "; cout << endl; cout << setw (52) << "GGG GGGG RRR RRR AAA AAA DDD DDD "; cout << "EEE RRR RRR "; cout << endl; cout << setw (52) << "GGG GGG RRR RRR AAA AAA DDD DDD "; cout << "EEE RRR RRR "; cout << endl; cout << setw (52) << " GGGGGGG RRR RRR AAA AAA DDDDDDDD "; cout << "EEEEEEEEE RRR RRR"; cout << endl; cout << setw (52) << " GGGGG RRR RRR AAA AAA DDDDDDD "; cout << "EEEEEEEEE RRR RRR"; cout << endl; cout << endl << endl; cout << setw (61) << "will statistically determine the grades to any set "; cout << "of scores"; Pause (); return; } // ============================================================================= void GetData (double score [], int &count) { int i; void Verify (double [], int); count = 0; do // enter input data { clrscr (); SkipLineC (9); count++; cout << setw (51) <<"Please input the data #" << setw (2) << count; cout << ": "; cout << endl << endl <> score [count]; } while (score [count] != -1); count--; Verify (score, count); return; } // ============================================================================= void Verify (double score [], int count) { int i, index; do // echo print input data { clrscr (); for (i = 1; i <= count; i++) { if ((i - 1) % 6 == 0) { SkipLineC (2); } cout << setw (2) << "[" << setw (3) << i << "]"; cout << setw (6) << score [i]; } // verify correctness of input data SkipLineC (2); cout << setw (62) << "Enter index of incorrect data; else enter 0: "; cin >> index; if (index != 0) { SkipLineC (2); cout << setw (45) << "Enter correct data for [" << index << "]: "; cin >> score [index]; } } while (index != 0); return; } // ============================================================================= void Record_on_Screen (double score [], int count) { int i; // record verified data on screen cin.get (); for (i = 1; i <= count; i++) { if ((i - 1) % 15 == 0) { if (i > 1) { Pause (); } clrscr (); SkipLineC (2); cout << setw (49) << "The set of scores"; SkipLineC (2); } cout << setw (35) << "[" << setw (3) << i << "]"; cout << setw (7) << score [i]; SkipLineC (1); } Pause (); return; } // ============================================================================= void Record_in_File (double score [], int count) { int i; // record verified data on output textfile for (i = 1; i <= count; i++) { if ((i - 1) % 25 == 0) { if (i > 1) { fout << "\f"; // formfeed } fout << setw (49) << "The set scores"; // textfile heading SkipLineF (2); } fout << setw (37) << "[" << setw (3) << i << "]"; fout << setw (7) << score [i]; SkipLineF (2); } return; } // ============================================================================= bool Done (void) { bool fin; char reply; int i; do { SkipLineC (7); cout << setw (52) << "Is there another set of data? Enter y for"; cout << " yes or n for no: "; cin >> reply; } while ((reply != 'n') && (reply != 'N') && (reply != 'y') && (reply != 'Y')); switch (reply) { case 'n': ; case 'N': fin = true; break; case 'y': ; case 'Y': fin = false; } return (fin); } // ============================================================================= // UTILITY FUNCTIONS // ============================================================================= void SkipLineC (int k) { int i; for (i = 1; i <= k; i++) { cout << endl; } return; } // ============================================================================= void SkipLineF (int k) { int i; for (i = 1; i <= k; i++) { fout << endl; } return; } // ============================================================================= void Pause (void) { SkipLineC (3); cout << setw (55) << "Press ENTER to continue . . . "; cin.get (); clrscr (); SkipLineC (2); return; } // ============================================================================= /* // calculate average and standard deviation cin.get (); sum = 0.0; sumsqr = 0.0; for (i = 1; i <= count; i++) { sum = sum + score [i]; sumsqr = sumsqr + score [i] * score [i]; } if (count > 1) { ave = sum / count; } else { ave = 0.0; } if (count > 0) { stddev = sqrt (((count * sumsqr) - (sum * sum)) / (count * (count - 1))); } else { stddev = 0.0; } // record average and standard deviation on screen clrscr (); for (i = 1; i <= 9; i++) { cout << endl; } cout << setw (45) << "Average = " << ave; cout << endl << endl; cout << setw (45) << "Standard Deviation = " << stddev; cout << endl << endl << endl; cout << setw (55) << "Press ENTER to continue . . . "; cin.get (); // record average and standard deviation on output textfile fout << endl << endl << endl; fout << setw (45) << "Average = " << ave; fout << endl << endl; fout << setw (45) << "Standard Deviation = " << stddev; fout << endl << endl; */ // ============================================================================= double Average (double score [], int n) { double average, sum; n = 1; do { sum = sum + score[n]; n = n + 1; } while (score [n] != -1); average = sum / (n - 1); return (average); } // ============================================================================= double StandardDeviation (double score [], int n) { double sum, sumsqr, sd; n = 1; do { sum = sum + score [n]; sumsqr = sumsqr + score[n] * score[n]; if (score [n] != -1) { n = n + 1; } } while (score [n] != -1); sd = (sqrt(((n-1) * sumsqr - sum * sum) / ((n-2 ) * (n-1) ))); return (sd); } // ============================================================================= void Record_ave_and_stddev_on_Screen (double average, double stddev) { int i; // record average and standard deviation on screen clrscr (); for (i = 1; i <= 9; i++) { cout << endl; } cout << setw (45) << "Average = " << average; cout << endl << endl; cout << setw (45) << "Standard Deviation = " << stddev; cout << endl << endl << endl; cout << setw (55) << "Press ENTER to continue . . . "; cin.get (); return; }