#include<iostream>
#include<fstream>
#include<iomanip>
#include<cstdlib>
#define r 20
#define c 4
using namespace std;
ofstream out("output1.txt");
void getInput(string uni[][1],int num[][c])
{
	ifstream inp("input1.txt");
	if(!inp)
	{
		cout<<"Error! File not found."<<endl;
		exit(0);
	}
	
	
	{
		for(int i=0;i<r;i++)
		{
			inp>>uni[i][0];
			out<<setw(9),<<uni[i][0];
			inp>>num[i][0];
			out<<setw(9)<<num[i][0];
			inp>>num[i][1];
			out<<setw(9)<<num[i][1];
			inp>>num[i][2];
			out<<setw(9)<<num[i][2];
			out<<endl;	
		}
	}
	inp.close();
}

void calTotal(int num[][c],int &sum1,int &sum2,int &sum3)
{
	
	sum1 = 0,sum2=0,sum3=0;
	for(int i=0;i<r;i++)
	{
		sum1 += num[i][0];
		sum2 += num[i][1];
		sum3 += num[i][2];
	}
	out<<"---------------------------------------------------------------"<<endl;
	out<<fixed<<setprecision(2)<<"Total\t"<<"      "<<sum1<<"  "<<sum2<<"  "<<sum3<<"  "<<endl;
}
void calAvrg(int &sum1,int &sum2,int &sum3)
{
	float avrg1,avrg2,avrg3;
	avrg1=sum1/20.0;
	avrg2=sum2/20.0;
	avrg3=sum3/20.0;
	
	out<<fixed<<setprecision(2)<<"Average\t"<<"      "<<avrg1<<"  "<<avrg2<<"  "<<avrg3<<"  "<<endl;
	out<<"---------------------------------------------------------------"<<endl;
}
void getLowest(int num[][c],string uni[][1])
{
	int lowint,lowenr,lowout;
	int lowesttake=9999;
	int lowestenr=9999;
	int lowestout=9999;
	for(int i=0;i<r;i++)
		{
			if(num[i][0]<lowesttake)
			{
				lowesttake=num[i][0];
				lowint=i;
			}
			if(num[i][1]<lowestenr)
			{
				lowestenr=num[i][1];
				lowenr=i;
			}
			if(num[i][2]<lowestout)
			{
				lowestout=num[i][2];
				lowout=i;
			}
		}
	out<<"THE LOWEST NUMBER OF STUDENTS' INTAKE = "<<lowesttake<<" ("<<uni[lowint][0]<<")"<<endl;	
	out<<"THE LOWEST NUMBER OF STUDENTS' ENROLMENT = "<<lowestenr<<" ("<<uni[lowenr][0]<<")"<<endl;
	out<<"THE LOWEST NUMBER OF STUDENTS' OUTPUT = "<<lowestout<<" ("<<uni[lowout][0]<<")"<<endl;	
}
void getHighest(int num[][c],string uni[][1])
{
	int highint,highenr,highout;
	int highesttake=-9999;
	int highestenr=-9999;
	int highestout=-9999;
	for(int i=0;i<r;i++)
		{
			if(num[i][0]>highesttake)
			{
				highesttake=num[i][0];
				highint=i;
			}
			if(num[i][1]>highestenr)
			{
				highestenr=num[i][1];
				highenr=i;
			}
			if(num[i][2]>highestout)
			{
				highestout=num[i][2];
				highout=i;
			}
			
		}
	out<<"\n\nTHE HIGHEST NUMBER OF STUDENTS' INTAKE = "<<highesttake<<" ("<<uni[highint][0]<<")"<<endl;	
	out<<"THE HIGHEST NUMBER OF STUDENTS' ENROLMENT = "<<highestenr<<" ("<<uni[highenr][0]<<")"<<endl;
	out<<"THE HIGHEST NUMBER OF STUDENTS' OUTPUT = "<<highestout<<" ("<<uni[highout][0]<<")"<<endl;	
}
void getRange(int num[][c],string uni[][1])
{
	int r1,r2,r3;

	int highesttake=-9999;
	int highestenr=-9999;
	int highestout=-9999;
	
	int lowesttake=9999;
	int lowestenr=9999;
	int lowestout=9999;
	
	for(int i=0;i<r;i++)
		{
			if(num[i][0]>highesttake)
			{
				highesttake=num[i][0];
			}
			if(num[i][0]<lowesttake)
			{
				lowesttake=num[i][0];
			}
			if(num[i][1]>highestenr)
			{
				highestenr=num[i][1];
			}
			if(num[i][1]<lowestenr)
			{
				lowestenr=num[i][1];
			}
			if(num[i][2]>highestout)
			{
				highestout=num[i][2];
			}
			if(num[i][2]<lowestout)
			{
				lowestout=num[i][2];
			}
		}
	
	r1=highesttake-lowesttake;
	r2=highestenr-lowestenr;
	r3=highestout-lowestout;
	
	out<<"\n\nTHE RANGE OF NUMBER OF STUDENTS' INTAKE = "<<r1<<endl;
	out<<"THE RANGE OF NUMBER OF STUDENTS' ENROLMENT = "<<r2<<endl;
	out<<"THE RANGE OF NUMBER OF STUDENTS' OUTPUT = "<<r3<<endl;
}


int main()
{
	int num[r][c];
	string uni[r][1];
	out<<"\tNUMBER OF STUDENTS' INTAKE, ENROLMENT AND OUTPUT\n\t\tIN PUBLIC UNIVERSITIES (2015)"<<endl;
	out<<"---------------------------------------------------------------"<<endl;
	out<<"  UNIVERSITY INTAKE  ENROLMENT OUTPUT"<<endl;
	out<<"---------------------------------------------------------------"<<endl;
	getInput(uni,num);
	int sum1,sum2,sum3;
	calTotal(num,sum1,sum2,sum3);
	calAvrg(sum1,sum2,sum3);
	getLowest(num,uni);
	getHighest(num,uni);
	getRange(num,uni);
	
	out.close();
	
	return 0;
}

