CLASSWORK--COMPUTER PROGRAMMING 1--C++
---------------------------------------------------------------------------

Classworks that require you to modify or write a C++ source file must be
designed so that they compile and run successfully via the repl.it site.

The first five lines of every program that you write must be labelled with
your name, today's date, the name of this course, the period of this course,
and the name of your program (following the guidelines specified below).

All source code must be properly and completely commented and formatted as
specified by the instructor.  Unless indicated otherwise, no global
variables should be used in any of your programs.  Each starting and ending
brace { } should (almost always) be put on its own line.  The lines between
each set of braces should be properly indented.  All functions, variables,
and constants should be named in accordance with the procedures outlined
by the instructor.  One blank line should be placed between each function.
When asking the user for input, get the input on the SAME line as the
request for input.

Every program should have the procedure 'main' as the FIRST function in
your source file.  This means that when you write programs that use other
functions, you will need to include function prototypes in your programs.
For the most part, unless told otherwise by the instructor, 'main' should
be used only to call other functions.  Any work performed in 'main' should
be extremely minimal.  If you are ever unsure as to whether or not you
should create a separate function or perform some work in 'main', it is
always better to err on the side of creating a separate function.

Unless a problem states otherwise, programs that you create do NOT need
to include error trapping for user input.  In other words, it is okay
if a program behaves inappropriately due to improper data entered by a
user.  However, all other aspects of your programs should perform
flawlessly.  Program output should be grammatically and syntactically
correct, neat, presentable, and complete.

---------------------------------------------------------------------------

Each program that you write is to be submitted to me both electronically
via the Canvas learning management system.  You will upload/submit a copy
of the source (.cpp) file of your C++ program.

All of your C++ source files are to be named using the following format:

   Your username + a hyphen + "c" (for classwork)
   + the classwork # (using three digits) + ".cpp"

For example, if your name is John Doe and this is classwork #17, the
program should be named "john.doe-c017.cpp" (without the quotes).  Be sure
to always use three digits for the classwork number and lowercase letters.

---------------------------------------------------------------------------

DUE Thursday, 9-17-2020
01) Write a program that asks the user to enter two integers.  Ask for
     each number separately, and be sure to declare the two variables
     as type 'int' within your program.  Then compute and display the
     sum, difference, and product of those integers, each on a separate
     line as part of a sentence describing what is being displayed.
(10 points)


DUE Sunday, 9-20-2020
02) Write a program that asks the user to enter his/her full name.  The
     program should then display the name back to the user, along with
     the number of characters in the name.  The user should be allowed
     to enter spaces which, along with any other non-letter characters,
     should be counted when computing the length of the name.  Be sure
     to put quotation marks around the name when displaying it back to
     the user.
(10 points)


DUE Thursday, 9-24-2020
03) Write a program that has the user enter two integers (you MUST
     declare the two variables as type INT within your program).  Then,
     if the second integer is NOT zero, the computer should divide the
     first integer by the second integer and display the quotient.  If
     the second integer IS zero, the program should keep asking the
     user to re-enter the second integer until it is not zero.  Remember
     that the quotient of two integers can be a non-integer.
(15 points)


DUE Sunday, 9-27-2020
04) Write a program that asks the user to enter a word (or phrase, so
     be sure to allow spaces).  The program should then display the
     word using all uppercase letters.  After that the word should be
     displayed with only lowercase letters.  Finally, the word should
     be shown to the user with the order of the characters reversed
     (and with the case unchanged from how the phrase was originally
     entered).  You MUST use 'for' loops to produce the required
     program output.

     EXTRA CREDIT OPTION #1:  Have the user enter a phrase consisting
     of at least three words (separated by one space each, with no
     leading or trailing spaces).  Then have your program display the
     phrase with the order of the words reversed.  For example, if the
     user's phrase is "Cats are cool!", then your program would display
     "cool! are Cats" back to the user.

     EXTRA CREDIT OPTION #2:  Have the user enter a phrase consisting
     of at least three words (separated by one space each, with no
     leading or trailing spaces).  Then have your program display the
     phrase with the words in the phrase shown in random order.  For
     example, if the user's phrase is "cat and fish", then your program
     would display either "cat and fish", "cat fish and", "and cat fish",
     "and fish cat", "fish and cat", or "fish cat and" back to the user.
(15 points)


