#include <iostream>
#include <fstream>
#include <iomanip>
#define MAX 999
using namespace std;

void readFile (float data[] , int &num)
{
	ifstream inp("inputQ3.txt");
	if (!inp)
	{
		cout << "Sorry file cannot be read!" << endl;
		exit(0);
	}

	while(inp>>data[num])
	{
		num++;
	}
	inp.close();
}

void computeC (float data[] , float result[] , int num)
{
	for( int i=0;i<num;i++)
	{
		result[i]=5.0/9.0*(data[i]-32.0);
	}
}

float average (float data[] , int num)
{
	float avg, total=0.0;
	
	for (int i=0 ; i<num ; i++)
	{
		total += data[i];
}
	avg = total/num;
	
	return avg;
}

char grade (float data)
{
	
		if (data >= 35)
			return 'H';
		
		else if (data >= 20)
			return 'M';
			
		else if (data < 20)
			return 'L';
}

int getHigh(float result[], int num, int &numH)
{
	for (int i=0 ; i<num ; i++)
	{
		if (result[i] >= 35)
			numH++ ;
	}
	return numH;
}

int getMedium(float result[], int num, int &numM)
{
	for (int i=0 ; i<num ; i++)
	{
		if (result[i] >= 20 && result[i] < 35)
			numM++ ;
	}
	return numM;
}

int getLow(float result[], int num, int &numL)
{
	for (int i=0 ; i<num ; i++)
	{
		if (result[i] < 20)
			numL++ ;
	}
	return numL;
}

void writeFile (float data[], float result[], int num)
{
	ofstream out("outputQ3.txt");
	out << left << " " << setw(16) << "C (Celcius)" << setw(18) << "F (Farenheit)" << "Description" << endl;
	out  << " " << setw(16) << "============" << setw(18) << "==============" << "===========" << endl;
	
	out << fixed << setprecision(2);
	for (int i=0 ; i<num; i++)
	{
		out<< left << "   " << setw(18) << result[i] << setw(18) << data[i] <<setw(10)<< grade(result[i]) << endl;
	}
	
	out.close();
}

int main()
{
	int num=0, numH=0, numM=0, numL=0;
	
	float data[MAX]={0};
	float result[MAX]={0};
	
	readFile(data , num);
	computeC (data , result , num);
	writeFile(data, result , num);
	
	cout << fixed << setprecision(2);
	cout << "Average of the temperature = " << average(result , num) << endl;
	cout << "Number of high temperature = " << getHigh(result , num , numH) << endl;
	cout << "Number of medium temperature = " << getMedium(result , num , numM) << endl;
	cout << "Number of low temperature = " << getLow(result , num , numL) << endl;
}
