(Latest Revision: Wed Apr 29, 2015 )
 SIXTH CS 1500 SOLO PROGRAM: Median Calculation Program
OBJECTIVE: 
The purpose of this programming assignment is to get practice using files,
arrays, and loops. 
ASSIGNMENT SYNOPSIS:
Write a program that reads a sorted set of numbers from an input file into an
array, finds the median value in the array, and writes a report to both the 
screen and an output file.  
The median is the item M that has this property: 
M is greater-than-or-equal to half the items in the list, and also M is 
less-than-or-equal to half the items in the list. (In other words,
M is the middle value of the list.) 
DETAILS:
To get a clear idea of what the program is supposed to do, 
have a look at 
the sample runs.  
Notice that in the sample runs, when the program outputs the elements 
of the list, each is printed in a five-character-wide field, right justified.
If you utilize output statements like this
      cout.width(5) ;
      cout << numberList[j] ;
you will be able to achieve the same kind of formatting with your program's output.
The width function utilized above is discussed on page 328 of your text.  Make
sure to familiarize yourself with that material.
INPUT:
You must write the program with certain facts, assumptions, and
preconditions in mind:
-  The program must prompt the user for the name of the input file
     and the name of the output file.  The program must read the data 
     from the file named by the user, and write the output to 
     both the screen and the output file.
 -  The input file must contain a set of 31 integers, in ascending
     order.  Naturally, the 16th item in the list is the median element.
 -  The assignment directory contains three sample files that could be the
     input files for the program.  The names of the sample files 
     are 
     data01.txt,
     data02.txt,
     and 
     data03.txt.
 -  Your program must correctly process the contents of the input file,
     whatever particular numbers they are. 
 -  After you turn in your program for grading, I will test it using some
     input files that I have never shown to you.
     If your program works incorrectly on any of my versions of
     the input file, you will lose significant credit.
 
THE DESIGN OF THE PROGRAM: 
The program must have at least two functions (in addition to 
the main() function). 
At least two of the additional functions must have 
one or more parameters. 
You are not allowed to use any global variables.  
I expect you to employ good principles of top-down design 
when you develop the program. 
I want you to have the experience of writing a program that reads from a file,
writes to a file, and uses arrays appropriately. Therefore 
-  You must write the program so that it reads the list of numbers
into an array variable, using a loop to do the reading.
 -  You must not use large numbers of individual variables to avoid using 
an array.
 - You must use one or more loops (I recommend for-loops) to read in 
and write out the various groups of integers.
 - You must not try to avoid coding loops by utilizing groups of 15, 16, 
or 31 individual input or output statements.
 
You should use this kind of declaration in your program: 
char someFileName[256] ;
to give your program a variable needed for accepting a filename from the user.
Obviously, you are not to use a declaration exactly 
like the one above, because you must think about what the actual 
names for such variables ought to be, and you must choose 
good mnemonic names.
The array of characters discussed above 
is nice and long - 256 slots - so it has more than
enough capacity for most filenames.  256 slots is enough for 255 characters
in a string, plus the null character ('\0') that is used to mark the end
of the string. (As you know from class discussions, the extraction operator [ >> ] will automatically load a string into such an array for you, including the null
character at the end.)
You can use a command like 
ifstream fin(filename) ;
OR
these commands
ifstream fin ;
fin.open(fileName);
to declare an ifstream named fin, and attach it to 
the file whose name is stored in the fileName string variable (array of char). 
You can declare an ofstream variable and attach it to a file in a
similar manner.
Note: Come to class to get more discussion of how to design the code.
FORM AND FORMATTING REQUIREMENTS: 
At the beginning of your program file put a header comment like
this: 
  /* PROGRAM: Median Calculation */
  /*
  Name:          Gordon Goodguy
  User Name:     goodge
  Course:        CS 1500, Computer Programming I
  Instructor:    John Sarraille
  Date:          January 01, 1970
  */
Of course, in place of "Gordon Goodguy," you must put your own full name.  In
place of "goodge" put your user (login) name.  In place of the Unix epoch,
"January 01, 1970," put the date that you 
finished the program.
Note that the comment delimiters /* and */ are important.  They need to be
placed correctly or you will get compiler errors. 
TESTING:  
When you make your test script, include the two tests that are in
the sample runs.
Be sure to perform the tests the same way as in the sample runs.
This is what you do for each individual test: first, cat the input file, 
then run the program, then cat the output file.
Also perform a test where the input file does not exist. 
(Of course, in the case of that test you do not cat the input
or the output file as part of the test.) 
When the input file does not exist, the result of the test should be that the
program writes a message saying there was a failure to open the file, 
and then the program stops immediately.
To make it easier for me to check the work in your script, order your
tests so that 
-  you first perform the tests in the sample runs, in the same
     order they appear in 
     the sample runs file, and then
 -  lastly you perform the additional test.
 
When you do your testing, verify that all the output of the program is
correct. 
WHAT TO TURN IN:
You will be sending me two e-mail messages.  Please follow these rules:
-  Always send me e-mail as plain text in the main message body.
     Never send me attachments.
 -  Always use the exact subject line I specify for each
     message.  (I often get hundreds of e-mail messages in a week.  The
     subject line allows me to find and sort messages.)  You will lose a
     significant number of points on the assignment if you use the wrong
     subject line.
 -  Be very careful when you send the e-mail. You may use the
     instructions in your
     
     Hello World! lab exercise
     for guidance.  Of course, you will need to make the obvious changes to
     those directions -- you have to use the correct subject line and
     filename.
 -  Always send yourself a copy of each e-mail message you send to me,
      check immediately  to see if you receive the message intact, and
     check within a few minutes to see if you have received e-mail notifying
     you about an undeliverable message.  You are
     responsible  for sending e-mail correctly.
 
Here is the list of things you have to turn in:
-  At the start of class on the 
     
     due date 
      
     place the following item on the "counter" in front of me:
     
     
     -  a hardcopy (printed listing) of your program (the C++
	  source code). Make sure all the code is properly
	  formatted and that it all shows on the paper.  
      
 -  Before midnight on the the  due
     date  send me the following by e-mail:
     
     
     -  A copy of the source code (C++ code) with subject line: 
	   CS1500Solo6Source 
      -  a (filtered) script, with subject line  
          CS1500Solo6Script  
	  showing the results of doing all the tests described above in the
	  section entitled "TESTING"
	  
      
 
Note that there are no spaces in the subject lines given.  It is important
that you do not insert any spaces.  My e-mail address is:   
john@ishi.csustan.edu  
WHEN IS THIS ASSIGNMENT DUE?
Look for the due date in
 
the class schedule.
(It's at the top level of the class directory.)