DUE Sunday, 10-4-2020
05) Write a program that has the user enter five real numbers.  Then
     display the average (mean) of the five numbers.  You must create
     a separate function to get the five numbers from the user, and
     then create another function to compute and display the mean.
     The procedure 'main' should contain no more than four lines of
     code (unless you are completing some or all of the extra credit
     options below, in which case 'main' may contain up to seven
     lines).  For this specific assignment, it is okay to use global
     variables in your program.

     EXTRA CREDIT OPTION #1:  In addition to displaying the average
     of the five numbers, also display their range.  The range is
     defined as the difference between the largest number and the
     smallest number.  Remember that the user is allowed to enter
     the five real numbers in any order.

     EXTRA CREDIT OPTION #2  In addition to displaying the average of
     the five numbers, also display the median of the five numbers.
     The median of a list of an odd number of numbers is the middle
     number when the numbers are arranged in numerical order.

     EXTRA CREDIT OPTION #3  In addition to displaying the average of
     the five numbers, also display the mode (or modes) of the five
     numbers.  The mode is the number that occurs most frequently
     in the list.  There can be multiple modes if there is more than
     one number that occurs the most often in the list.  Note that,
     in a list, if each number appears only once, then the list does
     not have any modes.
(20 points)


DUE Tuesday, 10-13-2020
06) Write a program that asks the user to enter an integer.  Then tell
     the user whether the given integer is odd or even, whether the
     integer is positive, negative, or zero, and whether the integer
     is prime or composite.  How, and in what order you display that
     information to the user, is up to you.  A prime number is an
     integer that is divisible only by 1 and itself.  Note that, by
     most definitions, numbers less than two are neither prime nor
     composite.

     For this assignment, in addition to 'main', you must create a
     separate function to get and return (via a 'return' statement) the
     number from the user, and then create three additional functions
     to perform the three tasks listed above.  The procedure 'main'
     should contain no more than six lines of code.  And, you may NOT
     use any global variables in your program.

     EXTRA CREDIT OPTION #1:  Instead of having the user re-run your
     program to enter more integers, have your program automatically
     ask the user to enter a new number after displaying the required
     information about their number.  Your program should then keep
     asking the user to enter new integers, displaying the required
     information after each entry.  Your program should finally quit
     when the user presses the ENTER key without entering anything.
     With this (and the next) extra credit option, it is okay to have
     more than six lines of code in 'main'.
	 
     EXTRA CREDIT OPTION #2:  Instead of asking the user to enter just
     one number, have the user enter two integers.  Then display the
     required information for both of the numbers, followed by the
     least common multiple of the two numbers.  The LCM of two numbers
     is the smallest number into which the two numbers divide with no
     remainder.  This extra credit option may be implemented before or
     after the first extra credit option.
(20 points)


DUE Tuesday, 10-20-2020
07) Write a program that has the user enter a sequence of integers.
     After EACH number is entered, the program should compute and
     report the mean of the numbers entered so far.  (Remember that
     the average of integers can be a floating point number.)  There
     is no limit to the number of integers that may be entered, and
     you may NOT ask the user how many numbers will be entered.  The
     program should quit when the user presses the ENTER key without
     entering anything.  (Make sure your program does not display a
     "bogus" average as it is ending.)

     For this assignment, while it is okay to put your main loop in
     the procedure 'main', from within the loop you must call a
     separate function whose sole purpose is to get and return (via a
     'return' statement) all user input.  Also called from within the
     loop must be an additional function whose purpose is to compute
     and return (also via a 'return' statement) the current average
     of the numbers entered so far.  You will most likely also need
     to pass arguments to one or both of these functions.

     The current average should always be displayed from within your
     main loop (not from within any of the functions called from the
     loop).  Both the variable that stores the sum of the integers
     entered so far, as well as the variable that stores the number
     of integers entered so far, should be declared as type 'int'
     (not 'double' or 'float').  You may NOT use any global variables
     in this program.

     EXTRA CREDIT OPTION #1:  After the user presses the ENTER key by
     itself, before the program ends, display the range of the numbers
     entered by the user.  The range is defined as the difference
     between the largest number and the smallest number.  Remember
     that the user is allowed to enter numbers in any order.

     EXTRA CREDIT OPTION #2:  After the user presses the ENTER key by
     itself, before the program ends, display the median of the numbers
     entered by the user.  The medium is the middle number of a list
     of numbers arranged in numerical order.  If there is an even
     number of integers, then the median is the average of the two
     middle numbers.

     EXTRA CREDIT OPTION #3  After the user presses the ENTER key by
     itself, before the program ends, display the mode (or modes) of
     the numbers entered by the user.  There can be multiple modes
     if there is more than one number that occurs the most often in
     the list.  Note that, in a list, if each number appears only
     once, then the list does not have any modes.
(15 points)


