created 03/13/99


Programming Exercise -- File Input

Program: Write a program that computes the average change of a value for each of several groups of data. Input is from a file of data.

Size: about 80 lines, including blank lines and comments

Time to Complete: about half of an afternoon

Problem: Say that your are conducting an experiment to determine the effect of a high fiber diet on cholesterol levels in humans. You have several groups of human subjects. At the beginning of the experiment the cholesterol level of each subject in each group is measured.

Now the experiment runs for one month. Each group consumes a different amount of fiber each day. At the end of the month you want to see the change in each group's cholesterol level.

The data for the experiment is in a text file like the following. Each line of the file contains a single integer (in character form).

number of groups
number of subjects in group 1
group1 subject1 starting cholesterol
group1 subject1 ending cholesterol
group1 subject2 starting cholesterol
group1 subject2 ending cholesterol
 . . . . .
group1 last subject starting cholesterol
group1 last subject ending cholesterol
number of subjects in group 2
group2 subject1 starting cholesterol
group2 subject1 ending cholesterol
 . . . . .
group2 last subject starting cholesterol
group2 last subject ending cholesterol
number of subjects in group 3
group3 subject1 starting cholesterol
group3 subject1 ending cholesterol
 . . . . .
group3 last subject starting cholesterol
group3 last subject ending cholesterol
. . . .
number of subjects in the last group
last group subject1 starting cholesterol
last group subject1 ending cholesterol
last group subject2 starting cholesterol
last group subject2 ending cholesterol
 . . . . .
last group last subject starting cholesterol
last group last subject ending cholesterol

For example, the following data file is for three groups. The first group has 2 subjects in it, the second group has 3 subjects in it, and the last group has 1 subject:

3
2
200
190
212
210
3
240
220
204
208
256
230
1
202
185

Assume that the data is correct (that the counts are correct and all the data is sensible and comes in complete pairs.) Write the program so that there is any number of groups (including zero) and so that a group can have any number of subjects in it (including zero.)

You program should do the following: for each group compute and print out the average of the starting cholesterol values, the average of the ending cholesterol values, and the change in the averages. For example, with the above data your program should print out something like this:

Group 1  2 subjects
  average starting cholesterol:  206
  average final    cholesterol:  200
  change in        cholesterol:  -6
Group 2  3 subjects
  average starting cholesterol:  233
  average final    cholesterol:  219
  change in        cholesterol:  -14
Group 3  1 subjects
  average starting cholesterol:  202
  average final    cholesterol:  185
  change in        cholesterol:  -17
Done with processing.

Notes: Use integer arithmetic throughout. If a group has zero subjects in it, report that fact but don't compute the averages (nor print them out.) It would be very helpful for you to plan this program in advance. The main organization of the program will be a counting loop inside of a counting loop.

Use some well though out comments in your program to show how it is organized. Be sure that your indenting also shows how the program is organized.

Here is another sample input file and its output:

4        
5
230
210
230
215
230
220
230
225
230
230
3
210
200
210
200
210
200
0
2
200
190
210
200
Group 1  5 subjects
  average starting cholesterol:  230
  average final    cholesterol:  220
  change in        cholesterol:  -10
Group 2  3 subjects
  average starting cholesterol:  210
  average final    cholesterol:  200
  change in        cholesterol:  -10
Group 3  0 subjects
Group 4  2 subjects
  average starting cholesterol:  205
  average final    cholesterol:  195
  change in        cholesterol:  -10
Done with processing.

 


Click here to go back to the main menu.