//QUESTION 3
//SECP SECTION 2
//29 NOVEMBER 2019
//MOHAMAD AMIN HAZEEQ BIN HISHAM
//000804-01-1523
//IMRAN HAKIM BIN NORASMADI
//001220-03-0223
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>

using namespace std;

void readFile(ifstream &inFile,float list[],int &num);
void computeC(float list[],float calc[],int &num);
float average(float calc[] , int &num);
char grade(float,int &num,int &ctrl_temH,int &ctrl_temM,int &ctrl_temL );
void writeFile(float calc[],float list[],int &num);
void num_of_grade(float calc[],int &num,int &ctrl_temH,int &ctrl_temM,int &ctrl_temL );
  

int main()
{
 ifstream inFile;
 
 int num=0;
 int SIZE=0;
 cout<<"Please enter the number of data that will be entered = ";
 cin>>SIZE;
 float list[SIZE];
 float calc[SIZE];
 

 int ctrl_temH=0;
 int ctrl_temM=0;
 int ctrl_temL=0;
 
readFile(inFile,list,num);
computeC(list,calc,num);
float avg=average(calc ,num);
num_of_grade(calc,num,ctrl_temH,ctrl_temM,ctrl_temL );
writeFile(calc,list,num);
	cout << "Average of the temperature : " << avg << endl;
	cout << "Number of high temperature : " << ctrl_temH << endl;
	cout << "Number of medium temperature : " << ctrl_temM << endl;
	cout << "Number of low temperature : " << ctrl_temL << endl; 




	return 0;

}
void readFile(ifstream &inFile,float list[],int &num)
{
 
 inFile.open("input3.txt");
 
 
 if(inFile.fail())
 {
 		cerr<<"Sorry, input file does not exist!"<<endl;
		cerr<<"Press any key to continue . . . "<<endl;
		exit(0);
 }
 int i=0;
 while(!inFile.eof())
 {
 		inFile>>list[i];
 		
 		num++;
 		i++;
 		
 } 
 inFile.close();
}
void computeC(float list[],float calc[],int &num)
{

	
	for(int i=0 ; i < num ; i++)
	{
		float a , b;
		
		a=list[i];
	    
		b=((static_cast<float>(5)/9)*(a-32));
		calc[i]=b;
		
	    
	}
		
}
float average(float calc[] , int &num)
{
	
	float sum = 0 , avg;
	for(int i = 0 ; i < num ; i++)
	{
		
		sum += calc[i];
	}
	
	return avg = sum/num;
}
char grade(float a,int &num,int &ctrl_temH,int &ctrl_temM,int &ctrl_temL )
{
	
		if(a>=35)
		{
			return'H';
			ctrl_temH++;
		}
		if((a<35)&&(a>=20))
		{
			return'M';
			ctrl_temM++;
		}
		if(a<20)
		{
			return'L';
			ctrl_temL++;
		}
	
}
void writeFile(float calc[],float list[],int &num)
{ 
char c;
float a;
int ctrl_temH=0, ctrl_temM=0, ctrl_temL=0;
 
	ofstream outFile("doutput.txt");
	outFile<<"C(Celcius)"<<setw(18)<<"F (Farenheit)"<<setw(15)<<"Description"<<endl;
	outFile<<"=========="<<setw(14)<<"========="<<setw(16)<<"====="<<endl;
	for(int i=0;i<num;i++)
	{
		outFile<<setw(7)<<fixed<<setprecision(2)<<calc[i];
		outFile<<setw(16)<<list[i];
		a = calc[i];
		c = grade(a,num,ctrl_temH,ctrl_temM,ctrl_temL );
		outFile << setw(16) << c << endl;
	}
	outFile.close();
}
void num_of_grade(float calc[],int &num,int &ctrl_temH,int &ctrl_temM,int &ctrl_temL )
{
		for(int i=0;i<num;i++)
	{
		float C= calc[i];
		if(C>=35)
		{
			ctrl_temH++;
		}
		if((C<35)&&(C>=20))
		{
			ctrl_temM++;
		}
		if(C<20)
		{
			ctrl_temL++;
		}
	}
}