DUE Thursday, 10-29-2020
08) Write a program that simulates a slot machine.  Every time the
     user "pulls the lever" (the main game loop is executed), display
     three random words or symbols from a set of at least seven items
     that represent what might be seen with a real slot machine.
     After being shown the results from each pull of the lever, the
     user should be given the choice to either quit the program or
     pull the lever again.

     After each pull of the lever, in addition to showing the three
     random items, the user should also be shown how much money is
     left in his/her bank.  When the program first starts, the user
     should be gifted a certain amount of money of your choosing.
     Then, after each lever pull, the user will either win more money
     or lose some money, depending on what items have been randomly
     selected and shown.  While you may choose the amounts that the
     user wins and loses, getting "three of a kind" should earn the
     user the most amount of money.  Getting "two of a kind" should
     earn the user less money, and having three different items shown
     should cause the user to lose money.  You are free to create
     additional situations where the user can win or lose money.

     Make sure the user cannot play the game if he/she has run out of
     money.  Also make sure the results of each lever pull, and the
     questions posed to the user, are displayed in a neat, organized
     manner.  The visual presentation of your program (what the user
     sees) will play a significant role in determining your score for
     this assignment.

     Your program should NOT use any global variables.  It is okay
     for the procedure 'main' to contain an overall game loop, but
     'main' should be used mostly just to call other functions in
     your program.  In your other functions, it is up to you whether
     you return values with a 'return' statement or pass all of the
     variables to/from your functions as arguments and parameters.

     EXTRA CREDIT OPTION #1  Every time the user chooses to play the
     game again (pull the lever), before showing a new set of three
     random words or symbols, clear the console and diplay the
     information in such a way that, to the user, it looks like the
     only text being changed on the screen is the text with the three
     random words or symbols, the text describing the win or loss,
     and the amount of money left in the user's bank.

     EXTRA CREDIT OPTION #2  Use different colors when displaying
     the text with the random words or symbols displayed each time
     the user pulls the lever.  Each random word or symbol should be
     displayed in a non-white color.  While it is okay if some of the
     words or symbols have the same colors, be sure to use at least
     three different non-white colors for the random data.

     EXTRA CREDIT OPTION #3  Instead of displaying the random words
     or symbols by themselves or on lines of plain text, have a "box"
     drawn around the random data.  This box can be made up of ASCII
     characters, or it can consist of spaces and highlight/background
     colors.  Regardless of how you create the box, make sure it is
     always the same size every time the user plays the game, no
     matter what words or symbols are randomly chosen and displayed.
(25 points)


DUE Thursday, 11-5-2020
09) Write a program that has the user enter two words.  Then compare
     the words, character-by-character, and report the number of
     positions that have identical letters.  For instance, if the
     user enters "parrots" and "balloons", your program should report
     2, since the second and fifth letters are matching.  If the user
     enters "DOGS" and "soggy", your program should also report 2,
     since the second and third letters are identical (ignoring case).

     In addition to 'main', you must have a separate function for
     getting the words, another function for comparing the letters in
     the words, and yet another function for reporting the results to
     the user.  You may NOT use any global variables in your program,
     and you also may NOT use any 'return' statements in your program.
     To receive values back from the functions that get the words and
     compare the letters, you must pass data into those two functions
     by reference, instead of by value.  You may assume that the user
     will enter strings consisting of only letters.

     EXTRA CREDIT OPTION #1  In addition to displaying the number
     of matching positions, make a new function which displays a new
     "combo-word", which is made up of alternating letters from the
     two entered words.  Always start with the first letter of the
     longest entered word, unless the words are of equal length, in
     which case you should start with the first letter of the first
     entered word.  When creating the combo-word, when the shorter
     entered word runs out of letters, finish the combo-word with the
     remaining letters in the longer entered word.  For example, if
     the user enters "desk" and "computer" (in any order), your new
     function should display "cdoemspkuter".  Or, if the two entered
     words are "fooD" and "CaTs" (in that order), then the combo-word
     should be "fCoaoTDs".

     EXTRA CREDIT OPTION #2  In addition to displaying the number of
     letters that have matching positions in the two words, create a
     new function which displays the number of letters that the two
     words have in common, regardless of their positions in the words.
     For example, if the user enters "table" and "computer", your new
     function should display a 2, since both of the words share a "t"
     and an "e".  If the entered words are "ChipmunkS" and "MonKEys",
     then your function should display a 4, since, ignoring case, the
     two words share the letters "m", "n", "k", and "s".  For this new
     function, you may assume that each entered word does not have any
     duplicate letters.
(15 points)


