I am needing this program without any global variables . How can I get it would
ID: 3627502 • Letter: I
Question
I am needing this program without any global variables. How can I get it would the global variables an work exactly the same as it does now?
PLEASE READ CAREFULLY!
#include <iostream>
#include <fstream>
using namespace std;
//Variables
int countMale, countFemale;
float sumMaleGPA, sumFemaleGPA;
float avgMaleGPA, avgFemaleGPA;
//Open input and output files
void openFiles (ifstream &inFile, ofstream &outFile)
{
//Get information from input file
inFile.open ("Ch7_Ex6Data.txt");
if (inFile.fail())
{
cout <<"Can not find the file input.txt";
cout <<"Exiting the program...";
system ("pause");
exit(0);
}
//Opens the output file
outFile.open ("Ch7_Ex6out.txt");
//Set precision
outFile.setf(ios::fixed,ios::floatfield);
outFile.precision (2);
//Output to console
cout.setf(ios::fixed,ios::floatfield);
cout.precision(2);
}
void initialize()//Initializing Variables
{
countMale=0;
countFemale=0;
sumMaleGPA=0.0;
sumFemaleGPA=0.0;
avgMaleGPA=0.0;
avgFemaleGPA=0.0;
}
//Sum of the student grades
void sumGrades (ifstream &inFile)
{
char gender;
double gpa;
while (!inFile.eof())
{
inFile>>gender;
inFile>>gpa;
if(gender=='M'||gender=='m')
{
sumMaleGPA += gpa;
countMale++;
}
else
{
//Initialize Variables
sumFemaleGPA += gpa;
countFemale++;
}
}
//Close input file
inFile.close();
}
//Find average student grades
void averageGrade()
{
avgMaleGPA=sumMaleGPA/countMale;
avgFemaleGPA=sumFemaleGPA/countFemale;
}
//Print
void printResults(ofstream &outFile)
{
ifstream infile;
infile.open("Ch7_Ex6Data.txt");
double N;
char ch;
outFile<<"Processing grades."<<endl;
while(!infile.eof())
{
infile>>ch>>N;
outFile<<ch<<" "<<N<<endl;
}
outFile<<"Sum female GPA = "<<sumFemaleGPA<<endl;
cout<<"Sum female GPA = "<<sumFemaleGPA<<endl;
outFile<<"Sum male GPA = "<<sumMaleGPA<<endl;
cout<<"Sum male GPA = "<<sumMaleGPA<<endl;
outFile<<"Female count = "<<countFemale<<endl;
cout<<"Female count = "<<countFemale<<endl;
outFile<<"Male count = "<<countMale<<endl;
cout<<"Male count = "<<countMale<<endl;
outFile<<"Average female GPA = "<<avgFemaleGPA<<endl;
cout<<"Average female GPA = "<<avgFemaleGPA<<endl;
outFile<<"Average male GPA = "<<avgMaleGPA<<endl<<endl;
cout<<"Average male GPA = "<<avgMaleGPA<<endl<<endl;
//Close output file
outFile.close ();
}
int main()
{
//input file
ifstream inFile;
//output file
ofstream outFile;
//Calls
openFiles(inFile,outFile);
initialize();
sumGrades(inFile);
averageGrade();
printResults(outFile);
system ("pause");
return 0;
}
Explanation / Answer
/* Hi, here is the same exact program without global variables. Just use a pass by reference just like how you passed 'inFile' and 'outFile' variables to other functions. This eliminates global variables. -B */ #include #include using namespace std; //Open input and output files void openFiles(ifstream &inFile, ofstream &outFile) { //Get information from input file inFile.open("Ch7_Ex6Data.txt"); if (inFile.fail()) { cout gender; inFile >> gpa; if (gender == 'M' || gender == 'm') { sumMaleGPA += gpa; countMale++; } else { //Initialize Variables sumFemaleGPA += gpa; countFemale++; } } //Close input file inFile.close(); } //Find average student grades void averageGrade(int &countMale, int &countFemale, float &sumMaleGPA, float &sumFemaleGPA, float &avgMaleGPA, float &avgFemaleGPA) { avgMaleGPA = sumMaleGPA / countMale; avgFemaleGPA = sumFemaleGPA / countFemale; } //Print void printResults(ofstream &outFile, int &countMale, int &countFemale, float &sumMaleGPA, float &sumFemaleGPA, float &avgMaleGPA, float &avgFemaleGPA) { ifstream infile; infile.open("Ch7_Ex6Data.txt"); double N; char ch; outFile > N; outFileRelated Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.