#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;

void readFile(ifstream &,double [],int &,int &);
void computeC(double [],double [],int & );
double average(double [],int);
void grade(double [],char [],int &);
void writeFile(double [],double[],char [],int &);

int main()
{	
	int n=5,num=0;
	double dataF[n];
	double C[n];
	double Average;
	char G[n];
	int numH=0,numM=0,numL=0;
	
	ifstream F;
	
	
	F.open("F.txt");
	
	readFile(F,dataF,num,n);
	
	computeC(dataF,C,num);

	Average = average(C,num);
	grade(C,G,num);
	writeFile(C,dataF,G,num);
	
	for(int i=0;i<5;i++)
	{
		if(G[i]=='H')
		numH++;
		else if(G[i]=='M')
		numM++;
		else
		numL++;
	}
	
	cout<<"Average of the temperature: "<<Average<<endl;
	cout<<"Number of high temperature: "<<numH<<endl;
	cout<<"Number of medium temperature: "<<numM<<endl;
	cout<<"Number of low temperature: "<<numL<<endl;
	
	F.close();
	return 0;
}

void readFile(ifstream &F,double dF[],int &num,int &n)
{
	for(int i=0; i<n ;i++)
	{
		F >> dF[i];
		num+=1;
	}
}

void computeC(double dataF[],double c[],int &num)
{
	for(int i=0;i<num;i++)
	{
		c[i]=static_cast<double>(5)/9 * (dataF[i]-32);
	}
}

double average(double c[],int num)
{
	double avg,tot=0;
	for(int i=0; i<num;i++)
	{
		tot += c[i];
	}
	avg = tot/num;
	return avg;
}

void grade(double c[],char g[],int &num)
{
	for (int i=0;i<num;i++)
	{
		if(c[i]>=35)
		g[i]='H';
		else if((c[i]<35)&&(c[i]>=20))
		g[i]='M';
		else
		g[i]='L';	
	}
}

void writeFile(double c[],double f[],char g[],int &num)
{
	ofstream output;
	output.open("output.txt");
	
	output<<"C (celcius)"<<setw(20)<<"F (Fahrenheit)"<<setw(20)<<"Description"<<endl;
	output<<"==========="<<setw(20)<<"=============="<<setw(20)<<"==========="<<endl;
	
	for(int i=0;i<5;i++)
	{
		output <<c[i]<<setw(20)<<f[i]<<setw(20)<<g[i]<<endl;	
	}
}

