( Latest Revision: Wed Nov 23 15:46 PST 2016 )

SIXTH CS 1500 SOLO PROGRAM: Sum & Reverse Program


OBJECTIVE: The purpose of this programming assignment is to get practice using files, arrays, and loops.


PREREQUISITES: You absolutely must be familiar with the content of chapters six (streams) and seven (arrays) of our text before you start on this assignment!


ASSIGNMENT SYNOPSIS:

Write a program that reads seventeen numbers from an input file into an array of doubles, computes the sum of the values in the array, and writes first the sum and then the list, in reverse order, to both the screen and an output file.


DETAILS:

To get a clearer idea of what the program is supposed to do, have a look at the sample runs.

Notice that in the first sample run, when the program outputs the elements of the list, each is printed in a six-character-wide field, right justified. If you utilize output statements like this
      cout.width(6) ;
      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:
OUTPUT:
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.

No Global Variables: You are not allowed to use any global variables.

On the other hand, if you learn about global constants and want to try some, this might be a good program for a few of them - such as the number of items in the file (17), the field width you are using for formatting numbers (6), and the length of the arrays of characters you are using to represent filenames (for example, that might be 256).

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 an array of doubles appropriately. Therefore 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. Do not 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.

Of course, you will actually need two such declarations, one for the name of the input file, and one for the name of the output file.

The kind of 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 may remember from class discussions and/or readings, the extraction operator [ >> ] will 'automatically' load a string into such an array of char for you, including the null character at the end. That is something special the extraction operator can do with arrays of char but not with other arrays.

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 whatever the file is whose name is contained in the variable fileName.

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: Adder/Reverser Program */

  /*

  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, it will be OK to do just two tests. Do one where you give the program the name of a "good" input file. Be sure to perform the test the same way as in the sample run:
  1. Start the script,
  2. Cat the input file,
  3. Run the program, and
  4. 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 When you do your testing, verify that all the output of the program is correct. It's not a test if you don't check the results.


WHAT TO TURN IN:

You will be sending me two e-mail messages. Please follow these rules: Here is the list of things you have to turn in: 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.)