/* QUESTION 3
   SECJ 1013 (Section 02) - 30 November 2019
   Mohammad Safwan Bin Azhar - 001011081489 - A19EC0191
   Nur Irdeena Binti Che Mohamad Zulkepli - 000923030444 - A19EC0130 */
   
#include <iostream> 
#include <fstream> 
#include <string> 
#include <iomanip>
#define R 15
#define C 3
using namespace std;

void readFile(string st, double valueF[R])
{
	ifstream inp;
	inp.open("inputvalueF.txt"); 
	ofstream out ("outvalueF.txt"); 
	
	if(!inp.is_open()) 
	{
		cout << "Error! Input file does not exist. Please enter the correct file name." << endl;
		exit(0);
	}
	
	int i;
	while (!inp.eof()) 
	{
		for(i = 0; i < R; i++)
		{
			inp >> valueF[i]; 
		}
	}
	inp.close(); 
	out.close();
}

double computeC(double valueF[R], double valueC[R], int a)
{
	double sum = 0;
	for(int i = 0; i < R; i++)
	{
		a++;
		valueC[i] =  (5 / 9.0) * (valueF[i] - 32);
		sum += valueC[i];
	}
	
	double avg = sum / a;
	cout << endl << "Average of temperature in Celcius:   " << setprecision(4) << avg << endl;
	return valueC, a;
}



double average(double valueF[R], int a)
{
	double sum = 0;
	for(int i = 0; i < R; i++)
	{
		a++;
		sum += valueF[i];
	}
	double avg = sum / a;
	
	cout << "Average of temperature in Farenheit: " << setprecision(4) << avg;
}


double grade(double valueC[], char description[])
{
	char gr;
	int numH = 0;
	int numM = 0;
	int numL = 0;
	
	for(int i = 0; i < R; i++)
	{
		if(valueC[i] >= 35.0)
		{
			description[i] = 'H';
			numH = numH + 1;
		}
		
		else if((valueC[i] < 35.0) && (valueC[i] >= 20.0))
		{
			description[i] = 'M';
			numM = numM + 1;
		}	
		
		else if(valueC[i] < 20.0)
		{
			description[i] = 'L';
			numL = numL + 1;
		}
	}
	
	cout << "Number of high temperature: " << numH << endl;
	cout << "Number of medium temperature: " << numM << endl;
	cout << "Number of low temperature: " << numL << endl;
}

double writeFile(double valueF[R], double valueC[R], int a)
{
	ofstream out ("outvalueF.txt"); 
	ifstream inp ("inputvalueF.txt");	
	char description[R];
	grade(valueC, description);
	out  <<  "Farenheit" << setw(12) << "Celcius" << setw(16) << "Description" << endl;
	out  << "=========" << setw(12) << "=======" << setw(16) << "===========" << endl;
	a = 0;
	
	for (int i = 0; i < R; i++)
	{
		for(int j = 2; j < C; j++)
		{
			a++;
			out << setprecision(4) << setw(7) << valueF[i] << setw(13) << valueC[i]  << setw(11)<< description[i] << endl;
		}
	}
	out << endl << "Number of data read: " << a << endl;
	return a;
}


int main()
{
	double valueF[R], valueC[R]; 
	int a;
	string st = "inputvalueF.txt";
	ofstream out ("outvalueF.txt"); 
	ifstream inp ("inputvalueF.txt");
	
	readFile(st, valueF);
	
	average(valueF, a);
	computeC(valueF, valueC, a);
	
	writeFile(valueF, valueC, a);
	
	
	out.close();
	return 0;
}