DUE Sunday, 11-22-2020
10) Write a program that uses a loop to have the user enter a list of
     up to ten words, one per line.  The user should signal the end of the
     list by pressing the ENTER key by itself on an empty line.  Your
     program must require that the user enter at least one word (by
     continuously asking the user to enter words until at least one entry
     is made), and it should not allow the user to enter more than ten
     words (after the tenth entry it should stop asking for new input).
     Your program must eliminate leading and trailing spaces from all user
     input.

     In addition to the above requirements, your program must use a loop
     to prevent the user from entering duplicate words.  If the user
     enters a word that has already been entered, discard that entry,
     tell the user that duplicate entries are not allowed, and then have
     the user enter a new word.  Your program should not modify the case
     of the entered words, but it should ignore case when checking for
     duplicate entries.

     Finally, after the user has entered up to ten unique words, your
     program should use a loop to display the word list back to the user,
     one entry per line.  The words should be displayed back to the user
     in the same order in which they were entered.  When displaying the
     list, if it contains fewer than ten words, make sure no blank (empty)
     lines or NULL entries are displayed.

     For this program you must use a built-in C++ array of strings to
     store the words.  You are allowed to use only one array, and you may
     define it globally.  However, you may not use any other type of List
     or Collection anywhere in your program.  Also, the maximum number of
     entries allowed (10) should be stored in your program as a globally-
     defined integer constant (named using all capital letters), and with
     the exception of the line where you define the constant, the number
     10 (or 9 or 11) should not appear anywhere in your program.

     Other than the global constant and array of strings, you may not use
     any global variables for this assignment.  In addition to 'main', you
     should have a separate function that gets the words from the user,
     another function that checks for duplicate entries, and yet another
     function that displays the word list back to the user.

     EXTRA CREDIT OPTION #1
     When displaying the words back to the user, display the words
     arranged in order by length (number of characters), with the
     shortest word shown first.  If the list contains multiple words
     with the same number of characters, then that group of words
     should be displayed in ascending alphabetical order (within the
     larger list of words, which should still be sorted by length).
     This extra credit option can be completed along with, or instead
     of, the other extra credit option.  You may use additional arrays
     for this extra credit option.

     EXTRA CREDIT OPTION #2
     This option can be completed before or after, or instead of, the
     other extra credit option.  When displaying the words back to the
     user, number each word (starting with "1").  Then, after the list
     has been displayed, allow the user to change the order of the words
     in the list by swapping the positions of any two of the words.  The
     user should be able to type the numbers of two words in the list to
     indicate which words should be swapped, after which the list should
     be re-displayed in its new order (with all of the words newly
     renumbered).  The user should be allowed to continue to change the
     order of words indefinitely by swapping sets of two words, with the
     list being re-numbered and re-displayed after each swap.  There
     should also be a way for the user to quit the program at any time.
     You may use additional arrays for this extra credit option.
(20 points)


DUE Sunday, 12-13-2020
11) Write a "number guessing" game where the computer randomly generates
     a positive integer, and then the user is allowed to try to guess the
     number.  After each guess, the computer should tell the user whether
     the guess was too high, too low, or just right (the correct number).

     At the start of the program, the user should be prompted to choose the
     lower and upper boundaries (the range from which the randomly-generated
     number will be chosen), with a maximum upper boundary of one million.
     The user should also specify how many guesses are allowed (up to 20)
     before the computer reveals the chosen number (if not correctly guessed
     by the user).  Finally, after each game, the user should be given a
     chance to either quit the program or play another game using the same
     user-chosen values, but with a new computer-generated random number.

     All user-entered numbers should be positive integers.  The computer
     should make sure that the upper boundary is larger than the lower
     boundary, and that no values exceed the maximums listed above.  Invalid
     and out-of-bounds user guesses should not cause the remaining number of
     allowed guesses to decrease.  Your program should include thorough,
     user-friendly error trapping routines wherever data are entered by the
     user.  There should be no way for a user to crash your program or to
     cause it to act in an incorrect manner (e.g., by entering words or
     decimals or negative numbers or out-of-bounds values).

     When getting the initial input from the user, first ask for the lower
     boundary, then ask for the upper boundary, and then ask for the number
     of allowed guesses.  Also, make sure your program stores all of the
     data values (low bound, high bound, guesses allowed, user-made guesses,
     computer-chosen number, number of guesses used/remaining, etc.) in
     integer variables (not as strings).  Be sure to use variable names that
     are descriptive enough so that their purpose can be determined solely
     from their names, with no ambiguity.

     Make sure your program uses lots of separate functions, as appropriate,
     and do NOT use any global variables.  You may use 'return' statements
     and/or pass data to functions by value and/or reference, as you see fit.
     Also, make sure you place a multi-line comment before every function in
     your program explaining the purpose of the function.  This includes an
     even larger multi-line comment above 'main()' that explains the overall
     purpose of the program and how it works.
(35 points)