rendered paste body//==============================================================================
//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 <vcl.h>
#include <conio.h>
#include <fstream.h>
#include <iomanip.h>
#include <iostream.h>
#include <math.h>
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 <<endl;
cout << setw (58) << "If there is no other data, enter -1";
cout << ": ";
cin >> 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;
}