Image

Imagenallix wrote in Imagecpp

This week's lecture and assignment in my Intro C++ class was all about functions. My assigment required that my program contain at least one function. Comments welcome.


// SSINN - Subtle, Semi-Subtle, Implied, Null, and Neither

/* Author:  Dennis Groome
 *
 * Purpose: Determine if a seven-digit integer is:
 *
 *          Subtle:      The middle digit is a divisor of bother the left three
 *                       digits and the right three digits.
 *          Semi-Subtle: The middle digit is a divisor of either the left or
 *                       right three digits, but not both.
 *          Implied:     The middle digit is a factor of the origional
 *                       seven-digit number.
 *          Null:        The middle digit is zero
 *          Neither:     the number is none of the above
 *
 * Input:   A sequence of integers, one per line, most of which are seven-digits
 *
 * Output:  A single line for each number input which is either an error message
 *          or a statement of category followed by a blank line and then a six
 *          line summary indicating the number of values investigated and the
 *          number of values in each category.
 *
 *          Single line output is one of the following:
 *
 *               ### is TOO SMALL
 *               ### is TOO BIG
 *               ### is Subtle
 *               ### is Semi-Subtle
 *               ### is Implied
 *               ### is Null
 *               ### is nothing special
 *
 *          Where ### represents the number in question
 *
 *          The last single line output is seperated from the six line summary
 *          by three blank lines, the summary has the general form:
 *
 *          ## numbers were investigated
 *               ## were Subtle
 *               ## were Semi-Subtle
 *               ## were Implied
 *               ## were Null
 *               ## were nothing special
 */

 #include 

// subprogram prototypes
int count_digits (int);
int investigate (int);

int main ()
{ // program: SSINN
  int intNumber;       // number being investigated
  int intTotalNumbers; // number of integers being investigated
  int intSubtle;       // number of Subtle numbers
  int intSemiSubtle;   // number of Semi-Subtle numbers
  int intImplied;      // number of Implied numbers
  int intNull;         // number of Null numbers
  int intNothing;      // number of numbers that are nothing special

  // initializations
  intTotalNumbers = 0;
  intSubtle = 0;
  intSemiSubtle = 0;
  intImplied = 0;
  intNull = 0;
  intNothing = 0;

  // get first number
  cin >> intNumber;
  while (cin)
  { // investigate the number
    intTotalNumbers = intTotalNumbers + 1;

    if (count_digits(intNumber) < 7)
    { // number is too small
      cout << intNumber << " is TOO SMALL\n" << endl;
    } // number is too small

    if (count_digits(intNumber) > 7)
    { // number is too big
      cout << intNumber << " is TOO BIG\n" << endl;
    } // number is too big

    if (count_digits(intNumber) == 7)
    { // number is seven-digits

      // investigate category
      if (investigate(intNumber) == 1)
      { // number is Subtle
        cout << intNumber << " is Subtle\n" << endl;
        intSubtle = intSubtle + 1;
      } // number is Subtle
      if (investigate(intNumber) == 2)
      { // number is Semi-Subtle
        cout << intNumber << " is Semi-Subtle\n" << endl;
        intSemiSubtle = intSemiSubtle + 1;
      } // number is Semi-Subtle
      if (investigate(intNumber) == 3)
      { // number is Implied
        cout << intNumber << " is Implied\n" << endl;
        intImplied = intImplied + 1;
      } // number is Implied
      if (investigate(intNumber) == 4)
      { // number is Null
        cout << intNumber << " is Null\n" << endl;
        intNull = intNull + 1;
      } // number is Null
      if (investigate(intNumber) == 5)
      { // number is nothing special
        cout << intNumber << " is nothing special\n" << endl;
        intNothing = intNothing + 1;
      } // number is nothing special

    } // number is seven-digits

    cin >> intNumber;
  } // investigate the number

  // output summary
  cout << endl << endl << intTotalNumbers << " numbers were investigated\n";
  cout << "\t" << intSubtle << " were Subtle\n";
  cout << "\t" << intSemiSubtle << " were Semi-Subtle\n";
  cout << "\t" << intImplied << " were Implied\n";
  cout << "\t" << intNull << " were Null\n";
  cout << "\t" << intNothing << " were nothing special\n";

} // program: SSINN

int count_digits (int intNumber)
/* Purpose: Count the digits in intNumber
 *
 * Input:   the number in question as parameter
 *
 * Output:  the number of digits in number in question as return value
 */

{ // function count_digits
  int intDigits; // number of digits in number

  // initializations
  intDigits = 0;

  // while there is still a number
  while (intNumber > 0)
  { // get one digit
    intNumber = intNumber / 10;
    intDigits = intDigits +1;
  } // get one digit

  return intDigits;
} // function count_digits

int investigate (int intNumber)
/* Purpose: assign a category to a seven digit integer
 *
 * Input:   the number in question, as a parameter
 *
 * Output:  an integer from 1 to 5 according to category as a return value where
 *          1 is Subtle
 *          2 is Semi-Subtle
 *          3 is Implied
 *          4 is Null
 *          5 is nothing special
 */

{ // function: investigate
  int intFirstThree; // first three digits of seven digit integer
  int intMiddle;     // middle digit of seven digit integer
  int intLastThree;  // last three digits of seven digit integer

  // break seven digit integer down
  intFirstThree = intNumber / 10000;
  intMiddle = intNumber / 1000 % 10;
  intLastThree = intNumber % 1000;

  // assign category
  if (intMiddle == 0)
  { // number is Null
    return 4;
  } // number is Null
  if ((intFirstThree % intMiddle == 0) && (intLastThree % intMiddle == 0))
  { // number is Subtle
    return 1;
  } // number is Subtle
  if ((intFirstThree % intMiddle == 0) || (intLastThree % intMiddle == 0))
  { // number is Semi-Subtle
    return 2;
  } // number is Semi-Subtle
  if (intNumber % intMiddle == 0)
  { // number is Implied
    return 3;
  } // number is Implied

  // number is nothing special
  return 5;
} // function: investigate