#include <iostream>
#include <fstream>
#include <cstdlib>
#include <iomanip>

using namespace std;

void computeC ( float Fahrenheit[] , float valuesC[] , int dataRead )
{
	int i;
	for ( i = 0 ; i < dataRead ; i++ )
	{
	valuesC[i] =  5.0 / 9.0  * ( Fahrenheit[i] - 32.0 );
	}
	
}

void readFile ( char DataFhr3[15] , float Fahrenheit[150] , int &dataRead )
{
	ifstream inp;
	inp.open( DataFhr3) ;
	
	if (!inp.is_open())
	{	
	cout << "Sorry, input file does not exist! " << endl;
	exit(0) ;
	}
	while(inp>>Fahrenheit[dataRead])
	{
		dataRead++;
	}	
	inp.close();
}



float average ( float valuesC[] , int dataRead )
{
	float totalC = 0.0;
	for ( int i = 0 ; i < dataRead ; i++ )
	{
		totalC += valuesC[i];		
	}

	return totalC / dataRead;
}

char grade ( float valuesC )
{
	if ( valuesC >= 35 )
	return 'H';
	
	else if ( valuesC >= 20 )
	return 'M';
	
	else 
	return 'L';
		
}

void writeFile ( float Fahrenheit[] , float valuesC[] , int dataRead )
{
	ofstream out("OutputDetail.txt");
	out<<fixed<<setprecision(2);
	out << "C (Celcius)" << setw(15) << "F (Fahrenheit)" << setw(15) << "Description" << endl;
	out << "==========" << setw(15) << "==========" << setw(15) << "==========" << endl;
	for ( int i = 0 ; i < dataRead ; i++ ) 
	{
		out << left<<setw(17)<<valuesC[i] << setw(18) << Fahrenheit[i] << setw(15) << grade(valuesC[i]) << endl;	
	}
	out.close();
}
 

int main ()
{
	float Fahrenheit[150],valuesC [150];
	int dataRead = 0;
	
	readFile("DataFhr3.txt" , Fahrenheit , dataRead );
	computeC(Fahrenheit,valuesC,dataRead);
	writeFile ( Fahrenheit , valuesC , dataRead );
	cout<<fixed<<setprecision(1);
	cout << "Average of the temperature: " << average( valuesC , dataRead ) << endl;
	int gradeH = 0 , gradeM = 0 , gradeL = 0;
	for ( int j = 0 ; j < dataRead ; j++ ){
	
		char Grade=grade(valuesC[j]);
		if(Grade=='H')
		gradeH++;
		
		if(Grade=='M')
		gradeM++;
		
		if(Grade=='L')
		gradeL++;
		
	}
	cout << "Number of high temperature: " << gradeH << endl;
	cout << "Number of medium temperature: " << gradeM << endl;
	cout << "Number of low temperature: " << gradeL << endl;
return 0;	
}
