Write a program that processes numbers, corresponding to student records read in
ID: 3749219 • Letter: W
Question
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:
(5 pts) 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.
(5 pts) int read_integer (FILE *infile) - Reads one integer number from the input file.
(5 pts) 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.
(5 pts) 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.
(5 pts) 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.
(10 pts) 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!
(5 pts) 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.
(10 pts) 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.
(10 pts) 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.
(5 pts) void print_double (FILE *outfile, double number) — Prints a double precision number (to the hundredths place) to an output file.
(20 pts) 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
(5 pts) 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.
(5 pts) int read_integer (FILE *infile) - Reads one integer number from the input file.
Explanation / Answer
ANSWER:
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 ", gpaMean);
fprintf(outptr,"%.2f ", standingMean);
fprintf(outptr,"%.2f ", 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 ", sd);
fprintf(outptr,"%.2f ", minGpa);
fprintf(outptr,"%.2f ", 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
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.