All pastes #795149 Raw Edit

StdDev

public text v1 · immutable
#795149 ·published 2007-11-23 21:18 UTC
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;
  }