Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote