I need someone to help me with the analysis assignment below: Thank you Perform
ID: 3860373 • Letter: I
Question
I need someone to help me with the analysis assignment below: Thank you
Perform a detailed analysis of the differences and similarities between M1 and M2 below.
M1
#include<iostream>
#include<iomanip>
#include<conio.h>
#include <string>
int numberStudents = 4;
using namespace std;
//functions
inline void Header(){cout << " ...programmed by Hugh...... ";};
int getData(char grade,int& num, string *name, double *totalGPA);
void calGPA(char& grade, float& gpa);
void output(double *totalGPA, string *name);
void main ()
{
string *name;
name = new string[4];
double *totalGPA;
totalGPA = new double[5];
*name = "Freddie"; name++;
*name = "Jane"; name++;
*name = "Jonathan"; name++;
*name = "Mary";
name = name - 3;
char grade = ' ';
int num = 0;
Header();
grade = getData(grade, num, name, totalGPA);
output(totalGPA, name);
delete [] name; //Can't forget to delete the dynamic memory...
delete [] totalGPA; //Can't forget to delete the dynamic memory...
} // end main
int getData(char grade, int& num, string *name, double *totalGPA)
{
float gpa = 0;
if (num == (numberStudents))
return 1;
else
{
cout<<" Enter "<<*name<<"'s Grades"<<endl;
calGPA(grade, gpa);
*totalGPA=gpa;
system("cls");
num++;
name++;
totalGPA++;
return getData(grade, num, name, totalGPA);
}
}// end getData
void calGPA(char& grade, float& gpa)
{
for (int y=1; y<6; y++)
{
cout<<" Grade # "<<y<<"'s Letter Grade: ";
cin>>grade;
switch(grade)
{
case 'A': case 'a': gpa=gpa+4;
break;
case 'B': case 'b': gpa=gpa+3;
break;
case 'C': case 'c': gpa=gpa+2;
break;
case 'D': case 'd': gpa=gpa+1;
break;
case 'F': case 'f': gpa=gpa+0;
break;
default: cout<<" A Valid Letter Grade is A, B, C, D, or F "<<endl;
y--;
}//end switch
} //end for
}// end calGPA
void output(double *totalGPA, string *name)
{
cout<<fixed<<showpoint<<setprecision(3);
cout<<setw(30)<<left<<" STUDENT"<<right<<"GPA "<<endl;
for(int x=0; x<numberStudents; x++)
{
cout<<" "<<setw(27)<<left<<*name<<right<<*totalGPA/5<<endl;
totalGPA++;
name++;
}
cout<<" press anyKey to continue ..."<<flush;
_getch();
}//end output
M2
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
//function prototypes
//recursive function to get the grades
float readGradRecur(int);
//function to output results
void displayGPA(const char *[], float[]);
//inline functions
//to calculate the GPA
inline float fCalculateGPA(float totGrade) {return totGrade / 5.0;};
//complete this function by your name
inline void printCredit() {cout << "Programmed by Me :) " << flush; };
//the main
int main()
{
//student array
const char *students[4] = {"Freddie", "Jane", "Jonathan", "Mary"};
//declare the grade array
float totalGrads [4] = {0.0, 0.0, 0.0, 0.0};
int itr;
//print the program header
printCredit();
//the loop to fill the GradeTotals
for (int itr1 = 0; itr1 < 4; itr1++)
{
cout << students[itr1] << " " << flush;
itr = 0;
totalGrads[itr1] = readGradRecur(itr++);
cout << "*****" << totalGrads[itr1]<< endl << endl;
}
displayGPA(students, totalGrads);
//for visual studio console freze
system("pause");
return 0;
}//end main
//recursive function to get the grades
float readGradRecur(int inpGradeNum)
{
char inpGrade;
//to take 5 grades
if (inpGradeNum < 5)
{
cout << "Please enter grade for subject " << (inpGradeNum + 1) << ": " << flush;
cin>>inpGrade;
//to add the grades
switch (inpGrade)
{
case 'A':
case 'a':
return readGradRecur(inpGradeNum + 1) + 4.0;
break;
//if grade is B
case 'B':
case 'b':
return readGradRecur(inpGradeNum + 1) + 3.0;
break;
//if grade is c
case 'C':
case 'c':
return readGradRecur(inpGradeNum + 1) + 2.0;
break;
//if gade is d
case 'D':
case 'd':
return readGradRecur(inpGradeNum + 1) + 1.0;
break;
//if gade is f
case 'F':
case 'f':
return readGradRecur(inpGradeNum + 1) + 0.0;
break;
//if invalid grade
default:
//print the error message
cout << "Error !!!Grade should be A, B, C, D or F." << " " << flush;
return readGradRecur(inpGradeNum);
}
}
else
{
return 0.0;
}
}
//function to output the results
void displayGPA(const char *studentName[], float gpaTot[])
{
cout << " The GPA of the students!!! " <<
setw(12) << setiosflags(ios::fixed | ios::left) << "Student"
<< "GPA " << "-------- ----- " << flush;
for (int vi = 0; vi < 4; vi++)
{
cout << setw(12) << setiosflags(ios::fixed | ios::left) << studentName[vi] <<
setiosflags(ios::fixed | ios::showpoint) <<
setprecision (3) << fCalculateGPA(gpaTot[vi]) << " " << flush;
}
}
Explanation / Answer
Difference Between M1 and M2:
Point 1)
M1: To print the output of grades arguments are passed by Pointers
M2: To print the output of grades arguments are passed by Arrays of data elements
Point 2)
M1: To Calculated the grades of a student directly inside of calGPA() function
M2: Where as To Calculated the grades of student passed arguments to another function readGradRecur()
Point 3)
M1: To read the grades of a students used the normal function call getData()
M2: To read the grades of students used the recursive function call readGradRecur()
Point 4)
M1: Used the dynamic data members for student data records
M2: Where as normal arrays are used here to store the student data records
Point 5)
M1: At end of the main function deleted the dynamic data members
M2: Where as arrays are not made as a NULL at the end of main function.
Point 6)
M1: Header is used to start the print output with help of function call
M2: Where as there is normal cout used to print the header