// Kalaivani A/P Subramaniam A20EC0056
// Tan Ming Hui A20EC0155
// Date : 2021/01/23

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;

//function prototype
void readFile (char*,double[] ,int);
void computeC(double[], double[], int);
double average(double[], int);
char grade(double);
void writeFile(double[], double[], int);
void outputsummary (double ,int ,int ,int );

void readFile(char* inputname, double tempF[], int *datanum) 
{
	ifstream inp;
	inp.open(inputname); //open input file
	int i=0;
	double temperature;
	inp >> temperature;

	if (!inp.is_open())
	{
		cout<< "Sorry, the file is not exist..."<<endl;
		cout<< "Terminating..."<<endl;
		exit (1);
	}
	
	while (!inp.eof()) 
	{
		tempF[i] = temperature;
		i++;
		inp >> temperature;
	}
	
	*datanum = i;
	inp.close(); //close the input file
}

void computeC (double tempF[],double tempC[],int datanum )
{	
	for(int i=0; i<datanum; i++)
	{
		tempC[i] = (5/9.0) * (tempF[i]-32);
	}
}

double average(double tempC[], int datanum)
{
	double total = 0, avrg;
	
	for(int i=0; i<datanum; i++) 
	{
		total =total+ tempC[i];
	}
	avrg = total/datanum;
	return avrg;
}

char grade(double descrip) 
{
	char message;
	if(descrip>=35) 
		message ='H';
	else if((descrip>=20) && (descrip<35)) 
		message ='M';
	else 
		message ='L';
	return message;
}

void writeFile(double tempF[],double tempC[],int datanum) 
{
	ofstream output;
	output.open("outputdataF.txt"); //open output file

	output<<left<<setw(20)<< "C (Celcius)";
	output<<left<<setw(20)<< "F (Fahrenheit)";
	output<<left<<setw(20)<< "Description" << endl;
	output<<left<<setw(20)<< "===============";
	output<<left<<setw(20)<< "===============";
	output<<left<<setw(20)<< "===============" << endl;
	
	for(int i=0; i<datanum; i++) 
	{
		output<< fixed << setprecision(2);
		output<<left<<setw(20)<< tempC[i] ;
		output<<left<<setw(20)<< tempF[i] ;
	    output<<left<<setw(20)<< grade(tempC[i]) << endl;
	}
	output.close();	//close output file
}

void outputsummary (double Average,int h,int m,int L)
{
	cout << "Average of the temperature: " << fixed << setprecision(2) << Average << endl;
	cout << "Number of high temperature: " << h << endl;
	cout << "Number of medium temperature: " << m << endl;
	cout << "Number of low temperature: " << L << endl;
}

int main()
{
	char inputname[15]="dataF.txt";
	double tempF[366];
	double tempC[366];
	double Average;
	int i; // for counter loop
	int h=0,m=0,L=0;	 // for counting the number of high,medium, low
	int datanum;		// hold the number of data 
	readFile (inputname, tempF ,&datanum);
	computeC(tempF, tempC, datanum);
	Average=average(tempC, datanum);
	writeFile(tempF, tempC, datanum);
	
	for (int i=0;i<datanum;i++)
	{
		if (tempC[i]>=35)
			h=h+1;
		else if ((tempC[i]>=20)&&(tempC[i]<35))
			m=m+1;
		else 
			L=L+1;
	}
	outputsummary(Average,h,m,L);
}
