In: Computer Science
Write a program that processes numbers, corresponding to student records read in from a file, and writes the required results to an output file (see main ( )). Your program should define the following functions:
double read_double (FILE *infile) — Reads one double precision number from the input file. Note: You may assume that the file only contains real numbers. |
|
int read_integer (FILE *infile) - Reads one integer number from the input file. |
double calculate_sum (double number1, double number2, double number3, double number4, double number5) - Finds the sum of number1, number2, number3, number4, and number5 and returns the result. |
|
double calculate_mean (double sum, int number) - Determines the mean through the calculation sum / number and returns the result. You need to check to make sure that number is not 0. If it is 0 the function returns -1.0 (we will assume that we are calculating the mean of positive numbers), otherwise it returns the mean. |
|
double calculate_deviation (double number, double mean) - Determines the deviation of number from the mean and returns the result. The deviation may be calculated as number - mean. |
|
double calculate_variance (double deviation1, double deviation2, double deviation3, double deviation4, double deviation5, int number) - Determines the variance through the calculation: ((deviation1)^2 + (deviation2)^2 + (deviation3)^2 + (deviation4)^2 + (deviation5)^2) / number and returns the result. Hint: you may call your calculate_mean ( ) function to determine the result! |
|
double calculate_standard_deviation (double variance) - Calculates the standard deviation as sqrt (variance) and returns the result. Recall that you may use the sqrt ( ) function that is found in math.h. |
double find_max (double number1, double number2, double number3, double number4, double number5) — Determines the maximum number out of the five input parameters passed into the function, returning the max. |
|
double find_min (double number1, double number2, double number3, double number4, double number5) — Determines the minimum number out of the five input parameters passed into the function, returning the min. |
void print_double (FILE *outfile, double number) — Prints a double precision number (to the hundredths place) to an output file. |
A main ( ) function that does the following (this is what the program does!!!): Opens an input file "input.dat" for reading; Opens an output file "output.dat" for writing; Reads five records from the input file (input.dat); You will need to use a combination of read_double ( ) and read_integer ( ) function calls here! Calculates the sum of the GPAs; Calculates the sum of the class standings; Calculates the sum of the ages; Calculates the mean of the GPAs, writing the result to the output file (output.dat); Calculates the mean of the class standings, writing the result to the output file (output.dat); Calculates the mean of the ages, writing the result to the output file (output.dat); Calculates the deviation of each GPA from the mean (Hint: need to call calculate_deviation ( ) 5 times) Calculates the variance of the GPAs Calculates the standard deviation of the GPAs, writing the result to the output file (output.dat); Determines the min of the GPAs, writing the result to the output file (output.dat); Determines the max of the GPAs, writing the result to the output file (output.dat); Closes the input and output files (i.e. input.dat and output.dat) |
Expected Input File Format (real numbers only):
For this assignment you will be required to read five records from the "input.dat" file. Each record will have the following form:
Student ID# (an 8 digit integer number)
GPA (a floating-point value to the hundredths place)
Class Standing (1 - 4, where 1 is a freshmen, 2 is a sophomore, 3 is a junior, and 4 is a senior --> all integers)
Age (a floating-point value)
Example data for 1 student record in the file could be as follows:
12345678
3.78
3
20.5
IV. Expected Results:
The following sample session demonstrates how your program should work.
Assuming input.dat stores the following records:
12345678
3.78
3
20.5
87654321
2.65
2
19.25
08651234
3.10
1
18.0
11112222
3.95
4
22.5
22223234
2.45
3
19.3333
Your program should write the following to output.dat: NOTE: you only need to output the numbers, the text is for demonstration purposes only.
3.19 -- GPA Mean
2.60 -- Class Standing Mean
19.92 -- Age Mean
0.60 -- GPA Standard Deviation
2.45 -- GPA Min
3.95 -- GPA Max
I have coded the requirement. Just one thing... the standard deviation function code, which you have provided, is wrong. It should be
main.c
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
double read_double (FILE *infile) {
double d;
fscanf(infile,"%lf",&d);
return d;
}
int read_integer (FILE *infile) {
int d;
fscanf(infile,"%d",&d);
return d;
}
double calculate_sum (double number1, double number2, double
number3, double number4, double number5) {
return number1 + number2 + number3
+ number4 + number5;
}
double calculate_mean (double sum, int number) {
if(number == 1) {
return -1;
}
return sum/number;
}
double calculate_deviation (double number, double mean) {
return number - mean;
}
double calculate_variance (double deviation1, double deviation2,
double deviation3, double deviation4, double deviation5, int
number) {
return calculate_mean( pow(deviation1, 2) +
pow(deviation2, 2) + pow(deviation3, 2) + pow(deviation4, 2) +
pow(deviation5, 2), number);
}
double calculate_standard_deviation (double number1, double
number2, double number3, double number4, double number5, double
mean, int number) {
return sqrt((pow(number1 - mean, 2) + pow(number2 -
mean, 2) + pow(number3 - mean, 2) + pow(number4 - mean, 2) +
pow(number5 - mean, 2))/ number);
}
double find_max (double number1, double number2, double number3,
double number4, double number5) {
double first = (number1 > number2)? number1:
number2;
double second = (number3 > number4)? number3:
number4;
double third = (first > second)? first:
second;
return (third > number5)? third: number5;
}
double find_min (double number1, double number2, double number3,
double number4, double number5) {
double first = (number1 < number2)? number1:
number2;
double second = (number3 < number4)? number3:
number4;
double third = (first < second)? first:
second;
return (third < number5)? third: number5;
}
void print_double (FILE *outfile, double number) {
fprintf(outfile, "%.2f", number);
}
int main()
{
FILE *inptr;
FILE *outptr;
inptr =
fopen("C:\\Users\\ykgupta\\Documents\\df\\SD\\input.dat","r");
outptr =
fopen("C:\\Users\\ykgupta\\Documents\\df\\SD\\output.dat","w");
double gpa[5], age[5];
int standing[5];
// in case if there is some issue in opening files
if((inptr == NULL) || (outptr == NULL))
{
printf("Error!");
exit(1);
}
// reading 5 records
int i=0;
for(; i< 5; i++) {
read_integer(inptr);
gpa[i] = read_double(inptr);
standing[i] = read_integer(inptr);
age[i] = read_double(inptr);
}
// calulation sum of gpas, standings, ages
double gpaSum = calculate_sum(gpa[0], gpa[1], gpa[2], gpa[3],
gpa[4]);
double standingSum = calculate_sum(standing[0], standing[1],
standing[2], standing[3], standing[4]);
double ageSum = calculate_sum(age[0], age[1], age[2], age[3],
age[4]);
// calulation mean of gpas, standings, ages
double gpaMean = calculate_mean(gpaSum, 5);
double standingMean = calculate_mean(standingSum, 5);
double ageMean = calculate_mean(ageSum, 5);
// Prinitng means to output file
fprintf(outptr,"%.2f\n", gpaMean);
fprintf(outptr,"%.2f\n", standingMean);
fprintf(outptr,"%.2f\n", ageMean);
// calculating deviations
for(int i=0; i<5; i++) {
calculate_deviation(gpa[i], gpaMean);
}
// calculating variances
double variance = calculate_variance(gpa[0], gpa[1], gpa[2],
gpa[3], gpa[4], 5);
// calculating standard deviations, max and min
double sd = calculate_standard_deviation(gpa[0], gpa[1], gpa[2],
gpa[3], gpa[4], gpaMean, 5);
double minGpa = find_min(gpa[0], gpa[1], gpa[2], gpa[3],
gpa[4]);
double maxGpa = find_max(gpa[0], gpa[1], gpa[2], gpa[3],
gpa[4]);
// printing to output file
fprintf(outptr,"%.2f\n", sd);
fprintf(outptr,"%.2f\n", minGpa);
fprintf(outptr,"%.2f\n", maxGpa);
// giving successful completion information
printf("Program completed.");
fclose(inptr);
fclose(outptr);
return 0;
}
/****** Please change the locations of your input and output files
************/
/**** Sample input: input.dat ********/
12345678
3.78
3
20.5
87654321
2.65
2
19.25
08651234
3.10
1
18.0
11112222
3.95
4
22.5
22223234
2.45
3
19.3333
/**** Sample Output: output.dat **********/
3.19
2.60
19.92
0.60
2.45
3.95